helia 4.2.5 → 4.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -1,22 +1,22 @@
1
1
  (function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Helia = factory()}(typeof self !== 'undefined' ? self : this, function () {
2
- "use strict";var Helia=(()=>{var ww=Object.create;var gc=Object.defineProperty;var Ew=Object.getOwnPropertyDescriptor;var bw=Object.getOwnPropertyNames;var xw=Object.getPrototypeOf,_w=Object.prototype.hasOwnProperty;var nt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ye=(r,e)=>{for(var t in e)gc(r,t,{get:e[t],enumerable:!0})},v3=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of bw(e))!_w.call(r,o)&&o!==t&&gc(r,o,{get:()=>e[o],enumerable:!(n=Ew(e,o))||n.enumerable});return r};var Xe=(r,e,t)=>(t=r!=null?ww(xw(r)):{},v3(e||!r||!r.__esModule?gc(t,"default",{value:r,enumerable:!0}):t,r)),vw=r=>v3(gc({},"__esModule",{value:!0}),r);var $o=nt((JC,C3)=>{"use strict";function T3(r,e){for(let t in e)Object.defineProperty(r,t,{value:e[t],enumerable:!0,configurable:!0});return r}function Lw(r,e,t){if(!r||typeof r=="string")throw new TypeError("Please pass an Error to err-code");t||(t={}),typeof e=="object"&&(t=e,e=""),e&&(t.code=e);try{return T3(r,t)}catch{t.message=r.message,t.stack=r.stack;let o=function(){};return o.prototype=Object.create(Object.getPrototypeOf(r)),T3(new o,t)}}C3.exports=Lw});var J4=nt(ei=>{"use strict";var Tx="[object ArrayBuffer]",Nn=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===Tx}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let s=0;s<n.length;s++)if(n[s]!==o[s])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let i of t)n+=i.byteLength;let o=new Uint8Array(n),s=0;for(let i of t){let a=this.toUint8Array(i);o.set(a,s),s+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},vh="string",Cx=/^[0-9a-f]+$/i,kx=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,Dx=/^[a-zA-Z0-9-_]+$/,Qc=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=Nn.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},Rr=class{static toString(e,t=!1){let n=Nn.toArrayBuffer(e),o=new DataView(n),s="";for(let i=0;i<n.byteLength;i+=2){let a=o.getUint16(i,t);s+=String.fromCharCode(a)}return s}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let s=0;s<e.length;s++)o.setUint16(s*2,e.charCodeAt(s),t);return n}},Zc=class r{static isHex(e){return typeof e===vh&&Cx.test(e)}static isBase64(e){return typeof e===vh&&kx.test(e)}static isBase64Url(e){return typeof e===vh&&Dx.test(e)}static ToString(e,t="utf8"){let n=Nn.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return Rr.toString(n,!0);case"utf16":case"utf16be":return Rr.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return Rr.fromString(e,!0);case"utf16":case"utf16be":return Rr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Nn.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return Qc.fromString(e);case"utf16":case"utf16be":return Rr.fromString(e);case"utf16le":case"usc2":return Rr.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return Qc.toString(e);case"utf16":case"utf16be":return Rr.toString(e);case"utf16le":case"usc2":return Rr.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=Nn.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Nn.toUint8Array(e),n="",o=t.length;for(let s=0;s<o;s++){let i=t[s];i<16&&(n+="0"),n+=i.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let s=t.slice(o,o+2);n[o/2]=parseInt(s,16)}return n.buffer}static ToUtf16String(e,t=!1){return Rr.toString(e,t)}static FromUtf16String(e,t=!1){return Rr.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};Zc.DEFAULT_UTF8_ENCODING="utf8";function Nx(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let s in o)t[s]=o[s]}return t}function Px(...r){let e=r.map(o=>o.byteLength).reduce((o,s)=>o+s),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let s of o)t[n++]=s}),t.buffer}function Lx(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}ei.BufferSourceConverter=Nn;ei.Convert=Zc;ei.assign=Nx;ei.combine=Px;ei.isEqual=Lx});var s6=nt((xa,Vl)=>{(function(r,e){"use strict";var t={version:"3.0.0",x86:{},x64:{},inputValidation:!0};function n(f){if(!Array.isArray(f)&&!ArrayBuffer.isView(f))return!1;for(var p=0;p<f.length;p++)if(!Number.isInteger(f[p])||f[p]<0||f[p]>255)return!1;return!0}function o(f,p){return(f&65535)*p+(((f>>>16)*p&65535)<<16)}function s(f,p){return f<<p|f>>>32-p}function i(f){return f^=f>>>16,f=o(f,2246822507),f^=f>>>13,f=o(f,3266489909),f^=f>>>16,f}function a(f,p){f=[f[0]>>>16,f[0]&65535,f[1]>>>16,f[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var m=[0,0,0,0];return m[3]+=f[3]+p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=f[2]+p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=f[1]+p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=f[0]+p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[3]]}function c(f,p){f=[f[0]>>>16,f[0]&65535,f[1]>>>16,f[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var m=[0,0,0,0];return m[3]+=f[3]*p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=f[2]*p[3],m[1]+=m[2]>>>16,m[2]&=65535,m[2]+=f[3]*p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=f[1]*p[3],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=f[2]*p[2],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=f[3]*p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=f[0]*p[3]+f[1]*p[2]+f[2]*p[1]+f[3]*p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[3]]}function l(f,p){return p%=64,p===32?[f[1],f[0]]:p<32?[f[0]<<p|f[1]>>>32-p,f[1]<<p|f[0]>>>32-p]:(p-=32,[f[1]<<p|f[0]>>>32-p,f[0]<<p|f[1]>>>32-p])}function d(f,p){return p%=64,p===0?f:p<32?[f[0]<<p|f[1]>>>32-p,f[1]<<p]:[f[1]<<p-32,0]}function u(f,p){return[f[0]^p[0],f[1]^p[1]]}function h(f){return f=u(f,[0,f[0]>>>1]),f=c(f,[4283543511,3981806797]),f=u(f,[0,f[0]>>>1]),f=c(f,[3301882366,444984403]),f=u(f,[0,f[0]>>>1]),f}t.x86.hash32=function(f,p){if(t.inputValidation&&!n(f))return e;p=p||0;for(var m=f.length%4,y=f.length-m,w=p,b=0,E=3432918353,x=461845907,_=0;_<y;_=_+4)b=f[_]|f[_+1]<<8|f[_+2]<<16|f[_+3]<<24,b=o(b,E),b=s(b,15),b=o(b,x),w^=b,w=s(w,13),w=o(w,5)+3864292196;switch(b=0,m){case 3:b^=f[_+2]<<16;case 2:b^=f[_+1]<<8;case 1:b^=f[_],b=o(b,E),b=s(b,15),b=o(b,x),w^=b}return w^=f.length,w=i(w),w>>>0},t.x86.hash128=function(f,p){if(t.inputValidation&&!n(f))return e;p=p||0;for(var m=f.length%16,y=f.length-m,w=p,b=p,E=p,x=p,_=0,I=0,A=0,R=0,k=597399067,O=2869860233,N=951274213,M=2716044179,C=0;C<y;C=C+16)_=f[C]|f[C+1]<<8|f[C+2]<<16|f[C+3]<<24,I=f[C+4]|f[C+5]<<8|f[C+6]<<16|f[C+7]<<24,A=f[C+8]|f[C+9]<<8|f[C+10]<<16|f[C+11]<<24,R=f[C+12]|f[C+13]<<8|f[C+14]<<16|f[C+15]<<24,_=o(_,k),_=s(_,15),_=o(_,O),w^=_,w=s(w,19),w+=b,w=o(w,5)+1444728091,I=o(I,O),I=s(I,16),I=o(I,N),b^=I,b=s(b,17),b+=E,b=o(b,5)+197830471,A=o(A,N),A=s(A,17),A=o(A,M),E^=A,E=s(E,15),E+=x,E=o(E,5)+2530024501,R=o(R,M),R=s(R,18),R=o(R,k),x^=R,x=s(x,13),x+=w,x=o(x,5)+850148119;switch(_=0,I=0,A=0,R=0,m){case 15:R^=f[C+14]<<16;case 14:R^=f[C+13]<<8;case 13:R^=f[C+12],R=o(R,M),R=s(R,18),R=o(R,k),x^=R;case 12:A^=f[C+11]<<24;case 11:A^=f[C+10]<<16;case 10:A^=f[C+9]<<8;case 9:A^=f[C+8],A=o(A,N),A=s(A,17),A=o(A,M),E^=A;case 8:I^=f[C+7]<<24;case 7:I^=f[C+6]<<16;case 6:I^=f[C+5]<<8;case 5:I^=f[C+4],I=o(I,O),I=s(I,16),I=o(I,N),b^=I;case 4:_^=f[C+3]<<24;case 3:_^=f[C+2]<<16;case 2:_^=f[C+1]<<8;case 1:_^=f[C],_=o(_,k),_=s(_,15),_=o(_,O),w^=_}return w^=f.length,b^=f.length,E^=f.length,x^=f.length,w+=b,w+=E,w+=x,b+=w,E+=w,x+=w,w=i(w),b=i(b),E=i(E),x=i(x),w+=b,w+=E,w+=x,b+=w,E+=w,x+=w,("00000000"+(w>>>0).toString(16)).slice(-8)+("00000000"+(b>>>0).toString(16)).slice(-8)+("00000000"+(E>>>0).toString(16)).slice(-8)+("00000000"+(x>>>0).toString(16)).slice(-8)},t.x64.hash128=function(f,p){if(t.inputValidation&&!n(f))return e;p=p||0;for(var m=f.length%16,y=f.length-m,w=[0,p],b=[0,p],E=[0,0],x=[0,0],_=[2277735313,289559509],I=[1291169091,658871167],A=0;A<y;A=A+16)E=[f[A+4]|f[A+5]<<8|f[A+6]<<16|f[A+7]<<24,f[A]|f[A+1]<<8|f[A+2]<<16|f[A+3]<<24],x=[f[A+12]|f[A+13]<<8|f[A+14]<<16|f[A+15]<<24,f[A+8]|f[A+9]<<8|f[A+10]<<16|f[A+11]<<24],E=c(E,_),E=l(E,31),E=c(E,I),w=u(w,E),w=l(w,27),w=a(w,b),w=a(c(w,[0,5]),[0,1390208809]),x=c(x,I),x=l(x,33),x=c(x,_),b=u(b,x),b=l(b,31),b=a(b,w),b=a(c(b,[0,5]),[0,944331445]);switch(E=[0,0],x=[0,0],m){case 15:x=u(x,d([0,f[A+14]],48));case 14:x=u(x,d([0,f[A+13]],40));case 13:x=u(x,d([0,f[A+12]],32));case 12:x=u(x,d([0,f[A+11]],24));case 11:x=u(x,d([0,f[A+10]],16));case 10:x=u(x,d([0,f[A+9]],8));case 9:x=u(x,[0,f[A+8]]),x=c(x,I),x=l(x,33),x=c(x,_),b=u(b,x);case 8:E=u(E,d([0,f[A+7]],56));case 7:E=u(E,d([0,f[A+6]],48));case 6:E=u(E,d([0,f[A+5]],40));case 5:E=u(E,d([0,f[A+4]],32));case 4:E=u(E,d([0,f[A+3]],24));case 3:E=u(E,d([0,f[A+2]],16));case 2:E=u(E,d([0,f[A+1]],8));case 1:E=u(E,[0,f[A]]),E=c(E,_),E=l(E,31),E=c(E,I),w=u(w,E)}return w=u(w,[0,f.length]),b=u(b,[0,f.length]),w=a(w,b),b=a(b,w),w=h(w),b=h(b),w=a(w,b),b=a(b,w),("00000000"+(w[0]>>>0).toString(16)).slice(-8)+("00000000"+(w[1]>>>0).toString(16)).slice(-8)+("00000000"+(b[0]>>>0).toString(16)).slice(-8)+("00000000"+(b[1]>>>0).toString(16)).slice(-8)},typeof xa<"u"?(typeof Vl<"u"&&Vl.exports&&(xa=Vl.exports=t),xa.murmurHash3=t):typeof define=="function"&&define.amd?define([],function(){return t}):(t._murmurHash3=r.murmurHash3,t.noConflict=function(){return r.murmurHash3=t._murmurHash3,t._murmurHash3=e,t.noConflict=e,t},r.murmurHash3=t)})(xa)});var Kl=nt((fO,i6)=>{i6.exports=s6()});var f6=nt((yB,d6)=>{var si=1e3,ii=si*60,ai=ii*60,fs=ai*24,S_=fs*7,R_=fs*365.25;d6.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return A_(r);if(t==="number"&&isFinite(r))return e.long?T_(r):I_(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function A_(r){if(r=String(r),!(r.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(e){var t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*R_;case"weeks":case"week":case"w":return t*S_;case"days":case"day":case"d":return t*fs;case"hours":case"hour":case"hrs":case"hr":case"h":return t*ai;case"minutes":case"minute":case"mins":case"min":case"m":return t*ii;case"seconds":case"second":case"secs":case"sec":case"s":return t*si;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function I_(r){var e=Math.abs(r);return e>=fs?Math.round(r/fs)+"d":e>=ai?Math.round(r/ai)+"h":e>=ii?Math.round(r/ii)+"m":e>=si?Math.round(r/si)+"s":r+"ms"}function T_(r){var e=Math.abs(r);return e>=fs?zl(r,e,fs,"day"):e>=ai?zl(r,e,ai,"hour"):e>=ii?zl(r,e,ii,"minute"):e>=si?zl(r,e,si,"second"):r+" ms"}function zl(r,e,t,n){var o=e>=t*1.5;return Math.round(r/t)+" "+n+(o?"s":"")}});var p6=nt((wB,h6)=>{function C_(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=f6(),t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let h=0;h<d.length;h++)u=(u<<5)-u+d.charCodeAt(h),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,h=null,f,p;function m(...y){if(!m.enabled)return;let w=m,b=Number(new Date),E=b-(u||b);w.diff=E,w.prev=u,w.curr=b,u=b,y[0]=t.coerce(y[0]),typeof y[0]!="string"&&y.unshift("%O");let x=0;y[0]=y[0].replace(/%([a-zA-Z%])/g,(I,A)=>{if(I==="%%")return"%";x++;let R=t.formatters[A];if(typeof R=="function"){let k=y[x];I=R.call(w,k),y.splice(x,1),x--}return I}),t.formatArgs.call(w,y),(w.log||t.log).apply(w,y)}return m.namespace=d,m.useColors=t.useColors(),m.color=t.selectColor(d),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(f!==t.namespaces&&(f=t.namespaces,p=t.enabled(d)),p),set:y=>{h=y}}),typeof t.init=="function"&&t.init(m),m}function n(d,u){let h=t(this.namespace+(typeof u>"u"?":":u)+d);return h.log=this.log,h}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,h=(typeof d=="string"?d:"").split(/[\s,]+/),f=h.length;for(u=0;u<f;u++)h[u]&&(d=h[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.slice(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function s(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function i(d){if(d[d.length-1]==="*")return!0;let u,h;for(u=0,h=t.skips.length;u<h;u++)if(t.skips[u].test(d))return!1;for(u=0,h=t.names.length;u<h;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack||d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}h6.exports=C_});var m6=nt((ir,Yl)=>{ir.formatArgs=D_;ir.save=N_;ir.load=P_;ir.useColors=k_;ir.storage=L_();ir.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();ir.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function k_(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let r;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(r=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(r[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function D_(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Yl.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}ir.log=console.debug||console.log||(()=>{});function N_(r){try{r?ir.storage.setItem("debug",r):ir.storage.removeItem("debug")}catch{}}function P_(){let r;try{r=ir.storage.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function L_(){try{return localStorage}catch{}}Yl.exports=p6()(ir);var{formatters:O_}=Yl.exports;O_.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var y6=nt((vB,Zh)=>{"use strict";var M_=Object.prototype.hasOwnProperty,Ft="~";function Aa(){}Object.create&&(Aa.prototype=Object.create(null),new Aa().__proto__||(Ft=!1));function U_(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function g6(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new U_(t,n||r,o),i=Ft?Ft+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],s]:r._events[i].push(s):(r._events[i]=s,r._eventsCount++),r}function Xl(r,e){--r._eventsCount===0?r._events=new Aa:delete r._events[e]}function Nt(){this._events=new Aa,this._eventsCount=0}Nt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)M_.call(t,n)&&e.push(Ft?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Nt.prototype.listeners=function(e){var t=Ft?Ft+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,s=n.length,i=new Array(s);o<s;o++)i[o]=n[o].fn;return i};Nt.prototype.listenerCount=function(e){var t=Ft?Ft+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Nt.prototype.emit=function(e,t,n,o,s,i){var a=Ft?Ft+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,s),!0;case 6:return c.fn.call(c.context,t,n,o,s,i),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var h=c.length,f;for(u=0;u<h;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(f=1,d=new Array(l-1);f<l;f++)d[f-1]=arguments[f];c[u].fn.apply(c[u].context,d)}}return!0};Nt.prototype.on=function(e,t,n){return g6(this,e,t,n,!1)};Nt.prototype.once=function(e,t,n){return g6(this,e,t,n,!0)};Nt.prototype.removeListener=function(e,t,n,o){var s=Ft?Ft+e:e;if(!this._events[s])return this;if(!t)return Xl(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&Xl(this,s);else{for(var a=0,c=[],l=i.length;a<l;a++)(i[a].fn!==t||o&&!i[a].once||n&&i[a].context!==n)&&c.push(i[a]);c.length?this._events[s]=c.length===1?c[0]:c:Xl(this,s)}return this};Nt.prototype.removeAllListeners=function(e){var t;return e?(t=Ft?Ft+e:e,this._events[t]&&Xl(this,t)):(this._events=new Aa,this._eventsCount=0),this};Nt.prototype.off=Nt.prototype.removeListener;Nt.prototype.addListener=Nt.prototype.on;Nt.prefixed=Ft;Nt.EventEmitter=Nt;typeof Zh<"u"&&(Zh.exports=Nt)});var n0=nt((WB,x6)=>{x6.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(s,i){t[s]=i,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(s){return t[s]!==void 0||n[s]!==void 0},remove:function(s){t[s]!==void 0&&(t[s]=void 0),n[s]!==void 0&&(n[s]=void 0)},get:function(s){var i=t[s];if(i!==void 0)return i;if((i=n[s])!==void 0)return o(s,i),i},set:function(s,i){t[s]!==void 0?t[s]=i:o(s,i)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var u5=nt(Ua=>{(function(){var r,e,t,n,o,s,i,a;a=function(c){var l,d,u,h;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,h=c&255,[l,d,u,h].join(".")},i=function(c){var l,d,u,h,f,p;for(l=[],u=h=0;h<=3&&c.length!==0;u=++h){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),f=p[0],d=p[1],c=c.substring(d),l.push(f)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),s=t("a"),o=t("A"),e=function(c){var l,d,u,h,f;for(h=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),f=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)h=h*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")h=h*l+(10+t(c[u])-s)>>>0;else if("A"<=c[u]&&c[u]<="F")h=h*l+(10+t(c[u])-o)>>>0;else break;else break;if(h>4294967295)throw new Error("too large");u++}if(u===f)throw new Error("empty octet");return[h,u]},r=function(){function c(l,d){var u,h,f,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(p=l.split("/",2),l=p[0],d=p[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=i(d)}catch(m){throw u=m,new Error("Invalid mask: "+d)}for(h=f=32;f>=0;h=--f)if(this.maskLong===4294967295<<32-h>>>0){this.bitmask=h;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(i(l)&this.maskLong)>>>0}catch(m){throw u=m,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(i(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var d,u,h;for(h=i(this.first),u=i(this.last),d=0;h<=u;)l(a(h),h,d),d++,h++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),Ua.ip2long=i,Ua.long2ip=a,Ua.Netmask=r}).call(Ua)});var Yu=nt((_H,e2)=>{var xH=function(){typeof e2<"u"&&(e2.exports=m);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,s=864e13,i=4294967296,a=1e6,c="000000000",l=Math.trunc||function(R){var k=R-R%1;return k==0&&(R<0||R===0&&1/R!=1/0)?-0:k},d=m.prototype,u=(m.fromDate=function(R){return new m(+R)},m.fromInt64BE=x(0,1,2,3,0,4),m.fromInt64LE=x(3,2,1,0,4,0),m.fromString=function(N){var k,O=new m,N=(N+="").replace(/^\s*[+\-]?\d+/,function(C){var C=+C,Q=1970+(C-1970)%400;return O.year=C-Q,Q}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(M,C,Q){return C<0&&(Q*=-1),k=6e4*(60*+C+ +Q),""}).replace(/\.\d+$/,function(M){return O.nano=+(M+c).substr(1,9),""}).split(/\D+/);if(1<N.length?N[1]--:N[1]=0,O.time=k=Date.UTC.apply(Date,N)-(k||0),isNaN(k))throw new TypeError("Invalid Date");return y(O)},m.fromTimeT=function(R){return b(R,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(R){return this.nano+=+R||0,this},d.getNano=function(){var R=y(this);return(R.time%1e3*a+ +R.nano+1e9)%1e9},d.getTimeT=function(){var k=y(this),R=Math.floor(k.time/1e3),k=k.year;return k&&(R+=k*t*r/e),R},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return w(y(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(R){var k=this,O=k.toDate(),N={H:function(){return I(O.getUTCHours())},L:function(){return A(O.getUTCMilliseconds(),3)},M:function(){return I(O.getUTCMinutes())},N:function(){return A(k.getNano(),9)},S:function(){return I(O.getUTCSeconds())},Y:function(){var M=k.getYear();return 999999<M?"+"+M:9999<M?"+"+A(M,6):0<=M?A(M,4):-999999<=M?"-"+A(-M,6):M},a:function(){return f[O.getUTCDay()]},b:function(){return h[O.getUTCMonth()]},d:function(){return I(O.getUTCDate())},e:function(){return function(M){return(9<M?"":" ")+(0|M)}(O.getUTCDate())},m:function(){return I(O.getUTCMonth()+1)}};return function M(C){return C.replace(/%./g,function(Q){var P=Q[1],T=p[P],P=N[P];return T?M(T):P?P():Q})}(R||u)},d.writeInt64BE=E(0,1,2,3,0,4),d.writeInt64LE=E(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],f=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],p={"%":"%",F:"%Y-%m-%d",n:`
3
- `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return m;function m(R,k,O){var N=this;if(!(N instanceof m))return new m(R,k,O);N.time=+R||0,N.nano=+k||0,N.year=+O||0,y(N)}function y(R){var k,O,N,M=R.year,C=R.time,Q=R.nano,T=((Q<0||a<=Q)&&(Q-=(O=Math.floor(Q/a))*a,C+=O,O=1),M%e);return(C<-s||s<C||T)&&((k=l(C/o))&&(M+=k*e,C-=k*o),(N=w(C)).setUTCFullYear(T+N.getUTCFullYear()),N=(C=+N)+(k=l((M-=T)/e))*o,k&&-s<=N&&N<=s&&(M-=k*e,C=N),O=1),O&&(R.year=M,R.time=C,R.nano=Q),R}function w(R){var k=new Date(0);return k.setTime(R),k}function b(M,N){M=+M||0;var O=l((N=(N|0)*i)/n)+l(M/n),N=N%n+M%n,M=l(N/n);return M&&(O+=M,N-=M*n),new m(1e3*N,0,O*e)}function E(R,k,O,N,M,C){return function(T,P){var D=y(this);T=T||new Array(8),_(T,P|=0);var S=Math.floor(D.time/1e3),D=D.year*(t*r/e),H=l(D/i)+l(S/i),D=D%i+S%i,S=Math.floor(D/i);return S&&(H+=S,D-=S*i),Q(T,P+M,H),Q(T,P+C,D),T};function Q(T,P,H){T[P+R]=H>>24&255,T[P+k]=H>>16&255,T[P+O]=H>>8&255,T[P+N]=255&H}}function x(R,k,O,N,M,C){return function(T,P){_(T,P|=0);var H=Q(T,P+M);return b(Q(T,P+C),H)};function Q(T,P){return 16777216*T[P+R]+(T[P+k]<<16|T[P+O]<<8|T[P+N])}}function _(R,k){if(R=R&&R.length,R==null)throw new TypeError("Invalid Buffer");if(R<k+8)throw new RangeError("Out of range")}function I(R){return(9<R?"":"0")+(0|R)}function A(R,k){return(c+(0|R)).substr(-k)}}()});var U7=nt((hZ,M7)=>{function cA(){return!!(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&process.versions.electron||typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Electron")>=0)}M7.exports=cA});var E9=nt((Ote,w9)=>{"use strict";w9.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var R9=nt((v9,S9)=>{"use strict";var ad=E9(),{hasOwnProperty:x9}=Object.prototype,{propertyIsEnumerable:$A}=Object,Ki=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),HA=v9,b9={concatArrays:!1,ignoreUndefined:!1},cd=r=>{let e=[];for(let t in r)x9.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)$A.call(r,n)&&e.push(n)}return e};function $i(r){return Array.isArray(r)?qA(r):ad(r)?GA(r):r}function qA(r){let e=r.slice(0,0);return cd(r).forEach(t=>{Ki(e,t,$i(r[t]))}),e}function GA(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return cd(r).forEach(t=>{Ki(e,t,$i(r[t]))}),e}var _9=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Ki(r,o,bp(r[o],e[o],n)):Ki(r,o,$i(e[o])))}),r),WA=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(s=>{let i=[];for(let a=0;a<s.length;a++)x9.call(s,a)&&(i.push(String(a)),s===r?Ki(n,o++,s[a]):Ki(n,o++,$i(s[a])));n=_9(n,s,cd(s).filter(a=>!i.includes(a)),t)}),n};function bp(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?WA(r,e,t):!ad(e)||!ad(r)?$i(e):_9(r,e,cd(e),t)}S9.exports=function(...r){let e=bp($i(b9),this!==HA&&this||{},b9),t={_:{}};for(let n of r)if(n!==void 0){if(!ad(n))throw new TypeError("`"+n+"` is not an Option Object");t=bp(t,{_:n},e)}return t._}});var T9=nt((Mte,I9)=>{"use strict";function zA(r){return r>=55296&&r<=56319}function YA(r){return r>=56320&&r<=57343}I9.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,s=0,i,a,c=0;c<o;c+=1){if(i=t.charCodeAt(c),a=t[c],zA(i)&&YA(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),s+=e(a),s===n)return t.slice(0,c+1);if(s>n)return t.slice(0,c-a.length+1)}return t}});var k9=nt((Ute,C9)=>{"use strict";function XA(r){return r>=55296&&r<=56319}function QA(r){return r>=56320&&r<=57343}C9.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,s=null,i=0;i<t;i++)o=e.charCodeAt(i),QA(o)?s!=null&&XA(s)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),s=o;return n}});var N9=nt((Fte,D9)=>{"use strict";var ZA=T9(),jA=k9();D9.exports=ZA.bind(null,jA)});var O9=nt((Vte,L9)=>{"use strict";var JA=N9(),eI=/[\/\?<>\\:\*\|"]/g,tI=/[\x00-\x1f\x80-\x9f]/g,rI=/^\.+$/,nI=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,oI=/[\. ]+$/;function P9(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(eI,e).replace(tI,e).replace(rI,e).replace(nI,e).replace(oI,e);return JA(t,255)}L9.exports=function(r,e){var t=e&&e.replacement||"",n=P9(r,t);return t===""?n:P9(n,"")}});var by=nt(Rd=>{"use strict";Object.defineProperty(Rd,"__esModule",{value:!0});var Hp=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},Sd=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new Hp;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:s=>o.push(s),stop:()=>o.stop(),fail:s=>o.fail(s),on:(s,i)=>{o.eventHandlers[s]=i}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};Rd.EventIterator=Sd;Rd.default=Sd});var xy=nt(fc=>{"use strict";Object.defineProperty(fc,"__esModule",{value:!0});var qp=by();fc.EventIterator=qp.EventIterator;function QI(r,e,t){return new qp.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}fc.subscribe=QI;fc.default=qp.EventIterator});var DT={};Ye(DT,{DEFAULT_SESSION_MAX_PROVIDERS:()=>s5,DEFAULT_SESSION_MIN_PROVIDERS:()=>o5,createHelia:()=>CT,libp2pDefaults:()=>Cd});var S3=Symbol.for("@libp2p/connection");var an=Symbol.for("@libp2p/content-routing");var Vo=Symbol.for("@libp2p/peer-discovery");var Ds=Symbol.for("@libp2p/peer-id");function Ns(r){return r!=null&&!!r[Ds]}var cn=Symbol.for("@libp2p/peer-routing");var R3="keep-alive";var ln=Symbol.for("@libp2p/transport");var Zn;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Zn||(Zn={}));var un=class r extends Error{code;type;constructor(e="The operation was aborted"){super(e),this.name="AbortError",this.code=r.code,this.type=r.type}static code="ABORT_ERR";static type="aborted"},g=class extends Error{code;props;constructor(e,t,n){super(e),this.code=t,this.name=n?.name??"CodeError",this.props=n??{}}},yc=class extends AggregateError{code;props;constructor(e,t,n,o){super(e,t),this.code=n,this.name=o?.name??"AggregateCodeError",this.props=o??{}}};var _n="ERR_TIMEOUT";var Ko="ERR_INVALID_MESSAGE";var K=(r,...e)=>{try{[...e]}catch{}};var ge=class extends EventTarget{#e=new Map;constructor(){super(),K(1/0,this)}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:s})=>s!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new Pt(e,t))}},rf=class extends Event{detail;constructor(e,t){super(e,t),this.detail=t?.detail}},Pt=globalThis.CustomEvent??rf;function wc(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function wr(...r){let e=[];for(let t of r)wc(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function Er(...r){let e=[];for(let t of r)wc(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var Be=Symbol.for("@libp2p/service-capabilities"),Mr=Symbol.for("@libp2p/service-dependencies");function _e(r){let e=new globalThis.AbortController;function t(){e.abort();for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}for(let s of r){if(s?.aborted===!0){t();break}s?.addEventListener!=null&&s.addEventListener("abort",t)}function n(){for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function ee(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var Ec=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||e-1&e)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},Ps=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Ec(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new Ec(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var nf=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function It(r={}){return Sw(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function Sw(r,e){e=e??{};let t=e.onEnd,n=new Ps,o,s,i,a=ee(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((y,w)=>{s=b=>{s=null,n.push(b);try{y(r(n))}catch(E){w(E)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=ee()})}},l=y=>s!=null?s(y):(n.push(y),o),d=y=>(n=new Ps,s!=null?s({error:y}):(n.push({error:y}),o)),u=y=>{if(i)return o;if(e?.objectMode!==!0&&y?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:y})},h=y=>i?o:(i=!0,y!=null?d(y):l({done:!0})),f=()=>(n=new Ps,h(),{done:!0}),p=y=>(h(y),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:f,throw:p,push:u,end:h,get readableLength(){return n.size},onEmpty:async y=>{let w=y?.signal;if(w?.throwIfAborted(),n.isEmpty())return;let b,E;w!=null&&(b=new Promise((x,_)=>{E=()=>{_(new nf)},w.addEventListener("abort",E)}));try{await Promise.race([a.promise,b])}finally{E!=null&&w!=null&&w?.removeEventListener("abort",E)}}},t==null)return o;let m=o;return o={[Symbol.asyncIterator](){return this},next(){return m.next()},throw(y){return m.throw(y),t!=null&&(t(y),t=void 0),{done:!0}},return(){return m.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(y){return m.end(y),t!=null&&(t(y),t=void 0),o},get readableLength(){return m.readableLength},onEmpty:y=>m.onEmpty(y)},o}var of=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function tr(r,e,t,n){let o=new of(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((s,i)=>{function a(){t?.removeEventListener("abort",d),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=u=>{try{if(n?.filter?.(u)===!1)return}catch(h){a(),i(h);return}a(),s(u)},l=u=>{a(),i(u.detail)},d=()=>{a(),i(o)};t?.addEventListener("abort",d),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var bc=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function ke(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new bc(t?.errorMessage,t?.errorCode));let n,o=new bc(t?.errorMessage,t?.errorCode);try{return await Promise.race([r,new Promise((s,i)=>{n=()=>{i(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var xc=class{deferred;signal;constructor(e){this.signal=e,this.deferred=ee(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new un)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function Rw(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var _c=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=Rw(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,K(1/0,this.controller.signal),this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&(this.controller.abort(new un),this.cleanup())}async join(e={}){let t=new xc(e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await ke(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var rr=class extends ge{concurrency;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){t?.signal?.throwIfAborted();let n=new _c(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let s=0;s<this.queue.length;s++)if(this.queue[s]===n){this.queue.splice(s,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new un)}),this.clear()}async onEmpty(e){this.size!==0&&await tr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await tr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await tr(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=It({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},s=c=>{n(c.detail)},i=()=>{n()},a=()=>{n(new g("Queue aborted","ERR_QUEUE_ABORTED"))};this.addEventListener("completed",o),this.addEventListener("error",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var Kt=class extends rr{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function Aw(r){return r[Symbol.asyncIterator]!=null}function Iw(r){if(Aw(r))return(async()=>{for await(let e of r);})();for(let e of r);}var $t=Iw;function pe(r=0){return new Uint8Array(r)}function Ge(r=0){return new Uint8Array(r)}var Tw=Math.pow(2,7),Cw=Math.pow(2,14),kw=Math.pow(2,21),sf=Math.pow(2,28),af=Math.pow(2,35),cf=Math.pow(2,42),lf=Math.pow(2,49),Te=128,Tt=127;function Se(r){if(r<Tw)return 1;if(r<Cw)return 2;if(r<kw)return 3;if(r<sf)return 4;if(r<af)return 5;if(r<cf)return 6;if(r<lf)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function uf(r,e,t=0){switch(Se(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function Dw(r,e,t=0){switch(Se(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function df(r,e){let t=r[e],n=0;if(n+=t&Tt,t<Te||(t=r[e+1],n+=(t&Tt)<<7,t<Te)||(t=r[e+2],n+=(t&Tt)<<14,t<Te)||(t=r[e+3],n+=(t&Tt)<<21,t<Te)||(t=r[e+4],n+=(t&Tt)*sf,t<Te)||(t=r[e+5],n+=(t&Tt)*af,t<Te)||(t=r[e+6],n+=(t&Tt)*cf,t<Te)||(t=r[e+7],n+=(t&Tt)*lf,t<Te))return n;throw new RangeError("Could not decode varint")}function Nw(r,e){let t=r.get(e),n=0;if(n+=t&Tt,t<Te||(t=r.get(e+1),n+=(t&Tt)<<7,t<Te)||(t=r.get(e+2),n+=(t&Tt)<<14,t<Te)||(t=r.get(e+3),n+=(t&Tt)<<21,t<Te)||(t=r.get(e+4),n+=(t&Tt)*sf,t<Te)||(t=r.get(e+5),n+=(t&Tt)*af,t<Te)||(t=r.get(e+6),n+=(t&Tt)*cf,t<Te)||(t=r.get(e+7),n+=(t&Tt)*lf,t<Te))return n;throw new RangeError("Could not decode varint")}function Ve(r,e,t=0){return e==null&&(e=Ge(Se(r))),e instanceof Uint8Array?uf(r,e,t):Dw(r,e,t)}function Lt(r,e=0){return r instanceof Uint8Array?df(r,e):Nw(r,e)}function ve(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=Ge(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function J(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var I3=Symbol.for("@achingbrain/uint8arraylist");function A3(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function vc(r){return!!r?.[I3]}var ce=class r{bufs;length;[I3]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(vc(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(vc(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=A3(this.bufs,e);return t.buf[t.index]}set(e,t){let n=A3(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(vc(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return ve(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:ve(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),s=new r;return s.length=o,s.bufs=[...n],s}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let s=0;s<this.bufs.length;s++){let i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(i);break}let u=e-a;n.push(i.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(d){if(t===c){n.push(i);break}n.push(i.subarray(0,t-a));break}n.push(i)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!vc(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[n[u]]=u;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let h=l;h>=0;h--){let f=this.get(u+h);if(n[h]!==f){d=Math.max(1,h-a[f]);break}}if(d===0)return u}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=Ge(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=pe(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=pe(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=pe(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=Ge(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=pe(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=pe(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=pe(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=pe(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=pe(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!J(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,s)=>o+s.byteLength,0)),n.length=t,n}};function Sc(r){return r[Symbol.asyncIterator]!=null}var Rc=r=>{let e=Se(r),t=Ge(e);return Ve(r,t),Rc.bytes=e,t};Rc.bytes=0;function Ht(r,e){e=e??{};let t=e.lengthEncoder??Rc;function*n(o){let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return Sc(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}Ht.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Rc;return new ce(t(r.byteLength),r)};var Ls=Xe($o(),1);var Ow=8,Bw=1024*1024*4,Ho;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Ho||(Ho={}));var ff=r=>{let e=Lt(r);return ff.bytes=Se(e),e};ff.bytes=0;function qt(r,e){let t=new ce,n=Ho.LENGTH,o=-1,s=e?.lengthDecoder??ff,i=e?.maxLengthLength??Ow,a=e?.maxDataLength??Bw;function*c(){for(;t.byteLength>0;){if(n===Ho.LENGTH)try{if(o=s(t),o<0)throw(0,Ls.default)(new Error("invalid message length"),"ERR_INVALID_MSG_LENGTH");if(o>a)throw(0,Ls.default)(new Error("message length too long"),"ERR_MSG_DATA_TOO_LONG");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Ho.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw(0,Ls.default)(new Error("message length length too long"),"ERR_MSG_LENGTH_TOO_LONG");break}throw l}if(n===Ho.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Ho.LENGTH}}}return Sc(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw(0,Ls.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw(0,Ls.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}()}qt.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:s,value:i}=await r.next(t);if(s===!0)return;i!=null&&(yield i)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{t=1}}();return qt(n,{...e??{},onLength:s=>{t=s}})};function Mw(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var Os=Mw;function Uw(r){return r[Symbol.asyncIterator]!=null}function Fw(r,e){let t=0;if(Uw(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Os(r),{value:o,done:s}=n.next();if(s===!0)return function*(){}();let i=e(o,t++);if(typeof i.then=="function")return async function*(){yield await i;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield i;for(let c of n)yield a(c,t++)}()}var Gt=Fw;function Vw(r){return r[Symbol.asyncIterator]!=null}function Kw(...r){let e=[];for(let t of r)Vw(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=It({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(r.map(async n=>{for await(let o of n)t.push(o)})),t.end()}catch(n){t.end(n)}}),yield*t}()}var Ot=Kw;function Qe(r,...e){if(r==null)throw new Error("Empty pipeline");if(hf(r)){let n=r;r=()=>n.source}else if(D3(r)||k3(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&hf(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)hf(t[n])&&(t[n]=Hw(t[n]));return $w(...t)}var $w=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},k3=r=>r?.[Symbol.asyncIterator]!=null,D3=r=>r?.[Symbol.iterator]!=null,hf=r=>r==null?!1:r.sink!=null&&r.source!=null,Hw=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=It({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(k3(s))o=async function*(){yield*s,n.end()};else if(D3(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return Ot(n,o())}return r.source};function qw(r){return r[Symbol.asyncIterator]!=null}function Gw(r,e){return qw(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var jn=Gw;var q=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var Zi="/ipfs/bitswap/1.2.0";var pf=new Float32Array([-0]),Jn=new Uint8Array(pf.buffer);function N3(r,e,t){pf[0]=r,e[t]=Jn[0],e[t+1]=Jn[1],e[t+2]=Jn[2],e[t+3]=Jn[3]}function P3(r,e){return Jn[0]=r[e],Jn[1]=r[e+1],Jn[2]=r[e+2],Jn[3]=r[e+3],pf[0]}var mf=new Float64Array([-0]),Ct=new Uint8Array(mf.buffer);function L3(r,e,t){mf[0]=r,e[t]=Ct[0],e[t+1]=Ct[1],e[t+2]=Ct[2],e[t+3]=Ct[3],e[t+4]=Ct[4],e[t+5]=Ct[5],e[t+6]=Ct[6],e[t+7]=Ct[7]}function O3(r,e){return Ct[0]=r[e],Ct[1]=r[e+1],Ct[2]=r[e+2],Ct[3]=r[e+3],Ct[4]=r[e+4],Ct[5]=r[e+5],Ct[6]=r[e+6],Ct[7]=r[e+7],mf[0]}var Ww=BigInt(Number.MAX_SAFE_INTEGER),zw=BigInt(Number.MIN_SAFE_INTEGER),nr=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return qo;if(e<Ww&&e>zw)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>B3&&(o=0n,++n>B3&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return qo;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):qo}},qo=new nr(0,0);qo.toBigInt=function(){return 0n};qo.zzEncode=qo.zzDecode=function(){return this};qo.length=function(){return 1};var B3=4294967296n;function M3(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function U3(r,e,t){if(t-e<1)return"";let o,s=[],i=0,a;for(;e<t;)a=r[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function gf(r,e,t){let n=t,o,s;for(let i=0;i<r.length;++i)o=r.charCodeAt(i),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((s=r.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function Ur(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Ic(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var yf=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,Ur(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw Ur(this,4);return Ic(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Ur(this,4);return Ic(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Ur(this,4);let e=P3(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Ur(this,4);let e=O3(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw Ur(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return U3(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Ur(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Ur(this);while(this.buf[this.pos++]&128);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new nr(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw Ur(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw Ur(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw Ur(this,8);let e=Ic(this.buf,this.pos+=4),t=Ic(this.buf,this.pos+=4);return new nr(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=df(this.buf,this.pos);return this.pos+=Se(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function wf(r){return new yf(r instanceof Uint8Array?r:r.subarray())}function re(r,e,t){let n=wf(r);return e.decode(n,void 0,t)}var vf={};Ye(vf,{base10:()=>Jw});var Sk=new Uint8Array(0);function V3(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function Sn(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function K3(r){return new TextEncoder().encode(r)}function $3(r){return new TextDecoder().decode(r)}function Yw(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(p){if(p instanceof Uint8Array||(ArrayBuffer.isView(p)?p=new Uint8Array(p.buffer,p.byteOffset,p.byteLength):Array.isArray(p)&&(p=Uint8Array.from(p))),!(p instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(p.length===0)return"";for(var m=0,y=0,w=0,b=p.length;w!==b&&p[w]===0;)w++,m++;for(var E=(b-w)*d+1>>>0,x=new Uint8Array(E);w!==b;){for(var _=p[w],I=0,A=E-1;(_!==0||I<y)&&A!==-1;A--,I++)_+=256*x[A]>>>0,x[A]=_%a>>>0,_=_/a>>>0;if(_!==0)throw new Error("Non-zero carry");y=I,w++}for(var R=E-y;R!==E&&x[R]===0;)R++;for(var k=c.repeat(m);R<E;++R)k+=r.charAt(x[R]);return k}function h(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var m=0;if(p[m]!==" "){for(var y=0,w=0;p[m]===c;)y++,m++;for(var b=(p.length-m)*l+1>>>0,E=new Uint8Array(b);p[m];){var x=t[p.charCodeAt(m)];if(x===255)return;for(var _=0,I=b-1;(x!==0||_<w)&&I!==-1;I--,_++)x+=a*E[I]>>>0,E[I]=x%256>>>0,x=x/256>>>0;if(x!==0)throw new Error("Non-zero carry");w=_,m++}if(p[m]!==" "){for(var A=b-w;A!==b&&E[A]===0;)A++;for(var R=new Uint8Array(y+(b-A)),k=y;A!==b;)R[k++]=E[A++];return R}}}function f(p){var m=h(p);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:h,decode:f}}var Xw=Yw,Qw=Xw,q3=Qw;var Ef=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},bf=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return G3(this,e)}},xf=class{decoders;constructor(e){this.decoders=e}or(e){return G3(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function G3(r,e){return new xf({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var _f=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new Ef(e,t,n),this.decoder=new bf(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Bs({name:r,prefix:e,encode:t,decode:n}){return new _f(r,e,t,n)}function eo({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=q3(t,r);return Bs({prefix:e,name:r,encode:n,decode:s=>Sn(o(s))})}function Zw(r,e,t,n){let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,c=0,l=0;for(let d=0;d<s;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,i[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i}function jw(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s}function Ze({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Bs({prefix:e,name:r,encode(o){return jw(o,n,t)},decode(o){return Zw(o,n,t,r)}})}var Jw=eo({prefix:"9",name:"base10",alphabet:"0123456789"});var Sf={};Ye(Sf,{base16:()=>eE,base16upper:()=>tE});var eE=Ze({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),tE=Ze({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Rf={};Ye(Rf,{base2:()=>rE});var rE=Ze({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Af={};Ye(Af,{base256emoji:()=>aE});var W3=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),nE=W3.reduce((r,e,t)=>(r[t]=e,r),[]),oE=W3.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function sE(r){return r.reduce((e,t)=>(e+=nE[t],e),"")}function iE(r){let e=[];for(let t of r){let n=oE[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var aE=Bs({prefix:"\u{1F680}",name:"base256emoji",encode:sE,decode:iE});var If={};Ye(If,{base32:()=>ut,base32hex:()=>uE,base32hexpad:()=>fE,base32hexpadupper:()=>hE,base32hexupper:()=>dE,base32pad:()=>cE,base32padupper:()=>lE,base32upper:()=>z3,base32z:()=>pE});var ut=Ze({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),z3=Ze({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),cE=Ze({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),lE=Ze({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),uE=Ze({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),dE=Ze({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),fE=Ze({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),hE=Ze({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),pE=Ze({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Tf={};Ye(Tf,{base36:()=>to,base36upper:()=>mE});var to=eo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),mE=eo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Cf={};Ye(Cf,{base58btc:()=>We,base58flickr:()=>gE});var We=eo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),gE=eo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Df={};Ye(Df,{base64:()=>ot,base64pad:()=>yE,base64url:()=>kf,base64urlpad:()=>wE});var ot=Ze({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),yE=Ze({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),kf=Ze({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),wE=Ze({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Nf={};Ye(Nf,{base8:()=>EE});var EE=Ze({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Pf={};Ye(Pf,{identity:()=>bE});var bE=Bs({prefix:"\0",name:"identity",encode:r=>$3(r),decode:r=>K3(r)});var Vk=new TextEncoder,Kk=new TextDecoder;var Y3=512;var Tc=85;var Mf={};Ye(Mf,{identity:()=>Mt});var Bt={};Ye(Bt,{Digest:()=>Go,create:()=>or,decode:()=>Fr,equals:()=>Bf});var xE=j3,Q3=128,_E=127,vE=~_E,SE=Math.pow(2,31);function j3(r,e,t){e=e||[],t=t||0;for(var n=t;r>=SE;)e[t++]=r&255|Q3,r/=128;for(;r&vE;)e[t++]=r&255|Q3,r>>>=7;return e[t]=r|0,j3.bytes=t-n+1,e}var RE=Of,AE=128,Z3=127;function Of(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Of.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&Z3)<<o:(i&Z3)*Math.pow(2,o),o+=7}while(i>=AE);return Of.bytes=s-n,t}var IE=Math.pow(2,7),TE=Math.pow(2,14),CE=Math.pow(2,21),kE=Math.pow(2,28),DE=Math.pow(2,35),NE=Math.pow(2,42),PE=Math.pow(2,49),LE=Math.pow(2,56),OE=Math.pow(2,63),BE=function(r){return r<IE?1:r<TE?2:r<CE?3:r<kE?4:r<DE?5:r<NE?6:r<PE?7:r<LE?8:r<OE?9:10},ME={encode:xE,decode:RE,encodingLength:BE},UE=ME,ji=UE;function Ji(r,e=0){return[ji.decode(r,e),ji.decode.bytes]}function Ms(r,e,t=0){return ji.encode(r,e,t),e}function Us(r){return ji.encodingLength(r)}function or(r,e){let t=e.byteLength,n=Us(r),o=n+Us(t),s=new Uint8Array(o+t);return Ms(r,s,0),Ms(t,s,n),s.set(e,o),new Go(r,t,e,s)}function Fr(r){let e=Sn(r),[t,n]=Ji(e),[o,s]=Ji(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Go(t,o,i,e)}function Bf(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&V3(r.bytes,t.bytes)}}var Go=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};var J3=0,FE="identity",e4=Sn;function VE(r){return or(J3,e4(r))}var Mt={code:J3,name:FE,encode:e4,digest:VE};var Kf={};Ye(Kf,{sha256:()=>De,sha512:()=>Vf});function Ff({name:r,code:e,encode:t}){return new Uf(r,e,t)}var Uf=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?or(this.code,t):t.then(n=>or(this.code,n))}else throw Error("Unknown type, must be binary type")}};function r4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var De=Ff({name:"sha2-256",code:18,encode:r4("SHA-256")}),Vf=Ff({name:"sha2-512",code:19,encode:r4("SHA-512")});function n4(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return $E(t,$f(r),e??We.encoder);default:return HE(t,$f(r),e??ut.encoder)}}var o4=new WeakMap;function $f(r){let e=o4.get(r);if(e==null){let t=new Map;return o4.set(r,t),t}return e}var ue=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==ea)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==qE)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=or(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&Bf(e.multihash,n.multihash)}toString(e){return n4(this,e)}toJSON(){return{"/":n4(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:s,bytes:i}=t;return new r(n,o,s,i??s4(n,o,s.bytes))}else if(t[GE]===!0){let{version:n,multihash:o,code:s}=t,i=Fr(o);return r.create(n,s,i)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==ea)throw new Error(`Version 0 CID must use dag-pb (code: ${ea}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=s4(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ea,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=Sn(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new Go(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,h]=Ji(e.subarray(t));return t+=h,u},o=n(),s=ea;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=KE(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return $f(s).set(n,e),s}};function KE(r,e){switch(r[0]){case"Q":{let t=e??We;return[We.prefix,t.decode(`${We.prefix}${r}`)]}case We.prefix:{let t=e??We;return[We.prefix,t.decode(r)]}case ut.prefix:{let t=e??ut;return[ut.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function $E(r,e,t){let{prefix:n}=t;if(n!==We.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function HE(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var ea=112,qE=18;function s4(r,e,t){let n=Us(r),o=n+Us(e),s=new Uint8Array(o+t.byteLength);return Ms(r,s,0),Ms(e,s,n),s.set(t,o),s}var GE=Symbol.for("@ipld/js-cid/CID");var br={...Pf,...Rf,...Nf,...vf,...Sf,...If,...Tf,...Cf,...Df,...Af},cD={...Kf,...Mf};function a4(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var i4=a4("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),Hf=a4("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Ge(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),WE={utf8:i4,"utf-8":i4,hex:br.base16,latin1:Hf,ascii:Hf,binary:Hf,...br},kc=WE;function L(r,e="utf8"){let t=kc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function qf(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return Ge(i);o+i>e&&(n=Ge(e),o=0);let a=n.subarray(o,o+=i);return o&7&&(o=(o|7)+1),a}}var Wo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function Gf(){}var zf=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},zE=qf();function YE(r){return globalThis.Buffer!=null?Ge(r):zE(r)}var ra=class{len;head;tail;states;constructor(){this.len=0,this.head=new Wo(Gf,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Wo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new Yf((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Dc,10,nr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=nr.fromBigInt(e);return this._push(Dc,t.length(),t)}uint64Number(e){return this._push(uf,Se(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=nr.fromBigInt(e).zzEncode();return this._push(Dc,t.length(),t)}sint64Number(e){let t=nr.fromNumber(e).zzEncode();return this._push(Dc,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(Wf,1,e?1:0)}fixed32(e){return this._push(ta,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=nr.fromBigInt(e);return this._push(ta,4,t.lo)._push(ta,4,t.hi)}fixed64Number(e){let t=nr.fromNumber(e);return this._push(ta,4,t.lo)._push(ta,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(N3,4,e)}double(e){return this._push(L3,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(Wf,1,0):this.uint32(t)._push(QE,t,e)}string(e){let t=M3(e);return t!==0?this.uint32(t)._push(gf,t,e):this._push(Wf,1,0)}fork(){return this.states=new zf(this),this.head=this.tail=new Wo(Gf,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new Wo(Gf,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=YE(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function Wf(r,e,t){e[t]=r&255}function XE(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var Yf=class extends Wo{next;constructor(e,t){super(XE,e,t),this.next=void 0}};function Dc(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function ta(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function QE(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(ra.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(ZE,e,r),this},ra.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(jE,e,r),this});function ZE(r,e,t){e.set(r,t)}function jE(r,e,t){r.length<40?gf(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(L(r),t)}function Xf(){return new ra}function ne(r,e){let t=Xf();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Fs;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(Fs||(Fs={}));function Nc(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function Ke(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(s,i){let a=e(s);i.int32(a)},n=function(s){let i=s.int32();return e(i)};return Nc("enum",Fs.VARINT,t,n)}function oe(r,e){return Nc("message",Fs.LENGTH_DELIMITED,r,e)}var xr=class extends Error{code;constructor(e,t,n){super(e,n),this.code=t}};var et;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(et||(et={}));var Qf;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Qf||(Qf={}));(function(r){r.codec=()=>Ke(Qf)})(et||(et={}));var Vs;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),et.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:pe(0),priority:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.cid=t.bytes();break}case 2:{s.priority=t.int32();break}case 3:{s.cancel=t.bool();break}case 4:{s.wantType=et.codec().decode(t);break}case 5:{s.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Vs||(Vs={}));var Pc;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let s of t.entries)n.uint32(10),Vs.codec().encode(s,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={entries:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&s.entries.length===o.limits.entries)throw new xr('decode error - map field "entries" had too many elements',"ERR_MAX_LENGTH");s.entries.push(Vs.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{s.full=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Pc||(Pc={}));var Ks;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={prefix:pe(0),data:pe(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.prefix=t.bytes();break}case 2:{s.data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Ks||(Ks={}));var _r;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(_r||(_r={}));var Lc;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(Lc||(Lc={}));(function(r){r.codec=()=>Ke(Lc)})(_r||(_r={}));var $s;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&Lc[t.type]!==0&&(n.uint32(16),_r.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:pe(0),type:_r.HaveBlock},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.cid=t.bytes();break}case 2:{s.type=_r.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})($s||($s={}));var zo;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Pc.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),Ks.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),$s.codec().encode(s,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={blocks:[],blockPresences:[],pendingBytes:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.wantlist=Pc.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&s.blocks.length===o.limits.blocks)throw new xr('decode error - map field "blocks" had too many elements',"ERR_MAX_LENGTH");s.blocks.push(Ks.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&s.blockPresences.length===o.limits.blockPresences)throw new xr('decode error - map field "blockPresences" had too many elements',"ERR_MAX_LENGTH");s.blockPresences.push($s.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{s.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(zo||(zo={}));function c4(r,e){for(let[t,n]of e.wantlist.entries()){let o=r.wantlist.get(t);o!=null&&(o.priority>n.priority&&(n.priority=o.priority),n.cancel=n.cancel??o.cancel,n.wantType=n.wantType??o.wantType,n.sendDontHave=n.sendDontHave??o.sendDontHave),r.wantlist.set(t,n)}for(let[t,n]of e.blockPresences.entries())r.blockPresences.set(t,n);for(let[t,n]of e.blocks.entries())r.blocks.set(t,n);return e.full&&!r.full&&(r.full=!0),r}var JE=4193648,eb=JE+16;function*l4(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],s=0,i=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},d=zo.encode(l).byteLength,{added:u,hasMore:h,newSize:f}=Zf(o,l.blocks,a,e,d,tb);a+=u,d=f;let p=h;({added:u,hasMore:h,newSize:f}=Zf(n,l.blockPresences,i,e,d,rb)),i+=u,d=f;let m=h;if({added:u,hasMore:h,newSize:f}=Zf(t,l.wantlist.entries,s,e,d,nb),s+=u,d=f,c=!p&&!m&&!h,c||(l.wantlist.full=!1),yield zo.encode(l),c)break}}function Zf(r,e,t,n,o,s){let i=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],d=s(l);if(d>eb)throw new g("Cannot send block as after encoding it is over the max message size","ERR_BLOCK_TOO_LARGE");let u=o+d;if(u>n){a=!0;break}e.push(l),i++,o=u}return{hasMore:a,added:i,newSize:o}}function tb(r){return jf(3,Ks.encode(r))}function rb(r){return jf(4,$s.encode(r))}function nb(r){return jf(1,Vs.encode(r))}function jf(r,e){let t=Se(r),n=Se(e.byteLength);return t+n+e.byteLength}var Oc=class extends ge{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnTransientConnections;maxOutgoingMessageSize;maxIncomingMessageSize;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[Zi],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.runOnTransientConnections=t.runOnTransientConnections??!1,this.maxIncomingMessageSize=t.maxIncomingMessageSize??4194304,this.maxOutgoingMessageSize=t.maxOutgoingMessageSize??t.maxIncomingMessageSize??4194304,this.metrics={blocksSent:e.metrics?.registerCounter("helia_bitswap_sent_blocks_total"),dataSent:e.metrics?.registerCounter("helia_bitswap_sent_data_bytes_total")},this.sendQueue=new Kt({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.status==="open"?t.abort(new g(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`,"ERR_TIMEOUT")):this.log("stream aborted with status %s",t.status)},s=AbortSignal.timeout(this.messageReceiveTimeout);K(1/0,s),s.addEventListener("abort",o),await t.closeWrite(),await Qe(t,i=>qt(i,{maxDataLength:this.maxIncomingMessageSize}),async i=>{for await(let a of i)try{let c=zo.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),s.removeEventListener("abort",o),s=AbortSignal.timeout(this.messageReceiveTimeout),K(1/0,s),s.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new q("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnTransientConnection:this.runOnTransientConnections})&&(yield n)}async findAndConnect(e,t){await $t(Gt(jn(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(s=>e.equals(s.options.peerId)&&s.status==="queued");if(o!=null){o.options.message=c4(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async s=>{let i=s?.message;if(i==null)throw new g("No message to send","ERR_NO_MESSAGE");this.log("sendMessage to %p",e),s?.onProgress?.(new q("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,Zi,s);await a.closeRead();try{await Qe(l4(i,this.maxOutgoingMessageSize),c=>Ht(c),a),await a.close(s)}catch(c){s?.onProgress?.(new q("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",e,c),a.abort(c)}this._updateSentStats(i.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new g("Network isn't running","ERR_NOT_STARTED");t?.onProgress?.(new q("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),tr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(Zi))return!0;throw new g(`${e} did not support ${Zi}`,"ERR_BITSWAP_UNSUPPORTED_BY_PEER")}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function B(r,e="utf8"){let t=kc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var d4=Symbol.for("nodejs.util.inspect.custom"),u4=Object.values(br).map(r=>r.decoder).reduce((r,e)=>r.or(e),br.identity.decoder),f4=114,th=36,rh=37,na=class{type;multihash;privateKey;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,this.privateKey=e.privateKey,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Ds]=!0;toString(){return this.string==null&&(this.string=We.encode(this.multihash.bytes).slice(1)),this.string}toCID(){return ue.createV1(f4,this.multihash)}toBytes(){return this.multihash.bytes}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return J(this.multihash.bytes,e);if(typeof e=="string")return me(e).equals(this);if(e?.multihash?.bytes!=null)return J(this.multihash.bytes,e.multihash.bytes);throw new Error("not valid Id")}[d4](){return`PeerId(${this.toString()})`}},Yo=class extends na{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Xo=class extends na{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.multihash.digest}},Qo=class extends na{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.multihash.digest}},Jf=2336,eh=class{type="url";multihash;privateKey;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Mt.digest(L(this.url))}[d4](){return`PeerId(${this.url})`}[Ds]=!0;toString(){return this.toCID().toString()}toCID(){return ue.createV1(Jf,this.multihash)}toBytes(){return this.toCID().bytes}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=B(e)),e.toString()===this.toString())}};function h4(r){if(r.type==="RSA")return new Yo(r);if(r.type==="Ed25519")return new Xo(r);if(r.type==="secp256k1")return new Qo(r);throw new g("Not a PeerId","ERR_INVALID_PARAMETERS")}function me(r,e){if(e=e??u4,r.charAt(0)==="1"||r.charAt(0)==="Q"){let t=Fr(We.decode(`z${r}`));return r.startsWith("12D")?new Xo({multihash:t}):r.startsWith("16U")?new Qo({multihash:t}):new Yo({multihash:t})}return je(u4.decode(r))}function je(r){try{let e=Fr(r);if(e.code===Mt.code){if(e.digest.length===th)return new Xo({multihash:e});if(e.digest.length===rh)return new Qo({multihash:e})}if(e.code===De.code)return new Yo({multihash:e})}catch{return fb(ue.decode(r))}throw new Error("Supplied PeerID CID is invalid")}function fb(r){if(r==null||r.multihash==null||r.version==null||r.version===1&&r.code!==f4&&r.code!==Jf)throw new Error("Supplied PeerID CID is invalid");if(r.code===Jf){let t=B(r.multihash.digest);return new eh(new URL(t))}let e=r.multihash;if(e.code===De.code)return new Yo({multihash:r.multihash});if(e.code===Mt.code){if(e.digest.length===th)return new Xo({multihash:r.multihash});if(e.digest.length===rh)return new Qo({multihash:r.multihash})}throw new Error("Supplied PeerID CID is invalid")}async function dt(r,e){return r.length===th?new Xo({multihash:or(Mt.code,r),privateKey:e}):r.length===rh?new Qo({multihash:or(Mt.code,r),privateKey:e}):new Yo({multihash:await De.digest(r),publicKey:r,privateKey:e})}function Hs(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}var st=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),n)}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return Hs(this.map.entries(),e=>[me(e[0]),e[1]])}forEach(e){this.map.forEach((t,n)=>{e(t,me(n),this)})}get(e){return this.map.get(e.toString())}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),t)}keys(){return Hs(this.map.keys(),e=>me(e))}values(){return this.map.values()}get size(){return this.map.size}};var kt=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return Hs(this.set.entries(),e=>{let t=me(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=me(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Hs(this.set.values(),e=>me(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};var $e={get(r=globalThis){let e=r.crypto;if(e==null||e.subtle==null)throw Object.assign(new Error("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var p4={SHA1:20,SHA256:32,SHA512:64};var pb={SHA1:"SHA-1",SHA256:"SHA-256",SHA512:"SHA-512"},mb=async(r,e)=>{let t=await $e.get().subtle.sign({name:"HMAC"},r,e);return new Uint8Array(t,0,t.byteLength)};async function m4(r,e){let t=pb[r],n=await $e.get().subtle.importKey("raw",e,{name:"HMAC",hash:{name:t}},!1,["sign"]);return{async digest(o){return mb(n,o)},length:p4[r]}}var Fl={};Ye(Fl,{Ed25519PrivateKey:()=>Dn,Ed25519PublicKey:()=>ns,MAX_RSA_KEY_SIZE:()=>is,RsaPrivateKey:()=>po,RsaPublicKey:()=>ss,Secp256k1PrivateKey:()=>ls,Secp256k1PublicKey:()=>cs,generateEphemeralKeyPair:()=>W4,generateKeyPair:()=>wa,generateKeyPairFromSeed:()=>f_,importKey:()=>oi,keyStretcher:()=>X4,keysPBM:()=>js,marshalPrivateKey:()=>Kh,marshalPublicKey:()=>Vh,supportedKeys:()=>Fn,unmarshalPrivateKey:()=>Ir,unmarshalPublicKey:()=>Xr});var bh={};Ye(bh,{Ed25519PrivateKey:()=>Dn,Ed25519PublicKey:()=>ns,generateKeyPair:()=>Sx,generateKeyPairFromSeed:()=>Eh,unmarshalEd25519PrivateKey:()=>_x,unmarshalEd25519PublicKey:()=>vx});function nh(r,e){let t=L(r,"base64urlpad");if(e!=null){if(t.length>e)throw new Error("byte array longer than desired length");t=ve([new Uint8Array(e-t.length),t])}return t}function vr(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function ro(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function yb(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function qs(r,...e){if(!yb(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Zo(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");ro(r.outputLen),ro(r.blockLen)}function Gs(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function g4(r,e){qs(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Bc=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var jo=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Vr=(r,e)=>r<<32-e|r>>>e,Mc=(r,e)=>r<<e|r>>>32-e>>>0,ON=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var wb=async()=>{};async function y4(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let s=Date.now()-n;s>=0&&s<e||(await wb(),n+=s)}}function w4(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Kr(r){return typeof r=="string"&&(r=w4(r)),qs(r),r}function oh(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];qs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}var Ws=class{clone(){return this._cloneInto()}},Eb={}.toString;function E4(r,e){if(e!==void 0&&Eb.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function zs(r){let e=n=>r().update(Kr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Jo(r=32){if(Bc&&typeof Bc.getRandomValues=="function")return Bc.getRandomValues(new Uint8Array(r));throw new Error("crypto.getRandomValues must be defined")}function bb(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}var Uc=(r,e,t)=>r&e^~r&t,Fc=(r,e,t)=>r&e^r&t^e&t,no=class extends Ws{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=jo(this.buffer)}update(e){Gs(this);let{view:t,buffer:n,blockLen:o}=this;e=Kr(e);let s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=jo(e);for(;o<=s-i;i+=o)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Gs(this),g4(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>o-i&&(this.process(n,0),i=0);for(let u=i;u<o;u++)t[u]=0;bb(n,o-8,BigInt(this.length*8),s),this.process(n,0);let a=jo(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:s,destroyed:i,pos:a}=this;return e.length=o,e.pos=a,e.finished=s,e.destroyed=i,o%t&&e.buffer.set(n),e}};var Vc=BigInt(4294967295),sh=BigInt(32);function b4(r,e=!1){return e?{h:Number(r&Vc),l:Number(r>>sh&Vc)}:{h:Number(r>>sh&Vc)|0,l:Number(r&Vc)|0}}function xb(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:s,l:i}=b4(r[o],e);[t[o],n[o]]=[s,i]}return[t,n]}var _b=(r,e)=>BigInt(r>>>0)<<sh|BigInt(e>>>0),vb=(r,e,t)=>r>>>t,Sb=(r,e,t)=>r<<32-t|e>>>t,Rb=(r,e,t)=>r>>>t|e<<32-t,Ab=(r,e,t)=>r<<32-t|e>>>t,Ib=(r,e,t)=>r<<64-t|e>>>t-32,Tb=(r,e,t)=>r>>>t-32|e<<64-t,Cb=(r,e)=>e,kb=(r,e)=>r,Db=(r,e,t)=>r<<t|e>>>32-t,Nb=(r,e,t)=>e<<t|r>>>32-t,Pb=(r,e,t)=>e<<t-32|r>>>64-t,Lb=(r,e,t)=>r<<t-32|e>>>64-t;function Ob(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var Bb=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),Mb=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,Ub=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),Fb=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,Vb=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),Kb=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var $b={fromBig:b4,split:xb,toBig:_b,shrSH:vb,shrSL:Sb,rotrSH:Rb,rotrSL:Ab,rotrBH:Ib,rotrBL:Tb,rotr32H:Cb,rotr32L:kb,rotlSH:Db,rotlSL:Nb,rotlBH:Pb,rotlBL:Lb,add:Ob,add3L:Bb,add3H:Mb,add4L:Ub,add4H:Fb,add5H:Kb,add5L:Vb},he=$b;var[Hb,qb]=he.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),oo=new Uint32Array(80),so=new Uint32Array(80),ih=class extends no{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:h,Gh:f,Gl:p,Hh:m,Hl:y}=this;return[e,t,n,o,s,i,a,c,l,d,u,h,f,p,m,y]}set(e,t,n,o,s,i,a,c,l,d,u,h,f,p,m,y){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=h|0,this.Gh=f|0,this.Gl=p|0,this.Hh=m|0,this.Hl=y|0}process(e,t){for(let E=0;E<16;E++,t+=4)oo[E]=e.getUint32(t),so[E]=e.getUint32(t+=4);for(let E=16;E<80;E++){let x=oo[E-15]|0,_=so[E-15]|0,I=he.rotrSH(x,_,1)^he.rotrSH(x,_,8)^he.shrSH(x,_,7),A=he.rotrSL(x,_,1)^he.rotrSL(x,_,8)^he.shrSL(x,_,7),R=oo[E-2]|0,k=so[E-2]|0,O=he.rotrSH(R,k,19)^he.rotrBH(R,k,61)^he.shrSH(R,k,6),N=he.rotrSL(R,k,19)^he.rotrBL(R,k,61)^he.shrSL(R,k,6),M=he.add4L(A,N,so[E-7],so[E-16]),C=he.add4H(M,I,O,oo[E-7],oo[E-16]);oo[E]=C|0,so[E]=M|0}let{Ah:n,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:h,Fh:f,Fl:p,Gh:m,Gl:y,Hh:w,Hl:b}=this;for(let E=0;E<80;E++){let x=he.rotrSH(u,h,14)^he.rotrSH(u,h,18)^he.rotrBH(u,h,41),_=he.rotrSL(u,h,14)^he.rotrSL(u,h,18)^he.rotrBL(u,h,41),I=u&f^~u&m,A=h&p^~h&y,R=he.add5L(b,_,A,qb[E],so[E]),k=he.add5H(R,w,x,I,Hb[E],oo[E]),O=R|0,N=he.rotrSH(n,o,28)^he.rotrBH(n,o,34)^he.rotrBH(n,o,39),M=he.rotrSL(n,o,28)^he.rotrBL(n,o,34)^he.rotrBL(n,o,39),C=n&s^n&a^s&a,Q=o&i^o&c^i&c;w=m|0,b=y|0,m=f|0,y=p|0,f=u|0,p=h|0,{h:u,l:h}=he.add(l|0,d|0,k|0,O|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let T=he.add3L(O,M,Q);n=he.add3H(T,k,N,C),o=T|0}({h:n,l:o}=he.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=he.add(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=he.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=he.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:h}=he.add(this.Eh|0,this.El|0,u|0,h|0),{h:f,l:p}=he.add(this.Fh|0,this.Fl|0,f|0,p|0),{h:m,l:y}=he.add(this.Gh|0,this.Gl|0,m|0,y|0),{h:w,l:b}=he.add(this.Hh|0,this.Hl|0,w|0,b|0),this.set(n,o,s,i,a,c,l,d,u,h,f,p,m,y,w,b)}roundClean(){oo.fill(0),so.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var es=zs(()=>new ih);var $c={};Ye($c,{abytes:()=>Ys,bitGet:()=>Zb,bitLen:()=>Qb,bitMask:()=>oa,bitSet:()=>jb,bytesToHex:()=>An,bytesToNumberBE:()=>In,bytesToNumberLE:()=>$r,concatBytes:()=>Cn,createHmacDrbg:()=>lh,ensureBytes:()=>Me,equalBytes:()=>Yb,hexToBytes:()=>ts,hexToNumber:()=>ch,isBytes:()=>io,numberToBytesBE:()=>ao,numberToBytesLE:()=>Tn,numberToHexUnpadded:()=>S4,numberToVarBytesBE:()=>zb,utf8ToBytes:()=>Xb,validateObject:()=>Sr});var v4=BigInt(0),Kc=BigInt(1),Gb=BigInt(2);function io(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Ys(r){if(!io(r))throw new Error("Uint8Array expected")}var Wb=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function An(r){Ys(r);let e="";for(let t=0;t<r.length;t++)e+=Wb[r[t]];return e}function S4(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function ch(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var Rn={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function x4(r){if(r>=Rn._0&&r<=Rn._9)return r-Rn._0;if(r>=Rn._A&&r<=Rn._F)return r-(Rn._A-10);if(r>=Rn._a&&r<=Rn._f)return r-(Rn._a-10)}function ts(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,s=0;o<t;o++,s+=2){let i=x4(r.charCodeAt(s)),a=x4(r.charCodeAt(s+1));if(i===void 0||a===void 0){let c=r[s]+r[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}n[o]=i*16+a}return n}function In(r){return ch(An(r))}function $r(r){return Ys(r),ch(An(Uint8Array.from(r).reverse()))}function ao(r,e){return ts(r.toString(16).padStart(e*2,"0"))}function Tn(r,e){return ao(r,e).reverse()}function zb(r){return ts(S4(r))}function Me(r,e,t){let n;if(typeof e=="string")try{n=ts(e)}catch(s){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${s}`)}else if(io(e))n=Uint8Array.from(e);else throw new Error(`${r} must be hex string or Uint8Array`);let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(`${r} expected ${t} bytes, got ${o}`);return n}function Cn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Ys(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}function Yb(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function Xb(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Qb(r){let e;for(e=0;r>v4;r>>=Kc,e+=1);return e}function Zb(r,e){return r>>BigInt(e)&Kc}function jb(r,e,t){return r|(t?Kc:v4)<<BigInt(e)}var oa=r=>(Gb<<BigInt(r-1))-Kc,ah=r=>new Uint8Array(r),_4=r=>Uint8Array.from(r);function lh(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=ah(r),o=ah(r),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...u)=>t(o,n,...u),c=(u=ah())=>{o=a(_4([0]),u),n=a(),u.length!==0&&(o=a(_4([1]),u),n=a())},l=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let u=0,h=[];for(;u<e;){n=a();let f=n.slice();h.push(f),u+=n.length}return Cn(...h)};return(u,h)=>{i(),c(u);let f;for(;!(f=h(l()));)c();return i(),f}}var Jb={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||io(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function Sr(r,e,t={}){let n=(o,s,i)=>{let a=Jb[s];if(typeof a!="function")throw new Error(`Invalid validator "${s}", expected function`);let c=r[o];if(!(i&&c===void 0)&&!a(c,r))throw new Error(`Invalid param ${String(o)}=${c} (${typeof c}), expected ${s}`)};for(let[o,s]of Object.entries(e))n(o,s,!1);for(let[o,s]of Object.entries(t))n(o,s,!0);return r}var ft=BigInt(0),He=BigInt(1),rs=BigInt(2),ex=BigInt(3),uh=BigInt(4),R4=BigInt(5),A4=BigInt(8),tx=BigInt(9),rx=BigInt(16);function Ae(r,e){let t=r%e;return t>=ft?t:e+t}function dh(r,e,t){if(t<=ft||e<ft)throw new Error("Expected power/modulo > 0");if(t===He)return ft;let n=He;for(;e>ft;)e&He&&(n=n*r%t),r=r*r%t,e>>=He;return n}function Ue(r,e,t){let n=r;for(;e-- >ft;)n*=n,n%=t;return n}function Hc(r,e){if(r===ft||e<=ft)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=Ae(r,e),n=e,o=ft,s=He,i=He,a=ft;for(;t!==ft;){let l=n/t,d=n%t,u=o-i*l,h=s-a*l;n=t,t=d,o=i,s=a,i=u,a=h}if(n!==He)throw new Error("invert: does not exist");return Ae(o,e)}function nx(r){let e=(r-He)/rs,t,n,o;for(t=r-He,n=0;t%rs===ft;t/=rs,n++);for(o=rs;o<r&&dh(o,e,r)!==r-He;o++);if(n===1){let i=(r+He)/uh;return function(c,l){let d=c.pow(l,i);if(!c.eql(c.sqr(d),l))throw new Error("Cannot find square root");return d}}let s=(t+He)/rs;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,d=a.pow(a.mul(a.ONE,o),t),u=a.pow(c,s),h=a.pow(c,t);for(;!a.eql(h,a.ONE);){if(a.eql(h,a.ZERO))return a.ZERO;let f=1;for(let m=a.sqr(h);f<l&&!a.eql(m,a.ONE);f++)m=a.sqr(m);let p=a.pow(d,He<<BigInt(l-f-1));d=a.sqr(p),u=a.mul(u,p),h=a.mul(h,d),l=f}return u}}function ox(r){if(r%uh===ex){let e=(r+He)/uh;return function(n,o){let s=n.pow(o,e);if(!n.eql(n.sqr(s),o))throw new Error("Cannot find square root");return s}}if(r%A4===R4){let e=(r-R4)/A4;return function(n,o){let s=n.mul(o,rs),i=n.pow(s,e),a=n.mul(o,i),c=n.mul(n.mul(a,rs),i),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%rx,nx(r)}var I4=(r,e)=>(Ae(r,e)&He)===He,sx=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function fh(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=sx.reduce((n,o)=>(n[o]="function",n),e);return Sr(r,t)}function ix(r,e,t){if(t<ft)throw new Error("Expected power > 0");if(t===ft)return r.ONE;if(t===He)return e;let n=r.ONE,o=e;for(;t>ft;)t&He&&(n=r.mul(n,o)),o=r.sqr(o),t>>=He;return n}function ax(r,e){let t=new Array(e.length),n=e.reduce((s,i,a)=>r.is0(i)?s:(t[a]=s,r.mul(s,i)),r.ONE),o=r.inv(n);return e.reduceRight((s,i,a)=>r.is0(i)?s:(t[a]=r.mul(s,t[a]),r.mul(s,i)),o),t}function hh(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function qc(r,e,t=!1,n={}){if(r<=ft)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:s}=hh(r,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=ox(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:s,MASK:oa(o),ZERO:ft,ONE:He,create:c=>Ae(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return ft<=c&&c<r},is0:c=>c===ft,isOdd:c=>(c&He)===He,neg:c=>Ae(-c,r),eql:(c,l)=>c===l,sqr:c=>Ae(c*c,r),add:(c,l)=>Ae(c+l,r),sub:(c,l)=>Ae(c-l,r),mul:(c,l)=>Ae(c*l,r),pow:(c,l)=>ix(a,c,l),div:(c,l)=>Ae(c*Hc(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Hc(c,r),sqrt:n.sqrt||(c=>i(a,c)),invertBatch:c=>ax(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?Tn(c,s):ao(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return t?$r(c):In(c)}});return Object.freeze(a)}function T4(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function ph(r){let e=T4(r);return e+Math.ceil(e/2)}function C4(r,e,t=!1){let n=r.length,o=T4(e),s=ph(e);if(n<16||n<s||n>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let i=t?In(r):$r(r),a=Ae(i,e-He)+He;return t?Tn(a,o):ao(a,o)}var lx=BigInt(0),mh=BigInt(1);function Gc(r,e){let t=(o,s)=>{let i=s.negate();return o?i:s},n=o=>{let s=Math.ceil(e/o)+1,i=2**(o-1);return{windows:s,windowSize:i}};return{constTimeNegate:t,unsafeLadder(o,s){let i=r.ZERO,a=o;for(;s>lx;)s&mh&&(i=i.add(a)),a=a.double(),s>>=mh;return i},precomputeWindow(o,s){let{windows:i,windowSize:a}=n(s),c=[],l=o,d=l;for(let u=0;u<i;u++){d=l,c.push(d);for(let h=1;h<a;h++)d=d.add(l),c.push(d);l=d.double()}return c},wNAF(o,s,i){let{windows:a,windowSize:c}=n(o),l=r.ZERO,d=r.BASE,u=BigInt(2**o-1),h=2**o,f=BigInt(o);for(let p=0;p<a;p++){let m=p*c,y=Number(i&u);i>>=f,y>c&&(y-=h,i+=mh);let w=m,b=m+Math.abs(y)-1,E=p%2!==0,x=y<0;y===0?d=d.add(t(E,s[w])):l=l.add(t(x,s[b]))}return{p:l,f:d}},wNAFCached(o,s,i,a){let c=o._WINDOW_SIZE||1,l=s.get(o);return l||(l=this.precomputeWindow(o,c),c!==1&&s.set(o,a(l))),this.wNAF(c,l,i)}}}function sa(r){return fh(r.Fp),Sr(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...hh(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Hr=BigInt(0),sr=BigInt(1),Wc=BigInt(2),ux=BigInt(8),dx={zip215:!0};function fx(r){let e=sa(r);return Sr(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function k4(r){let e=fx(r),{Fp:t,n,prehash:o,hash:s,randomBytes:i,nByteLength:a,h:c}=e,l=Wc<<BigInt(a*8)-sr,d=t.create,u=e.uvRatio||((D,S)=>{try{return{isValid:!0,value:t.sqrt(D*t.inv(S))}}catch{return{isValid:!1,value:Hr}}}),h=e.adjustScalarBytes||(D=>D),f=e.domain||((D,S,U)=>{if(S.length||U)throw new Error("Contexts/pre-hash are not supported");return D}),p=D=>typeof D=="bigint"&&Hr<D,m=(D,S)=>p(D)&&p(S)&&D<S,y=D=>D===Hr||m(D,l);function w(D,S){if(m(D,S))return D;throw new Error(`Expected valid scalar < ${S}, got ${typeof D} ${D}`)}function b(D){return D===Hr?D:w(D,n)}let E=new Map;function x(D){if(!(D instanceof _))throw new Error("ExtendedPoint expected")}class _{constructor(S,U,V,G){if(this.ex=S,this.ey=U,this.ez=V,this.et=G,!y(S))throw new Error("x required");if(!y(U))throw new Error("y required");if(!y(V))throw new Error("z required");if(!y(G))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(S){if(S instanceof _)throw new Error("extended point not allowed");let{x:U,y:V}=S||{};if(!y(U)||!y(V))throw new Error("invalid affine point");return new _(U,V,sr,d(U*V))}static normalizeZ(S){let U=t.invertBatch(S.map(V=>V.ez));return S.map((V,G)=>V.toAffine(U[G])).map(_.fromAffine)}_setWindowSize(S){this._WINDOW_SIZE=S,E.delete(this)}assertValidity(){let{a:S,d:U}=e;if(this.is0())throw new Error("bad point: ZERO");let{ex:V,ey:G,ez:ie,et:ae}=this,fe=d(V*V),le=d(G*G),de=d(ie*ie),Oe=d(de*de),Ce=d(fe*S),gt=d(de*d(Ce+le)),yt=d(Oe+d(U*d(fe*le)));if(gt!==yt)throw new Error("bad point: equation left != right (1)");let lt=d(V*G),At=d(ie*ae);if(lt!==At)throw new Error("bad point: equation left != right (2)")}equals(S){x(S);let{ex:U,ey:V,ez:G}=this,{ex:ie,ey:ae,ez:fe}=S,le=d(U*fe),de=d(ie*G),Oe=d(V*fe),Ce=d(ae*G);return le===de&&Oe===Ce}is0(){return this.equals(_.ZERO)}negate(){return new _(d(-this.ex),this.ey,this.ez,d(-this.et))}double(){let{a:S}=e,{ex:U,ey:V,ez:G}=this,ie=d(U*U),ae=d(V*V),fe=d(Wc*d(G*G)),le=d(S*ie),de=U+V,Oe=d(d(de*de)-ie-ae),Ce=le+ae,gt=Ce-fe,yt=le-ae,lt=d(Oe*gt),At=d(Ce*yt),xn=d(Oe*yt),Fo=d(gt*Ce);return new _(lt,At,Fo,xn)}add(S){x(S);let{a:U,d:V}=e,{ex:G,ey:ie,ez:ae,et:fe}=this,{ex:le,ey:de,ez:Oe,et:Ce}=S;if(U===BigInt(-1)){let g3=d((ie-G)*(de+le)),y3=d((ie+G)*(de-le)),tf=d(y3-g3);if(tf===Hr)return this.double();let w3=d(ae*Wc*Ce),E3=d(fe*Wc*Oe),b3=E3+w3,x3=y3+g3,_3=E3-w3,pw=d(b3*tf),mw=d(x3*_3),gw=d(b3*_3),yw=d(tf*x3);return new _(pw,mw,yw,gw)}let gt=d(G*le),yt=d(ie*de),lt=d(fe*V*Ce),At=d(ae*Oe),xn=d((G+ie)*(le+de)-gt-yt),Fo=At-lt,Qi=At+lt,m3=d(yt-U*gt),uw=d(xn*Fo),dw=d(Qi*m3),fw=d(xn*m3),hw=d(Fo*Qi);return new _(uw,dw,hw,fw)}subtract(S){return this.add(S.negate())}wNAF(S){return R.wNAFCached(this,E,S,_.normalizeZ)}multiply(S){let{p:U,f:V}=this.wNAF(w(S,n));return _.normalizeZ([U,V])[0]}multiplyUnsafe(S){let U=b(S);return U===Hr?A:this.equals(A)||U===sr?this:this.equals(I)?this.wNAF(U).p:R.unsafeLadder(this,U)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return R.unsafeLadder(this,n).is0()}toAffine(S){let{ex:U,ey:V,ez:G}=this,ie=this.is0();S==null&&(S=ie?ux:t.inv(G));let ae=d(U*S),fe=d(V*S),le=d(G*S);if(ie)return{x:Hr,y:sr};if(le!==sr)throw new Error("invZ was invalid");return{x:ae,y:fe}}clearCofactor(){let{h:S}=e;return S===sr?this:this.multiplyUnsafe(S)}static fromHex(S,U=!1){let{d:V,a:G}=e,ie=t.BYTES;S=Me("pointHex",S,ie);let ae=S.slice(),fe=S[ie-1];ae[ie-1]=fe&-129;let le=$r(ae);le===Hr||(U?w(le,l):w(le,t.ORDER));let de=d(le*le),Oe=d(de-sr),Ce=d(V*de-G),{isValid:gt,value:yt}=u(Oe,Ce);if(!gt)throw new Error("Point.fromHex: invalid y coordinate");let lt=(yt&sr)===sr,At=(fe&128)!==0;if(!U&&yt===Hr&&At)throw new Error("Point.fromHex: x=0 and x_0=1");return At!==lt&&(yt=d(-yt)),_.fromAffine({x:yt,y:le})}static fromPrivateKey(S){return N(S).point}toRawBytes(){let{x:S,y:U}=this.toAffine(),V=Tn(U,t.BYTES);return V[V.length-1]|=S&sr?128:0,V}toHex(){return An(this.toRawBytes())}}_.BASE=new _(e.Gx,e.Gy,sr,d(e.Gx*e.Gy)),_.ZERO=new _(Hr,sr,sr,Hr);let{BASE:I,ZERO:A}=_,R=Gc(_,a*8);function k(D){return Ae(D,n)}function O(D){return k($r(D))}function N(D){let S=a;D=Me("private key",D,S);let U=Me("hashed private key",s(D),2*S),V=h(U.slice(0,S)),G=U.slice(S,2*S),ie=O(V),ae=I.multiply(ie),fe=ae.toRawBytes();return{head:V,prefix:G,scalar:ie,point:ae,pointBytes:fe}}function M(D){return N(D).pointBytes}function C(D=new Uint8Array,...S){let U=Cn(...S);return O(s(f(U,Me("context",D),!!o)))}function Q(D,S,U={}){D=Me("message",D),o&&(D=o(D));let{prefix:V,scalar:G,pointBytes:ie}=N(S),ae=C(U.context,V,D),fe=I.multiply(ae).toRawBytes(),le=C(U.context,fe,ie,D),de=k(ae+le*G);b(de);let Oe=Cn(fe,Tn(de,t.BYTES));return Me("result",Oe,a*2)}let T=dx;function P(D,S,U,V=T){let{context:G,zip215:ie}=V,ae=t.BYTES;D=Me("signature",D,2*ae),S=Me("message",S),o&&(S=o(S));let fe=$r(D.slice(ae,2*ae)),le,de,Oe;try{le=_.fromHex(U,ie),de=_.fromHex(D.slice(0,ae),ie),Oe=I.multiplyUnsafe(fe)}catch{return!1}if(!ie&&le.isSmallOrder())return!1;let Ce=C(G,de.toRawBytes(),le.toRawBytes(),S);return de.add(le.multiplyUnsafe(Ce)).subtract(Oe).clearCofactor().equals(_.ZERO)}return I._setWindowSize(8),{CURVE:e,getPublicKey:M,sign:Q,verify:P,ExtendedPoint:_,utils:{getExtendedPublicKey:N,randomPrivateKey:()=>i(t.BYTES),precompute(D=8,S=_.BASE){return S._setWindowSize(D),S.multiply(BigInt(3)),S}}}}var ia=BigInt(0),gh=BigInt(1);function hx(r){return Sr(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function D4(r){let e=hx(r),{P:t}=e,n=E=>Ae(E,t),o=e.montgomeryBits,s=Math.ceil(o/8),i=e.nByteLength,a=e.adjustScalarBytes||(E=>E),c=e.powPminus2||(E=>dh(E,t-BigInt(2),t));function l(E,x,_){let I=n(E*(x-_));return x=n(x-I),_=n(_+I),[x,_]}function d(E){if(typeof E=="bigint"&&ia<=E&&E<t)return E;throw new Error("Expected valid scalar 0 < scalar < CURVE.P")}let u=(e.a-BigInt(2))/BigInt(4);function h(E,x){let _=d(E),I=d(x),A=_,R=gh,k=ia,O=_,N=gh,M=ia,C;for(let T=BigInt(o-1);T>=ia;T--){let P=I>>T&gh;M^=P,C=l(M,R,O),R=C[0],O=C[1],C=l(M,k,N),k=C[0],N=C[1],M=P;let H=R+k,D=n(H*H),S=R-k,U=n(S*S),V=D-U,G=O+N,ie=O-N,ae=n(ie*H),fe=n(G*S),le=ae+fe,de=ae-fe;O=n(le*le),N=n(A*n(de*de)),R=n(D*U),k=n(V*(D+n(u*V)))}C=l(M,R,O),R=C[0],O=C[1],C=l(M,k,N),k=C[0],N=C[1];let Q=c(k);return n(R*Q)}function f(E){return Tn(n(E),s)}function p(E){let x=Me("u coordinate",E,s);return i===32&&(x[31]&=127),$r(x)}function m(E){let x=Me("scalar",E),_=x.length;if(_!==s&&_!==i)throw new Error(`Expected ${s} or ${i} bytes, got ${_}`);return $r(a(x))}function y(E,x){let _=p(x),I=m(E),A=h(_,I);if(A===ia)throw new Error("Invalid private or public key received");return f(A)}let w=f(e.Gu);function b(E){return y(E,w)}return{scalarMult:y,scalarMultBase:b,getSharedSecret:(E,x)=>y(E,x),getPublicKey:E=>b(E),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:w}}var aa=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),N4=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),cP=BigInt(0),px=BigInt(1),P4=BigInt(2),mx=BigInt(3),gx=BigInt(5),yx=BigInt(8);function L4(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=aa,a=r*r%s*r%s,c=Ue(a,P4,s)*a%s,l=Ue(c,px,s)*r%s,d=Ue(l,gx,s)*l%s,u=Ue(d,e,s)*d%s,h=Ue(u,t,s)*u%s,f=Ue(h,n,s)*h%s,p=Ue(f,o,s)*f%s,m=Ue(p,o,s)*f%s,y=Ue(m,e,s)*d%s;return{pow_p_5_8:Ue(y,P4,s)*r%s,b2:a}}function O4(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function wx(r,e){let t=aa,n=Ae(e*e*e,t),o=Ae(n*n*e,t),s=L4(r*o).pow_p_5_8,i=Ae(r*n*s,t),a=Ae(e*i*i,t),c=i,l=Ae(i*N4,t),d=a===r,u=a===Ae(-r,t),h=a===Ae(-r*N4,t);return d&&(i=c),(u||h)&&(i=l),I4(i,t)&&(i=Ae(-i,t)),{isValid:d||u,value:i}}var Ex=qc(aa,void 0,!0),bx={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Ex,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:yx,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:es,randomBytes:Jo,adjustScalarBytes:O4,uvRatio:wx},Xs=k4(bx);var ca=D4({P:aa,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=aa,{pow_p_5_8:t,b2:n}=L4(r);return Ae(Ue(t,mx,e)*n,e)},adjustScalarBytes:O4,randomBytes:Jo});var Qs=32,kn=64,zc=32;function B4(){let r=Xs.utils.randomPrivateKey(),e=Xs.getPublicKey(r);return{privateKey:V4(r,e),publicKey:e}}function M4(r){if(r.length!==zc)throw new TypeError('"seed" must be 32 bytes in length.');if(!(r instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=r,t=Xs.getPublicKey(e);return{privateKey:V4(e,t),publicKey:t}}function U4(r,e){let t=r.subarray(0,zc);return Xs.sign(e instanceof Uint8Array?e:e.subarray(),t)}function F4(r,e,t){return Xs.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function V4(r,e){let t=new Uint8Array(kn);for(let n=0;n<zc;n++)t[n]=r[n],t[zc+n]=e[n];return t}var yh={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Yc(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",s=r?.saltLength??16,i=r?.iterations??32767,a=$e.get();t*=8;async function c(u,h){let f=a.getRandomValues(new Uint8Array(s)),p=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:p};typeof h=="string"&&(h=L(h));let y;if(h.length===0){y=await a.subtle.importKey("jwk",yh,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:f,iterations:i,hash:{name:o}},E=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(b,E,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",yh,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:f,iterations:i,hash:{name:o}},E=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(b,E,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(m,y,u);return ve([f,m.iv,new Uint8Array(w)])}async function l(u,h){let f=u.subarray(0,s),p=u.subarray(s,s+n),m=u.subarray(s+n),y={name:e,iv:p};typeof h=="string"&&(h=L(h));let w;if(h.length===0)try{let E={name:"PBKDF2",salt:f,iterations:i,hash:{name:o}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(E,x,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",yh,{name:"AES-GCM"},!0,["decrypt"])}else{let E={name:"PBKDF2",salt:f,iterations:i,hash:{name:o}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(E,x,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(y,w,m);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}async function Zs(r,e){let n=await Yc().encrypt(r,e);return ot.encode(n)}var js={};Ye(js,{KeyType:()=>Fe,PrivateKey:()=>Gr,PublicKey:()=>qr});var Fe;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.Secp256k1="Secp256k1"})(Fe||(Fe={}));var wh;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.Secp256k1=2]="Secp256k1"})(wh||(wh={}));(function(r){r.codec=()=>Ke(wh)})(Fe||(Fe={}));var qr;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Fe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Fe.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(qr||(qr={}));var Gr;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Fe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Fe.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Gr||(Gr={}));var ns=class{_key;constructor(e){this._key=Js(e,Qs)}verify(e,t){return F4(this._key,t,e)}marshal(){return this._key}get bytes(){return qr.encode({Type:Fe.Ed25519,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return vr(e)?e.then(({bytes:t})=>t):e.bytes}},Dn=class{_key;_publicKey;constructor(e,t){this._key=Js(e,kn),this._publicKey=Js(t,Qs)}sign(e){return U4(this._key,e)}get public(){return new ns(this._publicKey)}marshal(){return this._key}get bytes(){return Gr.encode({Type:Fe.Ed25519,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}async hash(){let e=De.digest(this.bytes),t;return vr(e)?{bytes:t}=await e:t=e.bytes,t}async id(){let e=Mt.digest(this.public.bytes);return We.encode(e.bytes).substring(1)}async export(e,t="libp2p-key"){if(t==="libp2p-key")return Zs(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function _x(r){if(r.length>kn){r=Js(r,kn+Qs);let n=r.subarray(0,kn),o=r.subarray(kn,r.length);return new Dn(n,o)}r=Js(r,kn);let e=r.subarray(0,kn),t=r.subarray(Qs);return new Dn(e,t)}function vx(r){return r=Js(r,Qs),new ns(r)}async function Sx(){let{privateKey:r,publicKey:e}=B4();return new Dn(r,e)}async function Eh(r){let{privateKey:e,publicKey:t}=M4(r);return new Dn(e,t)}function Js(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new g(`Key must be a Uint8Array of length ${e}, got ${r.length}`,"ERR_INVALID_KEY_TYPE");return r}var $4={"P-256":256,"P-384":384,"P-521":521},Rx=Object.keys($4),xh=Rx.join(" / ");async function H4(r){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new g(`Unknown curve: ${r}. Must be ${xh}`,"ERR_INVALID_CURVE");let e=await $e.get().subtle.generateKey({name:"ECDH",namedCurve:r},!0,["deriveBits"]),t=async(s,i)=>{let a;i!=null?a=await $e.get().subtle.importKey("jwk",Ix(r,i),{name:"ECDH",namedCurve:r},!1,["deriveBits"]):a=e.privateKey;let c=await $e.get().subtle.importKey("jwk",G4(r,s),{name:"ECDH",namedCurve:r},!1,[]),l=await $e.get().subtle.deriveBits({name:"ECDH",namedCurve:r,public:c},a,$4[r]);return new Uint8Array(l,0,l.byteLength)},n=await $e.get().subtle.exportKey("jwk",e.publicKey);return{key:Ax(n),genSharedKey:t}}var q4={"P-256":32,"P-384":48,"P-521":66};function Ax(r){if(r.crv==null||r.x==null||r.y==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");if(r.crv!=="P-256"&&r.crv!=="P-384"&&r.crv!=="P-521")throw new g(`Unknown curve: ${r.crv}. Must be ${xh}`,"ERR_INVALID_CURVE");let e=q4[r.crv];return ve([Uint8Array.from([4]),nh(r.x,e),nh(r.y,e)],1+e*2)}function G4(r,e){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new g(`Unknown curve: ${r}. Must be ${xh}`,"ERR_INVALID_CURVE");let t=q4[r];if(!J(e.subarray(0,1),Uint8Array.from([4])))throw new g("Cannot unmarshal public key - invalid key format","ERR_INVALID_KEY_FORMAT");return{kty:"EC",crv:r,x:B(e.subarray(1,t+1),"base64url"),y:B(e.subarray(1+t),"base64url"),ext:!0}}var Ix=(r,e)=>({...G4(r,e.public),d:B(e.private,"base64url")});var W4=H4;async function z4(r,e){let t=ot.decode(r);return Yc().decrypt(t,e)}var Y4={"AES-128":{ivSize:16,keySize:16},"AES-256":{ivSize:16,keySize:32},Blowfish:{ivSize:8,keySize:32}};async function X4(r,e,t){let n=Y4[r];if(n==null){let b=Object.keys(Y4).join(" / ");throw new g(`unknown cipher type '${r}'. Must be ${b}`,"ERR_INVALID_CIPHER_TYPE")}if(e==null)throw new g("missing hash type","ERR_MISSING_HASH_TYPE");let o=n.keySize,s=n.ivSize,i=20,a=L("key expansion"),c=2*(s+o+i),l=await m4(e,t),d=await l.digest(a),u=[],h=0;for(;h<c;){let b=await l.digest(ve([d,a])),E=b.length;h+E>c&&(E=c-h),u.push(b),h+=E,d=await l.digest(d)}let f=c/2,p=ve(u),m=p.subarray(0,f),y=p.subarray(f,c),w=b=>({iv:b.subarray(0,s),cipherKey:b.subarray(s,s+o),macKey:b.subarray(s+o)});return{k1:w(m),k2:w(y)}}var Nh={};Ye(Nh,{MAX_RSA_KEY_SIZE:()=>is,RsaPrivateKey:()=>po,RsaPublicKey:()=>ss,fromJwk:()=>Zx,generateKeyPair:()=>jx,unmarshalRsaPrivateKey:()=>kh,unmarshalRsaPublicKey:()=>Qx});function it(r){if(isNaN(r)||r<=0)throw new g("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return Jo(r)}var ho={};Ye(ho,{exportToPem:()=>Wx,importFromPem:()=>Ch,jwkToPkcs1:()=>$x,jwkToPkix:()=>qx,pkcs1ToJwk:()=>Kx,pkixToJwk:()=>Hx});var Xc=class extends Ws{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,Zo(e);let n=Kr(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,s=new Uint8Array(o);s.set(n.length>o?e.create().update(n).digest():n);for(let i=0;i<s.length;i++)s[i]^=54;this.iHash.update(s),this.oHash=e.create();for(let i=0;i<s.length;i++)s[i]^=106;this.oHash.update(s),s.fill(0)}update(e){return Gs(this),this.iHash.update(e),this}digestInto(e){Gs(this),qs(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},co=(r,e,t)=>new Xc(r,e).update(t).digest();co.create=(r,e)=>new Xc(r,e);function Q4(r,e,t,n){Zo(r);let o=E4({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(ro(s),ro(i),ro(a),s<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=Kr(e),l=Kr(t),d=new Uint8Array(i),u=co.create(r,c),h=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:h}}function Z4(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function j4(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=Q4(r,e,t,n),l,d=new Uint8Array(4),u=jo(d),h=new Uint8Array(a.outputLen);for(let f=1,p=0;p<s;f++,p+=a.outputLen){let m=i.subarray(p,p+a.outputLen);u.setInt32(0,f,!1),(l=c._cloneInto(l)).update(d).digestInto(h),m.set(h.subarray(0,m.length));for(let y=1;y<o;y++){a._cloneInto(l).update(h).digestInto(h);for(let w=0;w<m.length;w++)m[w]^=h[w]}}return Z4(a,c,i,l,h)}async function _h(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=Q4(r,e,t,n),d,u=new Uint8Array(4),h=jo(u),f=new Uint8Array(c.outputLen);for(let p=1,m=0;m<s;p++,m+=c.outputLen){let y=a.subarray(m,m+c.outputLen);h.setInt32(0,p,!1),(d=l._cloneInto(d)).update(u).digestInto(f),y.set(f.subarray(0,y.length)),await y4(o-1,i,()=>{c._cloneInto(d).update(f).digestInto(f);for(let w=0;w<y.length;w++)y[w]^=f[w]})}return Z4(c,l,a,d,f)}var ye=Xe(J4());function os(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function lo(r,e,t=-1){let n=t,o=r,s=0,i=Math.pow(2,e);for(let a=1;a<8;a++){if(r<i){let c;if(n<0)c=new ArrayBuffer(a),s=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),s=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[s-d-1]=Math.floor(o/u),o-=l[s-d-1]*u}return c}i*=Math.pow(2,e)}return new ArrayBuffer(0)}function jc(...r){let e=0,t=0;for(let s of r)e+=s.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let s of r)o.set(s,t),t+=s.length;return o}function Sh(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=os(t,8),o=new ArrayBuffer(this.valueHex.byteLength),s=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)s[a]=r[a];return s[0]&=127,os(s,8)-n}function em(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let i=t-e,a=lo(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=lo(e,8,n),s=new Uint8Array(o);if(s[0]&128){let i=o.slice(0),a=new Uint8Array(i);o=new ArrayBuffer(o.byteLength+1),s=new Uint8Array(o);for(let c=0;c<i.byteLength;c++)s[c+1]=a[c];s[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function tm(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function Wt(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let i=0;i<n;i++)o[i]="0";return o.join("").concat(t)}var QP=Math.log(2);function Jc(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function Rh(r){let e=0,t=0;for(let o=0;o<r.length;o++){let s=r[o];e+=s.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let s=r[o];n.set(new Uint8Array(s),t),t+=s.byteLength}return n.buffer}function Bn(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var ua=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return Rh(this.items)}},la=[new Uint8Array([1])],rm="0123456789";var ri="",zr=new ArrayBuffer(0),Ah=new Uint8Array(0),da="EndOfContent",om="OCTET STRING",sm="BIT STRING";function Mn(r){var e;return e=class extends r{constructor(...n){var o;super(...n);let s=n[0]||{};this.isHexOnly=(o=s.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=s.valueHex?ye.BufferSourceConverter.toUint8Array(s.valueHex):Ah}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Bn(this,i,o,s))return-1;let a=o+s;return this.valueHexView=i.subarray(o,a),this.valueHexView.length?(this.blockLength=s,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",zr)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Pn=class{constructor({blockLength:e=0,error:t=ri,warnings:n=[],valueBeforeDecode:o=Ah}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};Pn.NAME="baseBlock";var Dt=class extends Pn{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};Dt.NAME="valueBlock";var el=class extends Mn(Pn){constructor({idBlock:e={}}={}){var t,n,o,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):Ah,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(s=e.isConstructed)!==null&&s!==void 0?s:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",zr}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let s=this.tagNumber;s&=31,t|=s,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=lo(this.tagNumber,7),s=new Uint8Array(o),i=o.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=s[c]|128;a[i]=s[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let s=0;s<o.length-1;s++)n[s+1]=o[s]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!Bn(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;switch(s[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(s[0]&32)===32,this.isHexOnly=!1;let a=s[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;s[c]&128;){if(l[c-1]=s[c]&127,c++,c>=s.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let h=new Uint8Array(d);for(let f=0;f<l.length;f++)h[f]=l[f];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=s[c]&127;let u=new Uint8Array(c);for(let h=0;h<c;h++)u[h]=l[h];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=os(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};el.NAME="identificationBlock";var tl=class extends Pn{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!Bn(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;if(s[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=s[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(s[0]&128),this.longFormUsed===!1)return this.length=s[0],this.blockLength=1,t+this.blockLength;let i=s[0]&127;if(i>8)return this.error="Too big integer",-1;if(i+1>s.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+i);return c[i-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=os(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=i+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=lo(this.length,8);if(o.byteLength>127)return this.error="Too big length",zr;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let s=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let i=0;i<o.byteLength;i++)n[i+1]=s[i];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};tl.NAME="lengthBlock";var z={},wt=class extends Pn{constructor({name:e=ri,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new el(o),this.lenBlock=new tl(o),this.valueBlock=s?new s(o):new Dt(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new ua;t||im(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let s=this.valueBlock.toBER(e);this.lenBlock.length=s.byteLength;let i=this.lenBlock.toBER(e);n.write(i),n.write(s)}return t?zr:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():ye.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return tm(t,n)}};wt.NAME="BaseBlock";function im(r){if(r instanceof z.Constructed)for(let e of r.valueBlock.value)im(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var rl=class extends wt{constructor({value:e=ri,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};rl.NAME="BaseStringBlock";var nl=class extends Mn(Dt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};nl.NAME="PrimitiveValueBlock";var am,ol=class extends wt{constructor(e={}){super(e,nl),this.idBlock.isConstructed=!1}};am=ol;z.Primitive=am;ol.NAME="PRIMITIVE";function Bx(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function Ml(r,e=0,t=r.length){let n=e,o=new wt({},Dt),s=new Pn;if(!Bn(s,r,e,t))return o.error=s.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=wt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=z.EndOfContent;break;case 1:c=z.Boolean;break;case 2:c=z.Integer;break;case 3:c=z.BitString;break;case 4:c=z.OctetString;break;case 5:c=z.Null;break;case 6:c=z.ObjectIdentifier;break;case 10:c=z.Enumerated;break;case 12:c=z.Utf8String;break;case 13:c=z.RelativeObjectIdentifier;break;case 14:c=z.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=z.Sequence;break;case 17:c=z.Set;break;case 18:c=z.NumericString;break;case 19:c=z.PrintableString;break;case 20:c=z.TeletexString;break;case 21:c=z.VideotexString;break;case 22:c=z.IA5String;break;case 23:c=z.UTCTime;break;case 24:c=z.GeneralizedTime;break;case 25:c=z.GraphicString;break;case 26:c=z.VisibleString;break;case 27:c=z.GeneralString;break;case 28:c=z.UniversalString;break;case 29:c=z.CharacterString;break;case 30:c=z.BmpString;break;case 31:c=z.DATE;break;case 32:c=z.TimeOfDay;break;case 33:c=z.DateTime;break;case 34:c=z.Duration;break;default:{let l=o.idBlock.isConstructed?new z.Constructed:new z.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?z.Constructed:z.Primitive}return o=Bx(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function ni(r){if(!r.byteLength){let e=new wt({},Dt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Ml(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function Mx(r,e){return r?1:e}var dn=class extends Dt{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!Bn(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let s=t;for(;Mx(this.isIndefiniteForm,n)>0;){let i=Ml(o,s,n);if(i.offset===-1)return this.error=i.result.error,this.warnings.concat(i.result.warnings),-1;if(s=i.offset,this.blockLength+=i.result.blockLength,n-=i.result.blockLength,this.value.push(i.result),this.isIndefiniteForm&&i.result.constructor.NAME===da)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===da?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new ua;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?zr:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};dn.NAME="ConstructedValueBlock";var cm,uo=class extends wt{constructor(e={}){super(e,dn),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
2
+ "use strict";var Helia=(()=>{var Nw=Object.create;var Ec=Object.defineProperty;var Pw=Object.getOwnPropertyDescriptor;var Lw=Object.getOwnPropertyNames;var Ow=Object.getPrototypeOf,Bw=Object.prototype.hasOwnProperty;var gt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ye=(r,e)=>{for(var t in e)Ec(r,t,{get:e[t],enumerable:!0})},V3=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Lw(e))!Bw.call(r,o)&&o!==t&&Ec(r,o,{get:()=>e[o],enumerable:!(n=Pw(e,o))||n.enumerable});return r};var nt=(r,e,t)=>(t=r!=null?Nw(Ow(r)):{},V3(e||!r||!r.__esModule?Ec(t,"default",{value:r,enumerable:!0}):t,r)),Mw=r=>V3(Ec({},"__esModule",{value:!0}),r);var h4=gt(ri=>{"use strict";var Kx="[object ArrayBuffer]",Ln=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===Kx}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let s=0;s<n.length;s++)if(n[s]!==o[s])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let i of t)n+=i.byteLength;let o=new Uint8Array(n),s=0;for(let i of t){let a=this.toUint8Array(i);o.set(a,s),s+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},Mh="string",$x=/^[0-9a-f]+$/i,Hx=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,qx=/^[a-zA-Z0-9-_]+$/,tl=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=Ln.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},Ar=class{static toString(e,t=!1){let n=Ln.toArrayBuffer(e),o=new DataView(n),s="";for(let i=0;i<n.byteLength;i+=2){let a=o.getUint16(i,t);s+=String.fromCharCode(a)}return s}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let s=0;s<e.length;s++)o.setUint16(s*2,e.charCodeAt(s),t);return n}},rl=class r{static isHex(e){return typeof e===Mh&&$x.test(e)}static isBase64(e){return typeof e===Mh&&Hx.test(e)}static isBase64Url(e){return typeof e===Mh&&qx.test(e)}static ToString(e,t="utf8"){let n=Ln.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return Ar.toString(n,!0);case"utf16":case"utf16be":return Ar.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return Ar.fromString(e,!0);case"utf16":case"utf16be":return Ar.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Ln.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return tl.fromString(e);case"utf16":case"utf16be":return Ar.fromString(e);case"utf16le":case"usc2":return Ar.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return tl.toString(e);case"utf16":case"utf16be":return Ar.toString(e);case"utf16le":case"usc2":return Ar.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=Ln.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Ln.toUint8Array(e),n="",o=t.length;for(let s=0;s<o;s++){let i=t[s];i<16&&(n+="0"),n+=i.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let s=t.slice(o,o+2);n[o/2]=parseInt(s,16)}return n.buffer}static ToUtf16String(e,t=!1){return Ar.toString(e,t)}static FromUtf16String(e,t=!1){return Ar.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};rl.DEFAULT_UTF8_ENCODING="utf8";function Gx(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let s in o)t[s]=o[s]}return t}function Wx(...r){let e=r.map(o=>o.byteLength).reduce((o,s)=>o+s),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let s of o)t[n++]=s}),t.buffer}function zx(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}ri.BufferSourceConverter=Ln;ri.Convert=rl;ri.assign=Gx;ri.combine=Wx;ri.isEqual=zx});var b6=gt((Sa,Gl)=>{(function(r,e){"use strict";var t={version:"3.0.0",x86:{},x64:{},inputValidation:!0};function n(h){if(!Array.isArray(h)&&!ArrayBuffer.isView(h))return!1;for(var p=0;p<h.length;p++)if(!Number.isInteger(h[p])||h[p]<0||h[p]>255)return!1;return!0}function o(h,p){return(h&65535)*p+(((h>>>16)*p&65535)<<16)}function s(h,p){return h<<p|h>>>32-p}function i(h){return h^=h>>>16,h=o(h,2246822507),h^=h>>>13,h=o(h,3266489909),h^=h>>>16,h}function a(h,p){h=[h[0]>>>16,h[0]&65535,h[1]>>>16,h[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var g=[0,0,0,0];return g[3]+=h[3]+p[3],g[2]+=g[3]>>>16,g[3]&=65535,g[2]+=h[2]+p[2],g[1]+=g[2]>>>16,g[2]&=65535,g[1]+=h[1]+p[1],g[0]+=g[1]>>>16,g[1]&=65535,g[0]+=h[0]+p[0],g[0]&=65535,[g[0]<<16|g[1],g[2]<<16|g[3]]}function c(h,p){h=[h[0]>>>16,h[0]&65535,h[1]>>>16,h[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var g=[0,0,0,0];return g[3]+=h[3]*p[3],g[2]+=g[3]>>>16,g[3]&=65535,g[2]+=h[2]*p[3],g[1]+=g[2]>>>16,g[2]&=65535,g[2]+=h[3]*p[2],g[1]+=g[2]>>>16,g[2]&=65535,g[1]+=h[1]*p[3],g[0]+=g[1]>>>16,g[1]&=65535,g[1]+=h[2]*p[2],g[0]+=g[1]>>>16,g[1]&=65535,g[1]+=h[3]*p[1],g[0]+=g[1]>>>16,g[1]&=65535,g[0]+=h[0]*p[3]+h[1]*p[2]+h[2]*p[1]+h[3]*p[0],g[0]&=65535,[g[0]<<16|g[1],g[2]<<16|g[3]]}function l(h,p){return p%=64,p===32?[h[1],h[0]]:p<32?[h[0]<<p|h[1]>>>32-p,h[1]<<p|h[0]>>>32-p]:(p-=32,[h[1]<<p|h[0]>>>32-p,h[0]<<p|h[1]>>>32-p])}function d(h,p){return p%=64,p===0?h:p<32?[h[0]<<p|h[1]>>>32-p,h[1]<<p]:[h[1]<<p-32,0]}function u(h,p){return[h[0]^p[0],h[1]^p[1]]}function f(h){return h=u(h,[0,h[0]>>>1]),h=c(h,[4283543511,3981806797]),h=u(h,[0,h[0]>>>1]),h=c(h,[3301882366,444984403]),h=u(h,[0,h[0]>>>1]),h}t.x86.hash32=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var g=h.length%4,y=h.length-g,w=p,b=0,E=3432918353,x=461845907,T=0;T<y;T=T+4)b=h[T]|h[T+1]<<8|h[T+2]<<16|h[T+3]<<24,b=o(b,E),b=s(b,15),b=o(b,x),w^=b,w=s(w,13),w=o(w,5)+3864292196;switch(b=0,g){case 3:b^=h[T+2]<<16;case 2:b^=h[T+1]<<8;case 1:b^=h[T],b=o(b,E),b=s(b,15),b=o(b,x),w^=b}return w^=h.length,w=i(w),w>>>0},t.x86.hash128=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var g=h.length%16,y=h.length-g,w=p,b=p,E=p,x=p,T=0,C=0,v=0,S=0,I=597399067,F=2869860233,O=951274213,B=2716044179,M=0;M<y;M=M+16)T=h[M]|h[M+1]<<8|h[M+2]<<16|h[M+3]<<24,C=h[M+4]|h[M+5]<<8|h[M+6]<<16|h[M+7]<<24,v=h[M+8]|h[M+9]<<8|h[M+10]<<16|h[M+11]<<24,S=h[M+12]|h[M+13]<<8|h[M+14]<<16|h[M+15]<<24,T=o(T,I),T=s(T,15),T=o(T,F),w^=T,w=s(w,19),w+=b,w=o(w,5)+1444728091,C=o(C,F),C=s(C,16),C=o(C,O),b^=C,b=s(b,17),b+=E,b=o(b,5)+197830471,v=o(v,O),v=s(v,17),v=o(v,B),E^=v,E=s(E,15),E+=x,E=o(E,5)+2530024501,S=o(S,B),S=s(S,18),S=o(S,I),x^=S,x=s(x,13),x+=w,x=o(x,5)+850148119;switch(T=0,C=0,v=0,S=0,g){case 15:S^=h[M+14]<<16;case 14:S^=h[M+13]<<8;case 13:S^=h[M+12],S=o(S,B),S=s(S,18),S=o(S,I),x^=S;case 12:v^=h[M+11]<<24;case 11:v^=h[M+10]<<16;case 10:v^=h[M+9]<<8;case 9:v^=h[M+8],v=o(v,O),v=s(v,17),v=o(v,B),E^=v;case 8:C^=h[M+7]<<24;case 7:C^=h[M+6]<<16;case 6:C^=h[M+5]<<8;case 5:C^=h[M+4],C=o(C,F),C=s(C,16),C=o(C,O),b^=C;case 4:T^=h[M+3]<<24;case 3:T^=h[M+2]<<16;case 2:T^=h[M+1]<<8;case 1:T^=h[M],T=o(T,I),T=s(T,15),T=o(T,F),w^=T}return w^=h.length,b^=h.length,E^=h.length,x^=h.length,w+=b,w+=E,w+=x,b+=w,E+=w,x+=w,w=i(w),b=i(b),E=i(E),x=i(x),w+=b,w+=E,w+=x,b+=w,E+=w,x+=w,("00000000"+(w>>>0).toString(16)).slice(-8)+("00000000"+(b>>>0).toString(16)).slice(-8)+("00000000"+(E>>>0).toString(16)).slice(-8)+("00000000"+(x>>>0).toString(16)).slice(-8)},t.x64.hash128=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var g=h.length%16,y=h.length-g,w=[0,p],b=[0,p],E=[0,0],x=[0,0],T=[2277735313,289559509],C=[1291169091,658871167],v=0;v<y;v=v+16)E=[h[v+4]|h[v+5]<<8|h[v+6]<<16|h[v+7]<<24,h[v]|h[v+1]<<8|h[v+2]<<16|h[v+3]<<24],x=[h[v+12]|h[v+13]<<8|h[v+14]<<16|h[v+15]<<24,h[v+8]|h[v+9]<<8|h[v+10]<<16|h[v+11]<<24],E=c(E,T),E=l(E,31),E=c(E,C),w=u(w,E),w=l(w,27),w=a(w,b),w=a(c(w,[0,5]),[0,1390208809]),x=c(x,C),x=l(x,33),x=c(x,T),b=u(b,x),b=l(b,31),b=a(b,w),b=a(c(b,[0,5]),[0,944331445]);switch(E=[0,0],x=[0,0],g){case 15:x=u(x,d([0,h[v+14]],48));case 14:x=u(x,d([0,h[v+13]],40));case 13:x=u(x,d([0,h[v+12]],32));case 12:x=u(x,d([0,h[v+11]],24));case 11:x=u(x,d([0,h[v+10]],16));case 10:x=u(x,d([0,h[v+9]],8));case 9:x=u(x,[0,h[v+8]]),x=c(x,C),x=l(x,33),x=c(x,T),b=u(b,x);case 8:E=u(E,d([0,h[v+7]],56));case 7:E=u(E,d([0,h[v+6]],48));case 6:E=u(E,d([0,h[v+5]],40));case 5:E=u(E,d([0,h[v+4]],32));case 4:E=u(E,d([0,h[v+3]],24));case 3:E=u(E,d([0,h[v+2]],16));case 2:E=u(E,d([0,h[v+1]],8));case 1:E=u(E,[0,h[v]]),E=c(E,T),E=l(E,31),E=c(E,C),w=u(w,E)}return w=u(w,[0,h.length]),b=u(b,[0,h.length]),w=a(w,b),b=a(b,w),w=f(w),b=f(b),w=a(w,b),b=a(b,w),("00000000"+(w[0]>>>0).toString(16)).slice(-8)+("00000000"+(w[1]>>>0).toString(16)).slice(-8)+("00000000"+(b[0]>>>0).toString(16)).slice(-8)+("00000000"+(b[1]>>>0).toString(16)).slice(-8)},typeof Sa<"u"?(typeof Gl<"u"&&Gl.exports&&(Sa=Gl.exports=t),Sa.murmurHash3=t):typeof define=="function"&&define.amd?define([],function(){return t}):(t._murmurHash3=r.murmurHash3,t.noConflict=function(){return r.murmurHash3=t._murmurHash3,t._murmurHash3=e,t.noConflict=e,t},r.murmurHash3=t)})(Sa)});var Wl=gt((DO,x6)=>{x6.exports=b6()});var T6=gt((XB,f0)=>{"use strict";var Z_=Object.prototype.hasOwnProperty,Ft="~";function Ca(){}Object.create&&(Ca.prototype=Object.create(null),new Ca().__proto__||(Ft=!1));function j_(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function I6(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new j_(t,n||r,o),i=Ft?Ft+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],s]:r._events[i].push(s):(r._events[i]=s,r._eventsCount++),r}function tu(r,e){--r._eventsCount===0?r._events=new Ca:delete r._events[e]}function Dt(){this._events=new Ca,this._eventsCount=0}Dt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)Z_.call(t,n)&&e.push(Ft?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Dt.prototype.listeners=function(e){var t=Ft?Ft+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,s=n.length,i=new Array(s);o<s;o++)i[o]=n[o].fn;return i};Dt.prototype.listenerCount=function(e){var t=Ft?Ft+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Dt.prototype.emit=function(e,t,n,o,s,i){var a=Ft?Ft+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,s),!0;case 6:return c.fn.call(c.context,t,n,o,s,i),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,h;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(h=1,d=new Array(l-1);h<l;h++)d[h-1]=arguments[h];c[u].fn.apply(c[u].context,d)}}return!0};Dt.prototype.on=function(e,t,n){return I6(this,e,t,n,!1)};Dt.prototype.once=function(e,t,n){return I6(this,e,t,n,!0)};Dt.prototype.removeListener=function(e,t,n,o){var s=Ft?Ft+e:e;if(!this._events[s])return this;if(!t)return tu(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&tu(this,s);else{for(var a=0,c=[],l=i.length;a<l;a++)(i[a].fn!==t||o&&!i[a].once||n&&i[a].context!==n)&&c.push(i[a]);c.length?this._events[s]=c.length===1?c[0]:c:tu(this,s)}return this};Dt.prototype.removeAllListeners=function(e){var t;return e?(t=Ft?Ft+e:e,this._events[t]&&tu(this,t)):(this._events=new Ca,this._eventsCount=0),this};Dt.prototype.off=Dt.prototype.removeListener;Dt.prototype.addListener=Dt.prototype.on;Dt.prefixed=Ft;Dt.EventEmitter=Dt;typeof f0<"u"&&(f0.exports=Dt)});var w0=gt((wM,N6)=>{N6.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(s,i){t[s]=i,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(s){return t[s]!==void 0||n[s]!==void 0},remove:function(s){t[s]!==void 0&&(t[s]=void 0),n[s]!==void 0&&(n[s]=void 0)},get:function(s){var i=t[s];if(i!==void 0)return i;if((i=n[s])!==void 0)return o(s,i),i},set:function(s,i){t[s]!==void 0?t[s]=i:o(s,i)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var yi=gt((jF,d5)=>{"use strict";function u5(r,e){for(let t in e)Object.defineProperty(r,t,{value:e[t],enumerable:!0,configurable:!0});return r}function Zv(r,e,t){if(!r||typeof r=="string")throw new TypeError("Please pass an Error to err-code");t||(t={}),typeof e=="object"&&(t=e,e=""),e&&(t.code=e);try{return u5(r,t)}catch{t.message=r.message,t.stack=r.stack;let o=function(){};return o.prototype=Object.create(Object.getPrototypeOf(r)),u5(new o,t)}}d5.exports=Zv});var v5=gt(Ka=>{(function(){var r,e,t,n,o,s,i,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},i=function(c){var l,d,u,f,h,p;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],d=p[1],c=c.substring(d),l.push(h)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),s=t("a"),o=t("A"),e=function(c){var l,d,u,f,h;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),h=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-s)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===h)throw new Error("empty octet");return[f,u]},r=function(){function c(l,d){var u,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(p=l.split("/",2),l=p[0],d=p[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=i(d)}catch(g){throw u=g,new Error("Invalid mask: "+d)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(i(l)&this.maskLong)>>>0}catch(g){throw u=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(i(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var d,u,f;for(f=i(this.first),u=i(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),Ka.ip2long=i,Ka.long2ip=a,Ka.Netmask=r}).call(Ka)});var e1=gt((YH,g2)=>{var zH=function(){typeof g2<"u"&&(g2.exports=g);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,s=864e13,i=4294967296,a=1e6,c="000000000",l=Math.trunc||function(S){var I=S-S%1;return I==0&&(S<0||S===0&&1/S!=1/0)?-0:I},d=g.prototype,u=(g.fromDate=function(S){return new g(+S)},g.fromInt64BE=x(0,1,2,3,0,4),g.fromInt64LE=x(3,2,1,0,4,0),g.fromString=function(O){var I,F=new g,O=(O+="").replace(/^\s*[+\-]?\d+/,function(M){var M=+M,D=1970+(M-1970)%400;return F.year=M-D,D}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(B,M,D){return M<0&&(D*=-1),I=6e4*(60*+M+ +D),""}).replace(/\.\d+$/,function(B){return F.nano=+(B+c).substr(1,9),""}).split(/\D+/);if(1<O.length?O[1]--:O[1]=0,F.time=I=Date.UTC.apply(Date,O)-(I||0),isNaN(I))throw new TypeError("Invalid Date");return y(F)},g.fromTimeT=function(S){return b(S,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(S){return this.nano+=+S||0,this},d.getNano=function(){var S=y(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},d.getTimeT=function(){var I=y(this),S=Math.floor(I.time/1e3),I=I.year;return I&&(S+=I*t*r/e),S},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return w(y(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(S){var I=this,F=I.toDate(),O={H:function(){return C(F.getUTCHours())},L:function(){return v(F.getUTCMilliseconds(),3)},M:function(){return C(F.getUTCMinutes())},N:function(){return v(I.getNano(),9)},S:function(){return C(F.getUTCSeconds())},Y:function(){var B=I.getYear();return 999999<B?"+"+B:9999<B?"+"+v(B,6):0<=B?v(B,4):-999999<=B?"-"+v(-B,6):B},a:function(){return h[F.getUTCDay()]},b:function(){return f[F.getUTCMonth()]},d:function(){return C(F.getUTCDate())},e:function(){return function(B){return(9<B?"":" ")+(0|B)}(F.getUTCDate())},m:function(){return C(F.getUTCMonth()+1)}};return function B(M){return M.replace(/%./g,function(D){var A=D[1],P=p[A],A=O[A];return P?B(P):A?A():D})}(S||u)},d.writeInt64BE=E(0,1,2,3,0,4),d.writeInt64LE=E(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],p={"%":"%",F:"%Y-%m-%d",n:`
3
+ `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return g;function g(S,I,F){var O=this;if(!(O instanceof g))return new g(S,I,F);O.time=+S||0,O.nano=+I||0,O.year=+F||0,y(O)}function y(S){var I,F,O,B=S.year,M=S.time,D=S.nano,P=((D<0||a<=D)&&(D-=(F=Math.floor(D/a))*a,M+=F,F=1),B%e);return(M<-s||s<M||P)&&((I=l(M/o))&&(B+=I*e,M-=I*o),(O=w(M)).setUTCFullYear(P+O.getUTCFullYear()),O=(M=+O)+(I=l((B-=P)/e))*o,I&&-s<=O&&O<=s&&(B-=I*e,M=O),F=1),F&&(S.year=B,S.time=M,S.nano=D),S}function w(S){var I=new Date(0);return I.setTime(S),I}function b(B,O){B=+B||0;var F=l((O=(O|0)*i)/n)+l(B/n),O=O%n+B%n,B=l(O/n);return B&&(F+=B,O-=B*n),new g(1e3*O,0,F*e)}function E(S,I,F,O,B,M){return function(P,A){var N=y(this);P=P||new Array(8),T(P,A|=0);var k=Math.floor(N.time/1e3),N=N.year*(t*r/e),R=l(N/i)+l(k/i),N=N%i+k%i,k=Math.floor(N/i);return k&&(R+=k,N-=k*i),D(P,A+B,R),D(P,A+M,N),P};function D(P,A,R){P[A+S]=R>>24&255,P[A+I]=R>>16&255,P[A+F]=R>>8&255,P[A+O]=255&R}}function x(S,I,F,O,B,M){return function(P,A){T(P,A|=0);var R=D(P,A+B);return b(D(P,A+M),R)};function D(P,A){return 16777216*P[A+S]+(P[A+I]<<16|P[A+F]<<8|P[A+O])}}function T(S,I){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<I+8)throw new RangeError("Out of range")}function C(S){return(9<S?"":"0")+(0|S)}function v(S,I){return(c+(0|S)).substr(-I)}}()});var Q7=gt((HZ,X7)=>{function vA(){return!!(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&process.versions.electron||typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Electron")>=0)}X7.exports=vA});var D9=gt((dre,k9)=>{"use strict";k9.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var M9=gt((O9,B9)=>{"use strict";var gd=D9(),{hasOwnProperty:P9}=Object.prototype,{propertyIsEnumerable:nI}=Object,$i=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),oI=O9,N9={concatArrays:!1,ignoreUndefined:!1},yd=r=>{let e=[];for(let t in r)P9.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)nI.call(r,n)&&e.push(n)}return e};function Hi(r){return Array.isArray(r)?sI(r):gd(r)?iI(r):r}function sI(r){let e=r.slice(0,0);return yd(r).forEach(t=>{$i(e,t,Hi(r[t]))}),e}function iI(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return yd(r).forEach(t=>{$i(e,t,Hi(r[t]))}),e}var L9=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?$i(r,o,Mp(r[o],e[o],n)):$i(r,o,Hi(e[o])))}),r),aI=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(s=>{let i=[];for(let a=0;a<s.length;a++)P9.call(s,a)&&(i.push(String(a)),s===r?$i(n,o++,s[a]):$i(n,o++,Hi(s[a])));n=L9(n,s,yd(s).filter(a=>!i.includes(a)),t)}),n};function Mp(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?aI(r,e,t):!gd(e)||!gd(r)?Hi(e):L9(r,e,yd(e),t)}B9.exports=function(...r){let e=Mp(Hi(N9),this!==oI&&this||{},N9),t={_:{}};for(let n of r)if(n!==void 0){if(!gd(n))throw new TypeError("`"+n+"` is not an Option Object");t=Mp(t,{_:n},e)}return t._}});var V9=gt((hre,F9)=>{"use strict";function cI(r){return r>=55296&&r<=56319}function lI(r){return r>=56320&&r<=57343}F9.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,s=0,i,a,c=0;c<o;c+=1){if(i=t.charCodeAt(c),a=t[c],cI(i)&&lI(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),s+=e(a),s===n)return t.slice(0,c+1);if(s>n)return t.slice(0,c-a.length+1)}return t}});var $9=gt((pre,K9)=>{"use strict";function uI(r){return r>=55296&&r<=56319}function dI(r){return r>=56320&&r<=57343}K9.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,s=null,i=0;i<t;i++)o=e.charCodeAt(i),dI(o)?s!=null&&uI(s)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),s=o;return n}});var q9=gt((mre,H9)=>{"use strict";var fI=V9(),hI=$9();H9.exports=fI.bind(null,hI)});var z9=gt((gre,W9)=>{"use strict";var pI=q9(),mI=/[\/\?<>\\:\*\|"]/g,gI=/[\x00-\x1f\x80-\x9f]/g,yI=/^\.+$/,wI=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,EI=/[\. ]+$/;function G9(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(mI,e).replace(gI,e).replace(yI,e).replace(wI,e).replace(EI,e);return pI(t,255)}W9.exports=function(r,e){var t=e&&e.replacement||"",n=G9(r,t);return t===""?n:G9(n,"")}});var Py=gt(Od=>{"use strict";Object.defineProperty(Od,"__esModule",{value:!0});var i3=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},Ld=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new i3;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:s=>o.push(s),stop:()=>o.stop(),fail:s=>o.fail(s),on:(s,i)=>{o.eventHandlers[s]=i}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};Od.EventIterator=Ld;Od.default=Ld});var Ly=gt(mc=>{"use strict";Object.defineProperty(mc,"__esModule",{value:!0});var a3=Py();mc.EventIterator=a3.EventIterator;function lT(r,e,t){return new a3.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}mc.subscribe=lT;mc.default=a3.EventIterator});var YT={};Ye(YT,{DEFAULT_SESSION_MAX_PROVIDERS:()=>w5,DEFAULT_SESSION_MIN_PROVIDERS:()=>y5,createHelia:()=>WT,libp2pDefaults:()=>Fd});var K3=Symbol.for("@libp2p/connection");var cn=Symbol.for("@libp2p/content-routing");var qo=Symbol.for("@libp2p/peer-discovery");var Ls=Symbol.for("@libp2p/peer-id");function to(r){return r!=null&&!!r[Ls]}var ln=Symbol.for("@libp2p/peer-routing");var $3="keep-alive";var un=Symbol.for("@libp2p/transport");var ro;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ro||(ro={}));var dn=class r extends Error{code;type;constructor(e="The operation was aborted"){super(e),this.name="AbortError",this.code=r.code,this.type=r.type}static code="ABORT_ERR";static type="aborted"},m=class extends Error{code;props;constructor(e,t,n){super(e),this.code=t,this.name=n?.name??"CodeError",this.props=n??{}}},bc=class extends AggregateError{code;props;constructor(e,t,n,o){super(e,t),this.code=n,this.name=o?.name??"AggregateCodeError",this.props=o??{}}};var fn="ERR_TIMEOUT";var Sn="ERR_INVALID_MESSAGE";var K=(r,...e)=>{try{[...e]}catch{}};var me=class extends EventTarget{#e=new Map;constructor(){super(),K(1/0,this)}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:s})=>s!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new Pt(e,t))}},Pt=globalThis.CustomEvent;function xc(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function wr(...r){let e=[];for(let t of r)xc(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function Er(...r){let e=[];for(let t of r)xc(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var Te=Symbol.for("@libp2p/service-capabilities"),Mr=Symbol.for("@libp2p/service-dependencies");function _e(r){let e=new globalThis.AbortController;function t(){e.abort();for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}for(let s of r){if(s?.aborted===!0){t();break}s?.addEventListener!=null&&s.addEventListener("abort",t)}function n(){for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function ee(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var _c=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||e-1&e)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},Os=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new _c(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new _c(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var pf=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function At(r={}){return Uw(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function Uw(r,e){e=e??{};let t=e.onEnd,n=new Os,o,s,i,a=ee(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((y,w)=>{s=b=>{s=null,n.push(b);try{y(r(n))}catch(E){w(E)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=ee()})}},l=y=>s!=null?s(y):(n.push(y),o),d=y=>(n=new Os,s!=null?s({error:y}):(n.push({error:y}),o)),u=y=>{if(i)return o;if(e?.objectMode!==!0&&y?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:y})},f=y=>i?o:(i=!0,y!=null?d(y):l({done:!0})),h=()=>(n=new Os,f(),{done:!0}),p=y=>(f(y),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:u,end:f,get readableLength(){return n.size},onEmpty:async y=>{let w=y?.signal;if(w?.throwIfAborted(),n.isEmpty())return;let b,E;w!=null&&(b=new Promise((x,T)=>{E=()=>{T(new pf)},w.addEventListener("abort",E)}));try{await Promise.race([a.promise,b])}finally{E!=null&&w!=null&&w?.removeEventListener("abort",E)}}},t==null)return o;let g=o;return o={[Symbol.asyncIterator](){return this},next(){return g.next()},throw(y){return g.throw(y),t!=null&&(t(y),t=void 0),{done:!0}},return(){return g.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(y){return g.end(y),t!=null&&(t(y),t=void 0),o},get readableLength(){return g.readableLength},onEmpty:y=>g.onEmpty(y)},o}var mf=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function nr(r,e,t,n){let o=new mf(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((s,i)=>{function a(){t?.removeEventListener("abort",d),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=u=>{try{if(n?.filter?.(u)===!1)return}catch(f){a(),i(f);return}a(),s(u)},l=u=>{a(),i(u.detail)},d=()=>{a(),i(o)};t?.addEventListener("abort",d),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var vc=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function Ce(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new vc(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new vc(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((s,i)=>{n=()=>{i(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var Sc=class{deferred;signal;constructor(e){this.signal=e,this.deferred=ee(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new dn)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function Fw(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Rc=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=Fw(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,K(1/0,this.controller.signal),this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&(this.controller.abort(new dn),this.cleanup())}async join(e={}){let t=new Sc(e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await Ce(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var or=class extends me{concurrency;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){t?.signal?.throwIfAborted();let n=new Rc(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let s=0;s<this.queue.length;s++)if(this.queue[s]===n){this.queue.splice(s,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new dn)}),this.clear()}async onEmpty(e){this.size!==0&&await nr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await nr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await nr(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=At({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},s=c=>{n(c.detail)},i=()=>{n()},a=()=>{n(new m("Queue aborted","ERR_QUEUE_ABORTED"))};this.addEventListener("completed",o),this.addEventListener("error",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var qt=class extends or{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function Vw(r){return r[Symbol.asyncIterator]!=null}function Kw(r){if(Vw(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Gt=Kw;function de(r=0){return new Uint8Array(r)}function Ge(r=0){return new Uint8Array(r)}var $w=Math.pow(2,7),Hw=Math.pow(2,14),qw=Math.pow(2,21),gf=Math.pow(2,28),yf=Math.pow(2,35),wf=Math.pow(2,42),Ef=Math.pow(2,49),Ie=128,It=127;function he(r){if(r<$w)return 1;if(r<Hw)return 2;if(r<qw)return 3;if(r<gf)return 4;if(r<yf)return 5;if(r<wf)return 6;if(r<Ef)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function bf(r,e,t=0){switch(he(r)){case 8:e[t++]=r&255|Ie,r/=128;case 7:e[t++]=r&255|Ie,r/=128;case 6:e[t++]=r&255|Ie,r/=128;case 5:e[t++]=r&255|Ie,r/=128;case 4:e[t++]=r&255|Ie,r>>>=7;case 3:e[t++]=r&255|Ie,r>>>=7;case 2:e[t++]=r&255|Ie,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function Gw(r,e,t=0){switch(he(r)){case 8:e.set(t++,r&255|Ie),r/=128;case 7:e.set(t++,r&255|Ie),r/=128;case 6:e.set(t++,r&255|Ie),r/=128;case 5:e.set(t++,r&255|Ie),r/=128;case 4:e.set(t++,r&255|Ie),r>>>=7;case 3:e.set(t++,r&255|Ie),r>>>=7;case 2:e.set(t++,r&255|Ie),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function xf(r,e){let t=r[e],n=0;if(n+=t&It,t<Ie||(t=r[e+1],n+=(t&It)<<7,t<Ie)||(t=r[e+2],n+=(t&It)<<14,t<Ie)||(t=r[e+3],n+=(t&It)<<21,t<Ie)||(t=r[e+4],n+=(t&It)*gf,t<Ie)||(t=r[e+5],n+=(t&It)*yf,t<Ie)||(t=r[e+6],n+=(t&It)*wf,t<Ie)||(t=r[e+7],n+=(t&It)*Ef,t<Ie))return n;throw new RangeError("Could not decode varint")}function Ww(r,e){let t=r.get(e),n=0;if(n+=t&It,t<Ie||(t=r.get(e+1),n+=(t&It)<<7,t<Ie)||(t=r.get(e+2),n+=(t&It)<<14,t<Ie)||(t=r.get(e+3),n+=(t&It)<<21,t<Ie)||(t=r.get(e+4),n+=(t&It)*gf,t<Ie)||(t=r.get(e+5),n+=(t&It)*yf,t<Ie)||(t=r.get(e+6),n+=(t&It)*wf,t<Ie)||(t=r.get(e+7),n+=(t&It)*Ef,t<Ie))return n;throw new RangeError("Could not decode varint")}function Ve(r,e,t=0){return e==null&&(e=Ge(he(r))),e instanceof Uint8Array?bf(r,e,t):Gw(r,e,t)}function Lt(r,e=0){return r instanceof Uint8Array?xf(r,e):Ww(r,e)}function ve(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=Ge(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function J(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var q3=Symbol.for("@achingbrain/uint8arraylist");function H3(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function Ac(r){return!!r?.[q3]}var ae=class r{bufs;length;[q3]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(Ac(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(Ac(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=H3(this.bufs,e);return t.buf[t.index]}set(e,t){let n=H3(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(Ac(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return ve(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:ve(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),s=new r;return s.length=o,s.bufs=[...n],s}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let s=0;s<this.bufs.length;s++){let i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(i);break}let u=e-a;n.push(i.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(d){if(t===c){n.push(i);break}n.push(i.subarray(0,t-a));break}n.push(i)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!Ac(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[n[u]]=u;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let h=this.get(u+f);if(n[f]!==h){d=Math.max(1,f-a[h]);break}}if(d===0)return u}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=Ge(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=de(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=de(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=de(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=Ge(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=de(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=de(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=de(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=de(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=de(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!J(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,s)=>o+s.byteLength,0)),n.length=t,n}};function Ic(r){return r[Symbol.asyncIterator]!=null}var Tc=r=>{let e=he(r),t=Ge(e);return Ve(r,t),Tc.bytes=e,t};Tc.bytes=0;function Wt(r,e){e=e??{};let t=e.lengthEncoder??Tc;function*n(o){let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return Ic(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}Wt.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Tc;return new ae(t(r.byteLength),r)};var Cc=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},kc=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Dc=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Ji=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var Yw=8,Xw=1024*1024*4,Go;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Go||(Go={}));var _f=r=>{let e=Lt(r);return _f.bytes=he(e),e};_f.bytes=0;function zt(r,e){let t=new ae,n=Go.LENGTH,o=-1,s=e?.lengthDecoder??_f,i=e?.maxLengthLength??Yw,a=e?.maxDataLength??Xw;function*c(){for(;t.byteLength>0;){if(n===Go.LENGTH)try{if(o=s(t),o<0)throw new Cc("Invalid message length");if(o>a)throw new kc("Message length too long");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Go.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw new Dc("Message length length too long");break}throw l}if(n===Go.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Go.LENGTH}}}return Ic(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Ji("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Ji("Unexpected end of input")}()}zt.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:s,value:i}=await r.next(t);if(s===!0)return;i!=null&&(yield i)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{t=1}}();return zt(n,{...e??{},onLength:s=>{t=s}})};function Qw(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var Bs=Qw;function Zw(r){return r[Symbol.asyncIterator]!=null}function jw(r,e){let t=0;if(Zw(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Bs(r),{value:o,done:s}=n.next();if(s===!0)return function*(){}();let i=e(o,t++);if(typeof i.then=="function")return async function*(){yield await i;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield i;for(let c of n)yield a(c,t++)}()}var Yt=jw;function Jw(r){return r[Symbol.asyncIterator]!=null}function eE(...r){let e=[];for(let t of r)Jw(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=At({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(r.map(async n=>{for await(let o of n)t.push(o)})),t.end()}catch(n){t.end(n)}}),yield*t}()}var Ot=eE;function Xe(r,...e){if(r==null)throw new Error("Empty pipeline");if(vf(r)){let n=r;r=()=>n.source}else if(W3(r)||G3(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&vf(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)vf(t[n])&&(t[n]=rE(t[n]));return tE(...t)}var tE=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},G3=r=>r?.[Symbol.asyncIterator]!=null,W3=r=>r?.[Symbol.iterator]!=null,vf=r=>r==null?!1:r.sink!=null&&r.source!=null,rE=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=At({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(G3(s))o=async function*(){yield*s,n.end()};else if(W3(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return Ot(n,o())}return r.source};function nE(r){return r[Symbol.asyncIterator]!=null}function oE(r,e){return nE(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var no=oE;var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var ea="/ipfs/bitswap/1.2.0";var Sf=new Float32Array([-0]),oo=new Uint8Array(Sf.buffer);function z3(r,e,t){Sf[0]=r,e[t]=oo[0],e[t+1]=oo[1],e[t+2]=oo[2],e[t+3]=oo[3]}function Y3(r,e){return oo[0]=r[e],oo[1]=r[e+1],oo[2]=r[e+2],oo[3]=r[e+3],Sf[0]}var Rf=new Float64Array([-0]),Tt=new Uint8Array(Rf.buffer);function X3(r,e,t){Rf[0]=r,e[t]=Tt[0],e[t+1]=Tt[1],e[t+2]=Tt[2],e[t+3]=Tt[3],e[t+4]=Tt[4],e[t+5]=Tt[5],e[t+6]=Tt[6],e[t+7]=Tt[7]}function Q3(r,e){return Tt[0]=r[e],Tt[1]=r[e+1],Tt[2]=r[e+2],Tt[3]=r[e+3],Tt[4]=r[e+4],Tt[5]=r[e+5],Tt[6]=r[e+6],Tt[7]=r[e+7],Rf[0]}var sE=BigInt(Number.MAX_SAFE_INTEGER),iE=BigInt(Number.MIN_SAFE_INTEGER),sr=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return Wo;if(e<sE&&e>iE)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>Z3&&(o=0n,++n>Z3&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Wo;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):Wo}},Wo=new sr(0,0);Wo.toBigInt=function(){return 0n};Wo.zzEncode=Wo.zzDecode=function(){return this};Wo.length=function(){return 1};var Z3=4294967296n;function j3(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function J3(r,e,t){if(t-e<1)return"";let o,s=[],i=0,a;for(;e<t;)a=r[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function Af(r,e,t){let n=t,o,s;for(let i=0;i<r.length;++i)o=r.charCodeAt(i),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((s=r.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function Ur(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Pc(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var If=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,Ur(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw Ur(this,4);return Pc(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Ur(this,4);return Pc(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Ur(this,4);let e=Y3(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Ur(this,4);let e=Q3(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw Ur(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return J3(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Ur(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Ur(this);while(this.buf[this.pos++]&128);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new sr(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw Ur(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw Ur(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw Ur(this,8);let e=Pc(this.buf,this.pos+=4),t=Pc(this.buf,this.pos+=4);return new sr(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=xf(this.buf,this.pos);return this.pos+=he(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function Tf(r){return new If(r instanceof Uint8Array?r:r.subarray())}function re(r,e,t){let n=Tf(r);return e.decode(n,void 0,t)}var Pf={};Ye(Pf,{base10:()=>fE});var $k=new Uint8Array(0);function tm(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function An(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function rm(r){return new TextEncoder().encode(r)}function nm(r){return new TextDecoder().decode(r)}function aE(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(p){if(p instanceof Uint8Array||(ArrayBuffer.isView(p)?p=new Uint8Array(p.buffer,p.byteOffset,p.byteLength):Array.isArray(p)&&(p=Uint8Array.from(p))),!(p instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(p.length===0)return"";for(var g=0,y=0,w=0,b=p.length;w!==b&&p[w]===0;)w++,g++;for(var E=(b-w)*d+1>>>0,x=new Uint8Array(E);w!==b;){for(var T=p[w],C=0,v=E-1;(T!==0||C<y)&&v!==-1;v--,C++)T+=256*x[v]>>>0,x[v]=T%a>>>0,T=T/a>>>0;if(T!==0)throw new Error("Non-zero carry");y=C,w++}for(var S=E-y;S!==E&&x[S]===0;)S++;for(var I=c.repeat(g);S<E;++S)I+=r.charAt(x[S]);return I}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var g=0;if(p[g]!==" "){for(var y=0,w=0;p[g]===c;)y++,g++;for(var b=(p.length-g)*l+1>>>0,E=new Uint8Array(b);p[g];){var x=t[p.charCodeAt(g)];if(x===255)return;for(var T=0,C=b-1;(x!==0||T<w)&&C!==-1;C--,T++)x+=a*E[C]>>>0,E[C]=x%256>>>0,x=x/256>>>0;if(x!==0)throw new Error("Non-zero carry");w=T,g++}if(p[g]!==" "){for(var v=b-w;v!==b&&E[v]===0;)v++;for(var S=new Uint8Array(y+(b-v)),I=y;v!==b;)S[I++]=E[v++];return S}}}function h(p){var g=f(p);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var cE=aE,lE=cE,sm=lE;var Cf=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},kf=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return im(this,e)}},Df=class{decoders;constructor(e){this.decoders=e}or(e){return im(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function im(r,e){return new Df({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Nf=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new Cf(e,t,n),this.decoder=new kf(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Ms({name:r,prefix:e,encode:t,decode:n}){return new Nf(r,e,t,n)}function so({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=sm(t,r);return Ms({prefix:e,name:r,encode:n,decode:s=>An(o(s))})}function uE(r,e,t,n){let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,c=0,l=0;for(let d=0;d<s;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,i[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i}function dE(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s}function Qe({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Ms({prefix:e,name:r,encode(o){return dE(o,n,t)},decode(o){return uE(o,n,t,r)}})}var fE=so({prefix:"9",name:"base10",alphabet:"0123456789"});var Lf={};Ye(Lf,{base16:()=>hE,base16upper:()=>pE});var hE=Qe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),pE=Qe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Of={};Ye(Of,{base2:()=>mE});var mE=Qe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Bf={};Ye(Bf,{base256emoji:()=>bE});var am=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),gE=am.reduce((r,e,t)=>(r[t]=e,r),[]),yE=am.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function wE(r){return r.reduce((e,t)=>(e+=gE[t],e),"")}function EE(r){let e=[];for(let t of r){let n=yE[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var bE=Ms({prefix:"\u{1F680}",name:"base256emoji",encode:wE,decode:EE});var Mf={};Ye(Mf,{base32:()=>lt,base32hex:()=>vE,base32hexpad:()=>RE,base32hexpadupper:()=>AE,base32hexupper:()=>SE,base32pad:()=>xE,base32padupper:()=>_E,base32upper:()=>cm,base32z:()=>IE});var lt=Qe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),cm=Qe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),xE=Qe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),_E=Qe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),vE=Qe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),SE=Qe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),RE=Qe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),AE=Qe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),IE=Qe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Uf={};Ye(Uf,{base36:()=>br,base36upper:()=>TE});var br=so({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),TE=so({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Ff={};Ye(Ff,{base58btc:()=>We,base58flickr:()=>CE});var We=so({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),CE=so({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Kf={};Ye(Kf,{base64:()=>ot,base64pad:()=>kE,base64url:()=>Vf,base64urlpad:()=>DE});var ot=Qe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),kE=Qe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Vf=Qe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),DE=Qe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var $f={};Ye($f,{base8:()=>NE});var NE=Qe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Hf={};Ye(Hf,{identity:()=>PE});var PE=Ms({prefix:"\0",name:"identity",encode:r=>nm(r),decode:r=>rm(r)});var oD=new TextEncoder,sD=new TextDecoder;var lm=512;var Lc=85;var zf={};Ye(zf,{identity:()=>Mt});var Bt={};Ye(Bt,{Digest:()=>zo,create:()=>ir,decode:()=>Fr,equals:()=>Wf});var LE=hm,dm=128,OE=127,BE=~OE,ME=Math.pow(2,31);function hm(r,e,t){e=e||[],t=t||0;for(var n=t;r>=ME;)e[t++]=r&255|dm,r/=128;for(;r&BE;)e[t++]=r&255|dm,r>>>=7;return e[t]=r|0,hm.bytes=t-n+1,e}var UE=Gf,FE=128,fm=127;function Gf(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Gf.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&fm)<<o:(i&fm)*Math.pow(2,o),o+=7}while(i>=FE);return Gf.bytes=s-n,t}var VE=Math.pow(2,7),KE=Math.pow(2,14),$E=Math.pow(2,21),HE=Math.pow(2,28),qE=Math.pow(2,35),GE=Math.pow(2,42),WE=Math.pow(2,49),zE=Math.pow(2,56),YE=Math.pow(2,63),XE=function(r){return r<VE?1:r<KE?2:r<$E?3:r<HE?4:r<qE?5:r<GE?6:r<WE?7:r<zE?8:r<YE?9:10},QE={encode:LE,decode:UE,encodingLength:XE},ZE=QE,ta=ZE;function ra(r,e=0){return[ta.decode(r,e),ta.decode.bytes]}function Us(r,e,t=0){return ta.encode(r,e,t),e}function Fs(r){return ta.encodingLength(r)}function ir(r,e){let t=e.byteLength,n=Fs(r),o=n+Fs(t),s=new Uint8Array(o+t);return Us(r,s,0),Us(t,s,n),s.set(e,o),new zo(r,t,e,s)}function Fr(r){let e=An(r),[t,n]=ra(e),[o,s]=ra(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new zo(t,o,i,e)}function Wf(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&tm(r.bytes,t.bytes)}}var zo=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};var pm=0,jE="identity",mm=An;function JE(r){return ir(pm,mm(r))}var Mt={code:pm,name:jE,encode:mm,digest:JE};var Zf={};Ye(Zf,{sha256:()=>ke,sha512:()=>Qf});function Xf({name:r,code:e,encode:t}){return new Yf(r,e,t)}var Yf=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?ir(this.code,t):t.then(n=>ir(this.code,n))}else throw Error("Unknown type, must be binary type")}};function ym(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var ke=Xf({name:"sha2-256",code:18,encode:ym("SHA-256")}),Qf=Xf({name:"sha2-512",code:19,encode:ym("SHA-512")});function wm(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return tb(t,jf(r),e??We.encoder);default:return rb(t,jf(r),e??lt.encoder)}}var Em=new WeakMap;function jf(r){let e=Em.get(r);if(e==null){let t=new Map;return Em.set(r,t),t}return e}var le=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==na)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==nb)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=ir(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&Wf(e.multihash,n.multihash)}toString(e){return wm(this,e)}toJSON(){return{"/":wm(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:s,bytes:i}=t;return new r(n,o,s,i??bm(n,o,s.bytes))}else if(t[ob]===!0){let{version:n,multihash:o,code:s}=t,i=Fr(o);return r.create(n,s,i)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==na)throw new Error(`Version 0 CID must use dag-pb (code: ${na}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=bm(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,na,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=An(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new zo(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=ra(e.subarray(t));return t+=f,u},o=n(),s=na;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=eb(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return jf(s).set(n,e),s}};function eb(r,e){switch(r[0]){case"Q":{let t=e??We;return[We.prefix,t.decode(`${We.prefix}${r}`)]}case We.prefix:{let t=e??We;return[We.prefix,t.decode(r)]}case lt.prefix:{let t=e??lt;return[lt.prefix,t.decode(r)]}case br.prefix:{let t=e??br;return[br.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function tb(r,e,t){let{prefix:n}=t;if(n!==We.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function rb(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var na=112,nb=18;function bm(r,e,t){let n=Fs(r),o=n+Fs(e),s=new Uint8Array(o+t.byteLength);return Us(r,s,0),Us(e,s,n),s.set(t,o),s}var ob=Symbol.for("@ipld/js-cid/CID");var xr={...Hf,...Of,...$f,...Pf,...Lf,...Mf,...Uf,...Ff,...Kf,...Bf},ID={...Zf,...zf};function _m(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var xm=_m("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),Jf=_m("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Ge(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),sb={utf8:xm,"utf-8":xm,hex:xr.base16,latin1:Jf,ascii:Jf,binary:Jf,...xr},Bc=sb;function L(r,e="utf8"){let t=Bc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function eh(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return Ge(i);o+i>e&&(n=Ge(e),o=0);let a=n.subarray(o,o+=i);return o&7&&(o=(o|7)+1),a}}var Yo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function th(){}var nh=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},ib=eh();function ab(r){return globalThis.Buffer!=null?Ge(r):ib(r)}var sa=class{len;head;tail;states;constructor(){this.len=0,this.head=new Yo(th,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Yo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new oh((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Mc,10,sr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=sr.fromBigInt(e);return this._push(Mc,t.length(),t)}uint64Number(e){return this._push(bf,he(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=sr.fromBigInt(e).zzEncode();return this._push(Mc,t.length(),t)}sint64Number(e){let t=sr.fromNumber(e).zzEncode();return this._push(Mc,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(rh,1,e?1:0)}fixed32(e){return this._push(oa,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=sr.fromBigInt(e);return this._push(oa,4,t.lo)._push(oa,4,t.hi)}fixed64Number(e){let t=sr.fromNumber(e);return this._push(oa,4,t.lo)._push(oa,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(z3,4,e)}double(e){return this._push(X3,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(rh,1,0):this.uint32(t)._push(lb,t,e)}string(e){let t=j3(e);return t!==0?this.uint32(t)._push(Af,t,e):this._push(rh,1,0)}fork(){return this.states=new nh(this),this.head=this.tail=new Yo(th,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new Yo(th,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=ab(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function rh(r,e,t){e[t]=r&255}function cb(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var oh=class extends Yo{next;constructor(e,t){super(cb,e,t),this.next=void 0}};function Mc(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function oa(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function lb(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(sa.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(ub,e,r),this},sa.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(db,e,r),this});function ub(r,e,t){e.set(r,t)}function db(r,e,t){r.length<40?Af(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(L(r),t)}function sh(){return new sa}function ne(r,e){let t=sh();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Vs;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(Vs||(Vs={}));function Uc(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function Ke(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(s,i){let a=e(s);i.int32(a)},n=function(s){let i=s.int32();return e(i)};return Uc("enum",Vs.VARINT,t,n)}function oe(r,e){return Uc("message",Vs.LENGTH_DELIMITED,r,e)}var _r=class extends Error{code;constructor(e,t){super(e),this.code=t}};var et;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(et||(et={}));var ih;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(ih||(ih={}));(function(r){r.codec=()=>Ke(ih)})(et||(et={}));var Ks;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),et.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:de(0),priority:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.cid=t.bytes();break}case 2:{s.priority=t.int32();break}case 3:{s.cancel=t.bool();break}case 4:{s.wantType=et.codec().decode(t);break}case 5:{s.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Ks||(Ks={}));var Fc;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let s of t.entries)n.uint32(10),Ks.codec().encode(s,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={entries:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&s.entries.length===o.limits.entries)throw new _r('decode error - map field "entries" had too many elements',"ERR_MAX_LENGTH");s.entries.push(Ks.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{s.full=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Fc||(Fc={}));var $s;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={prefix:de(0),data:de(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.prefix=t.bytes();break}case 2:{s.data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})($s||($s={}));var vr;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(vr||(vr={}));var Vc;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(Vc||(Vc={}));(function(r){r.codec=()=>Ke(Vc)})(vr||(vr={}));var Hs;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&Vc[t.type]!==0&&(n.uint32(16),vr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:de(0),type:vr.HaveBlock},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.cid=t.bytes();break}case 2:{s.type=vr.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Hs||(Hs={}));var Xo;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Fc.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),$s.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),Hs.codec().encode(s,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={blocks:[],blockPresences:[],pendingBytes:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.wantlist=Fc.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&s.blocks.length===o.limits.blocks)throw new _r('decode error - map field "blocks" had too many elements',"ERR_MAX_LENGTH");s.blocks.push($s.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&s.blockPresences.length===o.limits.blockPresences)throw new _r('decode error - map field "blockPresences" had too many elements',"ERR_MAX_LENGTH");s.blockPresences.push(Hs.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{s.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Xo||(Xo={}));function vm(r,e){for(let[t,n]of e.wantlist.entries()){let o=r.wantlist.get(t);o!=null&&(o.priority>n.priority&&(n.priority=o.priority),n.cancel=n.cancel??o.cancel,n.wantType=n.wantType??o.wantType,n.sendDontHave=n.sendDontHave??o.sendDontHave),r.wantlist.set(t,n)}for(let[t,n]of e.blockPresences.entries())r.blockPresences.set(t,n);for(let[t,n]of e.blocks.entries())r.blocks.set(t,n);return e.full&&!r.full&&(r.full=!0),r}var fb=4193648,hb=fb+16;function*Sm(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],s=0,i=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},d=Xo.encode(l).byteLength,{added:u,hasMore:f,newSize:h}=ah(o,l.blocks,a,e,d,pb);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=ah(n,l.blockPresences,i,e,d,mb)),i+=u,d=h;let g=f;if({added:u,hasMore:f,newSize:h}=ah(t,l.wantlist.entries,s,e,d,gb),s+=u,d=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield Xo.encode(l),c)break}}function ah(r,e,t,n,o,s){let i=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],d=s(l);if(d>hb)throw new m("Cannot send block as after encoding it is over the max message size","ERR_BLOCK_TOO_LARGE");let u=o+d;if(u>n){a=!0;break}e.push(l),i++,o=u}return{hasMore:a,added:i,newSize:o}}function pb(r){return ch(3,$s.encode(r))}function mb(r){return ch(4,Hs.encode(r))}function gb(r){return ch(1,Ks.encode(r))}function ch(r,e){let t=he(r),n=he(e.byteLength);return t+n+e.byteLength}var Kc=class extends me{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnTransientConnections;maxOutgoingMessageSize;maxIncomingMessageSize;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[ea],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.runOnTransientConnections=t.runOnTransientConnections??!1,this.maxIncomingMessageSize=t.maxIncomingMessageSize??4194304,this.maxOutgoingMessageSize=t.maxOutgoingMessageSize??t.maxIncomingMessageSize??4194304,this.metrics={blocksSent:e.metrics?.registerCounter("helia_bitswap_sent_blocks_total"),dataSent:e.metrics?.registerCounter("helia_bitswap_sent_data_bytes_total")},this.sendQueue=new qt({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.status==="open"?t.abort(new m(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`,"ERR_TIMEOUT")):this.log("stream aborted with status %s",t.status)},s=AbortSignal.timeout(this.messageReceiveTimeout);K(1/0,s),s.addEventListener("abort",o),await t.closeWrite(),await Xe(t,i=>zt(i,{maxDataLength:this.maxIncomingMessageSize}),async i=>{for await(let a of i)try{let c=Xo.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),s.removeEventListener("abort",o),s=AbortSignal.timeout(this.messageReceiveTimeout),K(1/0,s),s.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new H("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnTransientConnection:this.runOnTransientConnections})&&(yield n)}async findAndConnect(e,t){await Gt(Yt(no(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(s=>e.equals(s.options.peerId)&&s.status==="queued");if(o!=null){o.options.message=vm(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async s=>{let i=s?.message;if(i==null)throw new m("No message to send","ERR_NO_MESSAGE");this.log("sendMessage to %p",e),s?.onProgress?.(new H("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,ea,s);await a.closeRead();try{await Xe(Sm(i,this.maxOutgoingMessageSize),c=>Wt(c),a),await a.close(s)}catch(c){s?.onProgress?.(new H("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",e,c),a.abort(c)}this._updateSentStats(i.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new m("Network isn't running","ERR_NOT_STARTED");t?.onProgress?.(new H("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),nr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(ea))return!0;throw new m(`${e} did not support ${ea}`,"ERR_BITSWAP_UNSUPPORTED_BY_PEER")}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function U(r,e="utf8"){let t=Bc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var Am=Symbol.for("nodejs.util.inspect.custom"),Rm=Object.values(xr).map(r=>r.decoder).reduce((r,e)=>r.or(e),xr.identity.decoder),Im=114,dh=36,fh=37,ia=class{type;multihash;privateKey;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,this.privateKey=e.privateKey,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Ls]=!0;toString(){return this.string==null&&(this.string=We.encode(this.multihash.bytes).slice(1)),this.string}toCID(){return le.createV1(Im,this.multihash)}toBytes(){return this.multihash.bytes}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return J(this.multihash.bytes,e);if(typeof e=="string")return pe(e).equals(this);if(e?.multihash?.bytes!=null)return J(this.multihash.bytes,e.multihash.bytes);throw new Error("not valid Id")}[Am](){return`PeerId(${this.toString()})`}},Qo=class extends ia{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Zo=class extends ia{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.multihash.digest}},jo=class extends ia{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.multihash.digest}},lh=2336,uh=class{type="url";multihash;privateKey;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Mt.digest(L(this.url))}[Am](){return`PeerId(${this.url})`}[Ls]=!0;toString(){return this.toCID().toString()}toCID(){return le.createV1(lh,this.multihash)}toBytes(){return this.toCID().bytes}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=U(e)),e.toString()===this.toString())}};function Tm(r){if(r.type==="RSA")return new Qo(r);if(r.type==="Ed25519")return new Zo(r);if(r.type==="secp256k1")return new jo(r);throw new m("Not a PeerId","ERR_INVALID_PARAMETERS")}function pe(r,e){if(e=e??Rm,r.charAt(0)==="1"||r.charAt(0)==="Q"){let t=Fr(We.decode(`z${r}`));return r.startsWith("12D")?new Zo({multihash:t}):r.startsWith("16U")?new jo({multihash:t}):new Qo({multihash:t})}return Ze(Rm.decode(r))}function Ze(r){try{let e=Fr(r);if(e.code===Mt.code){if(e.digest.length===dh)return new Zo({multihash:e});if(e.digest.length===fh)return new jo({multihash:e})}if(e.code===ke.code)return new Qo({multihash:e})}catch{return Rb(le.decode(r))}throw new Error("Supplied PeerID CID is invalid")}function Rb(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==Im&&r.code!==lh)throw new Error("Supplied PeerID CID is invalid");if(r.code===lh){let t=U(r.multihash.digest);return new uh(new URL(t))}let e=r.multihash;if(e.code===ke.code)return new Qo({multihash:r.multihash});if(e.code===Mt.code){if(e.digest.length===dh)return new Zo({multihash:r.multihash});if(e.digest.length===fh)return new jo({multihash:r.multihash})}throw new Error("Supplied PeerID CID is invalid")}async function ut(r,e){return r.length===dh?new Zo({multihash:ir(Mt.code,r),privateKey:e}):r.length===fh?new jo({multihash:ir(Mt.code,r),privateKey:e}):new Qo({multihash:await ke.digest(r),publicKey:r,privateKey:e})}function qs(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}var st=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),n)}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return qs(this.map.entries(),e=>[pe(e[0]),e[1]])}forEach(e){this.map.forEach((t,n)=>{e(t,pe(n),this)})}get(e){return this.map.get(e.toString())}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),t)}keys(){return qs(this.map.keys(),e=>pe(e))}values(){return this.map.values()}get size(){return this.map.size}};var Ct=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return qs(this.set.entries(),e=>{let t=pe(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=pe(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return qs(this.set.values(),e=>pe(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};var $e={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw Object.assign(new Error("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var Cm={SHA1:20,SHA256:32,SHA512:64};var Ib={SHA1:"SHA-1",SHA256:"SHA-256",SHA512:"SHA-512"},Tb=async(r,e)=>{let t=await $e.get().subtle.sign({name:"HMAC"},r,e);return new Uint8Array(t,0,t.byteLength)};async function km(r,e){let t=Ib[r],n=await $e.get().subtle.importKey("raw",e,{name:"HMAC",hash:{name:t}},!1,["sign"]);return{async digest(o){return Tb(n,o)},length:Cm[r]}}var ql={};Ye(ql,{Ed25519PrivateKey:()=>Pn,Ed25519PublicKey:()=>cs,MAX_RSA_KEY_SIZE:()=>ds,RsaPrivateKey:()=>Eo,RsaPublicKey:()=>us,Secp256k1PrivateKey:()=>hs,Secp256k1PublicKey:()=>fs,generateEphemeralKeyPair:()=>i4,generateKeyPair:()=>xa,generateKeyPairFromSeed:()=>R_,importKey:()=>ii,keyStretcher:()=>l4,keysPBM:()=>ei,marshalPrivateKey:()=>t0,marshalPublicKey:()=>e0,supportedKeys:()=>$n,unmarshalPrivateKey:()=>Ir,unmarshalPublicKey:()=>Qr});var Lh={};Ye(Lh,{Ed25519PrivateKey:()=>Pn,Ed25519PublicKey:()=>cs,generateKeyPair:()=>Mx,generateKeyPairFromSeed:()=>Ph,unmarshalEd25519PrivateKey:()=>Ox,unmarshalEd25519PublicKey:()=>Bx});function hh(r,e){let t=L(r,"base64urlpad");if(e!=null){if(t.length>e)throw new Error("byte array longer than desired length");t=ve([new Uint8Array(e-t.length),t])}return t}function Sr(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function io(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function kb(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Gs(r,...e){if(!kb(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Jo(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");io(r.outputLen),io(r.blockLen)}function Ws(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Dm(r,e){Gs(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var es=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var ts=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Vr=(r,e)=>r<<32-e|r>>>e,$c=(r,e)=>r<<e|r>>>32-e>>>0,eP=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var Db=async()=>{};async function Nm(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let s=Date.now()-n;s>=0&&s<e||(await Db(),n+=s)}}function Pm(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Kr(r){return typeof r=="string"&&(r=Pm(r)),Gs(r),r}function ph(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Gs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}var zs=class{clone(){return this._cloneInto()}},Nb={}.toString;function Lm(r,e){if(e!==void 0&&Nb.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Ys(r){let e=n=>r().update(Kr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function rs(r=32){if(es&&typeof es.getRandomValues=="function")return es.getRandomValues(new Uint8Array(r));if(es&&typeof es.randomBytes=="function")return es.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function Pb(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}var Hc=(r,e,t)=>r&e^~r&t,qc=(r,e,t)=>r&e^r&t^e&t,ao=class extends zs{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=ts(this.buffer)}update(e){Ws(this);let{view:t,buffer:n,blockLen:o}=this;e=Kr(e);let s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=ts(e);for(;o<=s-i;i+=o)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ws(this),Dm(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>o-i&&(this.process(n,0),i=0);for(let u=i;u<o;u++)t[u]=0;Pb(n,o-8,BigInt(this.length*8),s),this.process(n,0);let a=ts(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:s,destroyed:i,pos:a}=this;return e.length=o,e.pos=a,e.finished=s,e.destroyed=i,o%t&&e.buffer.set(n),e}};var Gc=BigInt(4294967295),mh=BigInt(32);function Om(r,e=!1){return e?{h:Number(r&Gc),l:Number(r>>mh&Gc)}:{h:Number(r>>mh&Gc)|0,l:Number(r&Gc)|0}}function Lb(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:s,l:i}=Om(r[o],e);[t[o],n[o]]=[s,i]}return[t,n]}var Ob=(r,e)=>BigInt(r>>>0)<<mh|BigInt(e>>>0),Bb=(r,e,t)=>r>>>t,Mb=(r,e,t)=>r<<32-t|e>>>t,Ub=(r,e,t)=>r>>>t|e<<32-t,Fb=(r,e,t)=>r<<32-t|e>>>t,Vb=(r,e,t)=>r<<64-t|e>>>t-32,Kb=(r,e,t)=>r>>>t-32|e<<64-t,$b=(r,e)=>e,Hb=(r,e)=>r,qb=(r,e,t)=>r<<t|e>>>32-t,Gb=(r,e,t)=>e<<t|r>>>32-t,Wb=(r,e,t)=>e<<t-32|r>>>64-t,zb=(r,e,t)=>r<<t-32|e>>>64-t;function Yb(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var Xb=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),Qb=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,Zb=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),jb=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,Jb=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),ex=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var tx={fromBig:Om,split:Lb,toBig:Ob,shrSH:Bb,shrSL:Mb,rotrSH:Ub,rotrSL:Fb,rotrBH:Vb,rotrBL:Kb,rotr32H:$b,rotr32L:Hb,rotlSH:qb,rotlSL:Gb,rotlBH:Wb,rotlBL:zb,add:Yb,add3L:Xb,add3H:Qb,add4L:Zb,add4H:jb,add5H:ex,add5L:Jb},ue=tx;var[rx,nx]=ue.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),co=new Uint32Array(80),lo=new Uint32Array(80),gh=class extends ao{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:h,Gl:p,Hh:g,Hl:y}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,h,p,g,y]}set(e,t,n,o,s,i,a,c,l,d,u,f,h,p,g,y){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=g|0,this.Hl=y|0}process(e,t){for(let E=0;E<16;E++,t+=4)co[E]=e.getUint32(t),lo[E]=e.getUint32(t+=4);for(let E=16;E<80;E++){let x=co[E-15]|0,T=lo[E-15]|0,C=ue.rotrSH(x,T,1)^ue.rotrSH(x,T,8)^ue.shrSH(x,T,7),v=ue.rotrSL(x,T,1)^ue.rotrSL(x,T,8)^ue.shrSL(x,T,7),S=co[E-2]|0,I=lo[E-2]|0,F=ue.rotrSH(S,I,19)^ue.rotrBH(S,I,61)^ue.shrSH(S,I,6),O=ue.rotrSL(S,I,19)^ue.rotrBL(S,I,61)^ue.shrSL(S,I,6),B=ue.add4L(v,O,lo[E-7],lo[E-16]),M=ue.add4H(B,C,F,co[E-7],co[E-16]);co[E]=M|0,lo[E]=B|0}let{Ah:n,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:h,Fl:p,Gh:g,Gl:y,Hh:w,Hl:b}=this;for(let E=0;E<80;E++){let x=ue.rotrSH(u,f,14)^ue.rotrSH(u,f,18)^ue.rotrBH(u,f,41),T=ue.rotrSL(u,f,14)^ue.rotrSL(u,f,18)^ue.rotrBL(u,f,41),C=u&h^~u&g,v=f&p^~f&y,S=ue.add5L(b,T,v,nx[E],lo[E]),I=ue.add5H(S,w,x,C,rx[E],co[E]),F=S|0,O=ue.rotrSH(n,o,28)^ue.rotrBH(n,o,34)^ue.rotrBH(n,o,39),B=ue.rotrSL(n,o,28)^ue.rotrBL(n,o,34)^ue.rotrBL(n,o,39),M=n&s^n&a^s&a,D=o&i^o&c^i&c;w=g|0,b=y|0,g=h|0,y=p|0,h=u|0,p=f|0,{h:u,l:f}=ue.add(l|0,d|0,I|0,F|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let P=ue.add3L(F,B,D);n=ue.add3H(P,I,O,M),o=P|0}({h:n,l:o}=ue.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=ue.add(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=ue.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=ue.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=ue.add(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=ue.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:y}=ue.add(this.Gh|0,this.Gl|0,g|0,y|0),{h:w,l:b}=ue.add(this.Hh|0,this.Hl|0,w|0,b|0),this.set(n,o,s,i,a,c,l,d,u,f,h,p,g,y,w,b)}roundClean(){co.fill(0),lo.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var ns=Ys(()=>new gh);var zc={};Ye(zc,{aInRange:()=>yt,abool:()=>$r,abytes:()=>Xs,bitGet:()=>lx,bitLen:()=>xh,bitMask:()=>ca,bitSet:()=>ux,bytesToHex:()=>Tn,bytesToNumberBE:()=>Cn,bytesToNumberLE:()=>Hr,concatBytes:()=>Dn,createHmacDrbg:()=>_h,ensureBytes:()=>Be,equalBytes:()=>ax,hexToBytes:()=>ss,hexToNumber:()=>bh,inRange:()=>aa,isBytes:()=>uo,memoized:()=>is,notImplemented:()=>fx,numberToBytesBE:()=>fo,numberToBytesLE:()=>kn,numberToHexUnpadded:()=>os,numberToVarBytesBE:()=>ix,utf8ToBytes:()=>cx,validateObject:()=>Rr});var Eh=BigInt(0),Wc=BigInt(1),ox=BigInt(2);function uo(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Xs(r){if(!uo(r))throw new Error("Uint8Array expected")}function $r(r,e){if(typeof e!="boolean")throw new Error(`${r} must be valid boolean, got "${e}".`)}var sx=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Tn(r){Xs(r);let e="";for(let t=0;t<r.length;t++)e+=sx[r[t]];return e}function os(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function bh(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var In={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function Bm(r){if(r>=In._0&&r<=In._9)return r-In._0;if(r>=In._A&&r<=In._F)return r-(In._A-10);if(r>=In._a&&r<=In._f)return r-(In._a-10)}function ss(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,s=0;o<t;o++,s+=2){let i=Bm(r.charCodeAt(s)),a=Bm(r.charCodeAt(s+1));if(i===void 0||a===void 0){let c=r[s]+r[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}n[o]=i*16+a}return n}function Cn(r){return bh(Tn(r))}function Hr(r){return Xs(r),bh(Tn(Uint8Array.from(r).reverse()))}function fo(r,e){return ss(r.toString(16).padStart(e*2,"0"))}function kn(r,e){return fo(r,e).reverse()}function ix(r){return ss(os(r))}function Be(r,e,t){let n;if(typeof e=="string")try{n=ss(e)}catch(s){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${s}`)}else if(uo(e))n=Uint8Array.from(e);else throw new Error(`${r} must be hex string or Uint8Array`);let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(`${r} expected ${t} bytes, got ${o}`);return n}function Dn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Xs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}function ax(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function cx(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}var yh=r=>typeof r=="bigint"&&Eh<=r;function aa(r,e,t){return yh(r)&&yh(e)&&yh(t)&&e<=r&&r<t}function yt(r,e,t,n){if(!aa(e,t,n))throw new Error(`expected valid ${r}: ${t} <= n < ${n}, got ${typeof e} ${e}`)}function xh(r){let e;for(e=0;r>Eh;r>>=Wc,e+=1);return e}function lx(r,e){return r>>BigInt(e)&Wc}function ux(r,e,t){return r|(t?Wc:Eh)<<BigInt(e)}var ca=r=>(ox<<BigInt(r-1))-Wc,wh=r=>new Uint8Array(r),Mm=r=>Uint8Array.from(r);function _h(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=wh(r),o=wh(r),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...u)=>t(o,n,...u),c=(u=wh())=>{o=a(Mm([0]),u),n=a(),u.length!==0&&(o=a(Mm([1]),u),n=a())},l=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let u=0,f=[];for(;u<e;){n=a();let h=n.slice();f.push(h),u+=n.length}return Dn(...f)};return(u,f)=>{i(),c(u);let h;for(;!(h=f(l()));)c();return i(),h}}var dx={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||uo(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function Rr(r,e,t={}){let n=(o,s,i)=>{let a=dx[s];if(typeof a!="function")throw new Error(`Invalid validator "${s}", expected function`);let c=r[o];if(!(i&&c===void 0)&&!a(c,r))throw new Error(`Invalid param ${String(o)}=${c} (${typeof c}), expected ${s}`)};for(let[o,s]of Object.entries(e))n(o,s,!1);for(let[o,s]of Object.entries(t))n(o,s,!0);return r}var fx=()=>{throw new Error("not implemented")};function is(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let s=r(t,...n);return e.set(t,s),s}}var dt=BigInt(0),He=BigInt(1),as=BigInt(2),hx=BigInt(3),vh=BigInt(4),Um=BigInt(5),Fm=BigInt(8),px=BigInt(9),mx=BigInt(16);function Re(r,e){let t=r%e;return t>=dt?t:e+t}function Sh(r,e,t){if(t<=dt||e<dt)throw new Error("Expected power/modulo > 0");if(t===He)return dt;let n=He;for(;e>dt;)e&He&&(n=n*r%t),r=r*r%t,e>>=He;return n}function Me(r,e,t){let n=r;for(;e-- >dt;)n*=n,n%=t;return n}function Yc(r,e){if(r===dt||e<=dt)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=Re(r,e),n=e,o=dt,s=He,i=He,a=dt;for(;t!==dt;){let l=n/t,d=n%t,u=o-i*l,f=s-a*l;n=t,t=d,o=i,s=a,i=u,a=f}if(n!==He)throw new Error("invert: does not exist");return Re(o,e)}function gx(r){let e=(r-He)/as,t,n,o;for(t=r-He,n=0;t%as===dt;t/=as,n++);for(o=as;o<r&&Sh(o,e,r)!==r-He;o++);if(n===1){let i=(r+He)/vh;return function(c,l){let d=c.pow(l,i);if(!c.eql(c.sqr(d),l))throw new Error("Cannot find square root");return d}}let s=(t+He)/as;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,d=a.pow(a.mul(a.ONE,o),t),u=a.pow(c,s),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let h=1;for(let g=a.sqr(f);h<l&&!a.eql(g,a.ONE);h++)g=a.sqr(g);let p=a.pow(d,He<<BigInt(l-h-1));d=a.sqr(p),u=a.mul(u,p),f=a.mul(f,d),l=h}return u}}function yx(r){if(r%vh===hx){let e=(r+He)/vh;return function(n,o){let s=n.pow(o,e);if(!n.eql(n.sqr(s),o))throw new Error("Cannot find square root");return s}}if(r%Fm===Um){let e=(r-Um)/Fm;return function(n,o){let s=n.mul(o,as),i=n.pow(s,e),a=n.mul(o,i),c=n.mul(n.mul(a,as),i),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%mx,gx(r)}var Vm=(r,e)=>(Re(r,e)&He)===He,wx=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Rh(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=wx.reduce((n,o)=>(n[o]="function",n),e);return Rr(r,t)}function Ex(r,e,t){if(t<dt)throw new Error("Expected power > 0");if(t===dt)return r.ONE;if(t===He)return e;let n=r.ONE,o=e;for(;t>dt;)t&He&&(n=r.mul(n,o)),o=r.sqr(o),t>>=He;return n}function bx(r,e){let t=new Array(e.length),n=e.reduce((s,i,a)=>r.is0(i)?s:(t[a]=s,r.mul(s,i)),r.ONE),o=r.inv(n);return e.reduceRight((s,i,a)=>r.is0(i)?s:(t[a]=r.mul(s,t[a]),r.mul(s,i)),o),t}function Ah(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function ho(r,e,t=!1,n={}){if(r<=dt)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:s}=Ah(r,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=yx(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:s,MASK:ca(o),ZERO:dt,ONE:He,create:c=>Re(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return dt<=c&&c<r},is0:c=>c===dt,isOdd:c=>(c&He)===He,neg:c=>Re(-c,r),eql:(c,l)=>c===l,sqr:c=>Re(c*c,r),add:(c,l)=>Re(c+l,r),sub:(c,l)=>Re(c-l,r),mul:(c,l)=>Re(c*l,r),pow:(c,l)=>Ex(a,c,l),div:(c,l)=>Re(c*Yc(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Yc(c,r),sqrt:n.sqrt||(c=>i(a,c)),invertBatch:c=>bx(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?kn(c,s):fo(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return t?Hr(c):Cn(c)}});return Object.freeze(a)}function Km(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function Ih(r){let e=Km(r);return e+Math.ceil(e/2)}function $m(r,e,t=!1){let n=r.length,o=Km(e),s=Ih(e);if(n<16||n<s||n>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let i=t?Cn(r):Hr(r),a=Re(i,e-He)+He;return t?kn(a,o):fo(a,o)}var _x=BigInt(0),Th=BigInt(1),Ch=new WeakMap,Hm=new WeakMap;function Xc(r,e){let t=(s,i)=>{let a=i.negate();return s?a:i},n=s=>{if(!Number.isSafeInteger(s)||s<=0||s>e)throw new Error(`Wrong window size=${s}, should be [1..${e}]`)},o=s=>{n(s);let i=Math.ceil(e/s)+1,a=2**(s-1);return{windows:i,windowSize:a}};return{constTimeNegate:t,unsafeLadder(s,i){let a=r.ZERO,c=s;for(;i>_x;)i&Th&&(a=a.add(c)),c=c.double(),i>>=Th;return a},precomputeWindow(s,i){let{windows:a,windowSize:c}=o(i),l=[],d=s,u=d;for(let f=0;f<a;f++){u=d,l.push(u);for(let h=1;h<c;h++)u=u.add(d),l.push(u);d=u.double()}return l},wNAF(s,i,a){let{windows:c,windowSize:l}=o(s),d=r.ZERO,u=r.BASE,f=BigInt(2**s-1),h=2**s,p=BigInt(s);for(let g=0;g<c;g++){let y=g*l,w=Number(a&f);a>>=p,w>l&&(w-=h,a+=Th);let b=y,E=y+Math.abs(w)-1,x=g%2!==0,T=w<0;w===0?u=u.add(t(x,i[b])):d=d.add(t(T,i[E]))}return{p:d,f:u}},wNAFCached(s,i,a){let c=Hm.get(s)||1,l=Ch.get(s);return l||(l=this.precomputeWindow(s,c),c!==1&&Ch.set(s,a(l))),this.wNAF(c,l,i)},setWindowSize(s,i){n(i),Hm.set(s,i),Ch.delete(s)}}}function Qc(r,e,t,n){if(!Array.isArray(t)||!Array.isArray(n)||n.length!==t.length)throw new Error("arrays of points and scalars must have equal length");n.forEach((d,u)=>{if(!e.isValid(d))throw new Error(`wrong scalar at index ${u}`)}),t.forEach((d,u)=>{if(!(d instanceof r))throw new Error(`wrong point at index ${u}`)});let o=xh(BigInt(t.length)),s=o>12?o-3:o>4?o-2:o?2:1,i=(1<<s)-1,a=new Array(i+1).fill(r.ZERO),c=Math.floor((e.BITS-1)/s)*s,l=r.ZERO;for(let d=c;d>=0;d-=s){a.fill(r.ZERO);for(let f=0;f<n.length;f++){let h=n[f],p=Number(h>>BigInt(d)&BigInt(i));a[p]=a[p].add(t[f])}let u=r.ZERO;for(let f=a.length-1,h=r.ZERO;f>0;f--)h=h.add(a[f]),u=u.add(h);if(l=l.add(u),d!==0)for(let f=0;f<s;f++)l=l.double()}return l}function la(r){return Rh(r.Fp),Rr(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Ah(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var qr=BigInt(0),Xt=BigInt(1),Zc=BigInt(2),vx=BigInt(8),Sx={zip215:!0};function Rx(r){let e=la(r);return Rr(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function qm(r){let e=Rx(r),{Fp:t,n,prehash:o,hash:s,randomBytes:i,nByteLength:a,h:c}=e,l=Zc<<BigInt(a*8)-Xt,d=t.create,u=ho(e.n,e.nBitLength),f=e.uvRatio||((A,R)=>{try{return{isValid:!0,value:t.sqrt(A*t.inv(R))}}catch{return{isValid:!1,value:qr}}}),h=e.adjustScalarBytes||(A=>A),p=e.domain||((A,R,N)=>{if($r("phflag",N),R.length||N)throw new Error("Contexts/pre-hash are not supported");return A});function g(A,R){yt("coordinate "+A,R,qr,l)}function y(A){if(!(A instanceof E))throw new Error("ExtendedPoint expected")}let w=is((A,R)=>{let{ex:N,ey:k,ez:q}=A,W=A.is0();R==null&&(R=W?vx:t.inv(q));let j=d(N*R),ie=d(k*R),ce=d(q*R);if(W)return{x:qr,y:Xt};if(ce!==Xt)throw new Error("invZ was invalid");return{x:j,y:ie}}),b=is(A=>{let{a:R,d:N}=e;if(A.is0())throw new Error("bad point: ZERO");let{ex:k,ey:q,ez:W,et:j}=A,ie=d(k*k),ce=d(q*q),fe=d(W*W),xe=d(fe*fe),Le=d(ie*R),Oe=d(fe*d(Le+ce)),Fe=d(xe+d(N*d(ie*ce)));if(Oe!==Fe)throw new Error("bad point: equation left != right (1)");let Nt=d(k*q),ct=d(W*j);if(Nt!==ct)throw new Error("bad point: equation left != right (2)");return!0});class E{constructor(R,N,k,q){this.ex=R,this.ey=N,this.ez=k,this.et=q,g("x",R),g("y",N),g("z",k),g("t",q),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(R){if(R instanceof E)throw new Error("extended point not allowed");let{x:N,y:k}=R||{};return g("x",N),g("y",k),new E(N,k,Xt,d(N*k))}static normalizeZ(R){let N=t.invertBatch(R.map(k=>k.ez));return R.map((k,q)=>k.toAffine(N[q])).map(E.fromAffine)}static msm(R,N){return Qc(E,u,R,N)}_setWindowSize(R){C.setWindowSize(this,R)}assertValidity(){b(this)}equals(R){y(R);let{ex:N,ey:k,ez:q}=this,{ex:W,ey:j,ez:ie}=R,ce=d(N*ie),fe=d(W*q),xe=d(k*ie),Le=d(j*q);return ce===fe&&xe===Le}is0(){return this.equals(E.ZERO)}negate(){return new E(d(-this.ex),this.ey,this.ez,d(-this.et))}double(){let{a:R}=e,{ex:N,ey:k,ez:q}=this,W=d(N*N),j=d(k*k),ie=d(Zc*d(q*q)),ce=d(R*W),fe=N+k,xe=d(d(fe*fe)-W-j),Le=ce+j,Oe=Le-ie,Fe=ce-j,Nt=d(xe*Oe),ct=d(Le*Fe),Ht=d(xe*Fe),vn=d(Oe*Le);return new E(Nt,ct,vn,Ht)}add(R){y(R);let{a:N,d:k}=e,{ex:q,ey:W,ez:j,et:ie}=this,{ex:ce,ey:fe,ez:xe,et:Le}=R;if(N===BigInt(-1)){let P3=d((W-q)*(fe+ce)),L3=d((W+q)*(fe-ce)),hf=d(L3-P3);if(hf===qr)return this.double();let O3=d(j*Zc*Le),B3=d(ie*Zc*xe),M3=B3+O3,U3=L3+P3,F3=B3-O3,Tw=d(M3*hf),Cw=d(U3*F3),kw=d(M3*F3),Dw=d(hf*U3);return new E(Tw,Cw,Dw,kw)}let Oe=d(q*ce),Fe=d(W*fe),Nt=d(ie*k*Le),ct=d(j*xe),Ht=d((q+W)*(ce+fe)-Oe-Fe),vn=ct-Nt,Zi=ct+Nt,ji=d(Fe-N*Oe),Sw=d(Ht*vn),Rw=d(Zi*ji),Aw=d(Ht*ji),Iw=d(vn*Zi);return new E(Sw,Rw,Iw,Aw)}subtract(R){return this.add(R.negate())}wNAF(R){return C.wNAFCached(this,R,E.normalizeZ)}multiply(R){let N=R;yt("scalar",N,Xt,n);let{p:k,f:q}=this.wNAF(N);return E.normalizeZ([k,q])[0]}multiplyUnsafe(R){let N=R;return yt("scalar",N,qr,n),N===qr?T:this.equals(T)||N===Xt?this:this.equals(x)?this.wNAF(N).p:C.unsafeLadder(this,N)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return C.unsafeLadder(this,n).is0()}toAffine(R){return w(this,R)}clearCofactor(){let{h:R}=e;return R===Xt?this:this.multiplyUnsafe(R)}static fromHex(R,N=!1){let{d:k,a:q}=e,W=t.BYTES;R=Be("pointHex",R,W),$r("zip215",N);let j=R.slice(),ie=R[W-1];j[W-1]=ie&-129;let ce=Hr(j),fe=N?l:t.ORDER;yt("pointHex.y",ce,qr,fe);let xe=d(ce*ce),Le=d(xe-Xt),Oe=d(k*xe-q),{isValid:Fe,value:Nt}=f(Le,Oe);if(!Fe)throw new Error("Point.fromHex: invalid y coordinate");let ct=(Nt&Xt)===Xt,Ht=(ie&128)!==0;if(!N&&Nt===qr&&Ht)throw new Error("Point.fromHex: x=0 and x_0=1");return Ht!==ct&&(Nt=d(-Nt)),E.fromAffine({x:Nt,y:ce})}static fromPrivateKey(R){return I(R).point}toRawBytes(){let{x:R,y:N}=this.toAffine(),k=kn(N,t.BYTES);return k[k.length-1]|=R&Xt?128:0,k}toHex(){return Tn(this.toRawBytes())}}E.BASE=new E(e.Gx,e.Gy,Xt,d(e.Gx*e.Gy)),E.ZERO=new E(qr,Xt,Xt,qr);let{BASE:x,ZERO:T}=E,C=Xc(E,a*8);function v(A){return Re(A,n)}function S(A){return v(Hr(A))}function I(A){let R=a;A=Be("private key",A,R);let N=Be("hashed private key",s(A),2*R),k=h(N.slice(0,R)),q=N.slice(R,2*R),W=S(k),j=x.multiply(W),ie=j.toRawBytes();return{head:k,prefix:q,scalar:W,point:j,pointBytes:ie}}function F(A){return I(A).pointBytes}function O(A=new Uint8Array,...R){let N=Dn(...R);return S(s(p(N,Be("context",A),!!o)))}function B(A,R,N={}){A=Be("message",A),o&&(A=o(A));let{prefix:k,scalar:q,pointBytes:W}=I(R),j=O(N.context,k,A),ie=x.multiply(j).toRawBytes(),ce=O(N.context,ie,W,A),fe=v(j+ce*q);yt("signature.s",fe,qr,n);let xe=Dn(ie,kn(fe,t.BYTES));return Be("result",xe,a*2)}let M=Sx;function D(A,R,N,k=M){let{context:q,zip215:W}=k,j=t.BYTES;A=Be("signature",A,2*j),R=Be("message",R),W!==void 0&&$r("zip215",W),o&&(R=o(R));let ie=Hr(A.slice(j,2*j)),ce,fe,xe;try{ce=E.fromHex(N,W),fe=E.fromHex(A.slice(0,j),W),xe=x.multiplyUnsafe(ie)}catch{return!1}if(!W&&ce.isSmallOrder())return!1;let Le=O(q,fe.toRawBytes(),ce.toRawBytes(),R);return fe.add(ce.multiplyUnsafe(Le)).subtract(xe).clearCofactor().equals(E.ZERO)}return x._setWindowSize(8),{CURVE:e,getPublicKey:F,sign:B,verify:D,ExtendedPoint:E,utils:{getExtendedPublicKey:I,randomPrivateKey:()=>i(t.BYTES),precompute(A=8,R=E.BASE){return R._setWindowSize(A),R.multiply(BigInt(3)),R}}}}var Qs=BigInt(0),kh=BigInt(1);function Ax(r){return Rr(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function Gm(r){let e=Ax(r),{P:t}=e,n=b=>Re(b,t),o=e.montgomeryBits,s=Math.ceil(o/8),i=e.nByteLength,a=e.adjustScalarBytes||(b=>b),c=e.powPminus2||(b=>Sh(b,t-BigInt(2),t));function l(b,E,x){let T=n(b*(E-x));return E=n(E-T),x=n(x+T),[E,x]}let d=(e.a-BigInt(2))/BigInt(4);function u(b,E){yt("u",b,Qs,t),yt("scalar",E,Qs,t);let x=E,T=b,C=kh,v=Qs,S=b,I=kh,F=Qs,O;for(let M=BigInt(o-1);M>=Qs;M--){let D=x>>M&kh;F^=D,O=l(F,C,S),C=O[0],S=O[1],O=l(F,v,I),v=O[0],I=O[1],F=D;let P=C+v,A=n(P*P),R=C-v,N=n(R*R),k=A-N,q=S+I,W=S-I,j=n(W*P),ie=n(q*R),ce=j+ie,fe=j-ie;S=n(ce*ce),I=n(T*n(fe*fe)),C=n(A*N),v=n(k*(A+n(d*k)))}O=l(F,C,S),C=O[0],S=O[1],O=l(F,v,I),v=O[0],I=O[1];let B=c(v);return n(C*B)}function f(b){return kn(n(b),s)}function h(b){let E=Be("u coordinate",b,s);return i===32&&(E[31]&=127),Hr(E)}function p(b){let E=Be("scalar",b),x=E.length;if(x!==s&&x!==i)throw new Error(`Expected ${s} or ${i} bytes, got ${x}`);return Hr(a(E))}function g(b,E){let x=h(E),T=p(b),C=u(x,T);if(C===Qs)throw new Error("Invalid private or public key received");return f(C)}let y=f(e.Gu);function w(b){return g(b,y)}return{scalarMult:g,scalarMultBase:w,getSharedSecret:(b,E)=>g(b,E),getPublicKey:b=>w(b),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:y}}var ua=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),Wm=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),IP=BigInt(0),Ix=BigInt(1),zm=BigInt(2),Tx=BigInt(3),Cx=BigInt(5),kx=BigInt(8);function Ym(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=ua,a=r*r%s*r%s,c=Me(a,zm,s)*a%s,l=Me(c,Ix,s)*r%s,d=Me(l,Cx,s)*l%s,u=Me(d,e,s)*d%s,f=Me(u,t,s)*u%s,h=Me(f,n,s)*f%s,p=Me(h,o,s)*h%s,g=Me(p,o,s)*h%s,y=Me(g,e,s)*d%s;return{pow_p_5_8:Me(y,zm,s)*r%s,b2:a}}function Xm(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function Dx(r,e){let t=ua,n=Re(e*e*e,t),o=Re(n*n*e,t),s=Ym(r*o).pow_p_5_8,i=Re(r*n*s,t),a=Re(e*i*i,t),c=i,l=Re(i*Wm,t),d=a===r,u=a===Re(-r,t),f=a===Re(-r*Wm,t);return d&&(i=c),(u||f)&&(i=l),Vm(i,t)&&(i=Re(-i,t)),{isValid:d||u,value:i}}var Nx=ho(ua,void 0,!0),Px={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Nx,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:kx,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:ns,randomBytes:rs,adjustScalarBytes:Xm,uvRatio:Dx},Zs=qm(Px);var da=Gm({P:ua,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=ua,{pow_p_5_8:t,b2:n}=Ym(r);return Re(Me(t,Tx,e)*n,e)},adjustScalarBytes:Xm,randomBytes:rs});var js=32,Nn=64,jc=32;function Qm(){let r=Zs.utils.randomPrivateKey(),e=Zs.getPublicKey(r);return{privateKey:e4(r,e),publicKey:e}}function Zm(r){if(r.length!==jc)throw new TypeError('"seed" must be 32 bytes in length.');if(!(r instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=r,t=Zs.getPublicKey(e);return{privateKey:e4(e,t),publicKey:t}}function jm(r,e){let t=r.subarray(0,jc);return Zs.sign(e instanceof Uint8Array?e:e.subarray(),t)}function Jm(r,e,t){return Zs.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function e4(r,e){let t=new Uint8Array(Nn);for(let n=0;n<jc;n++)t[n]=r[n],t[jc+n]=e[n];return t}var Dh={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Jc(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",s=r?.saltLength??16,i=r?.iterations??32767,a=$e.get();t*=8;async function c(u,f){let h=a.getRandomValues(new Uint8Array(s)),p=a.getRandomValues(new Uint8Array(n)),g={name:e,iv:p};typeof f=="string"&&(f=L(f));let y;if(f.length===0){y=await a.subtle.importKey("jwk",Dh,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},E=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(b,E,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",Dh,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},E=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(b,E,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(g,y,u);return ve([h,g.iv,new Uint8Array(w)])}async function l(u,f){let h=u.subarray(0,s),p=u.subarray(s,s+n),g=u.subarray(s+n),y={name:e,iv:p};typeof f=="string"&&(f=L(f));let w;if(f.length===0)try{let E={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},x=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(E,x,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",Dh,{name:"AES-GCM"},!0,["decrypt"])}else{let E={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},x=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(E,x,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(y,w,g);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}async function Js(r,e){let n=await Jc().encrypt(r,e);return ot.encode(n)}var ei={};Ye(ei,{KeyType:()=>Ue,PrivateKey:()=>Wr,PublicKey:()=>Gr});var Ue;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.Secp256k1="Secp256k1"})(Ue||(Ue={}));var Nh;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.Secp256k1=2]="Secp256k1"})(Nh||(Nh={}));(function(r){r.codec=()=>Ke(Nh)})(Ue||(Ue={}));var Gr;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ue.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Ue.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Gr||(Gr={}));var Wr;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ue.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Ue.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Wr||(Wr={}));var cs=class{_key;constructor(e){this._key=ti(e,js)}verify(e,t){return Jm(this._key,t,e)}marshal(){return this._key}get bytes(){return Gr.encode({Type:Ue.Ed25519,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=ke.digest(this.bytes);return Sr(e)?e.then(({bytes:t})=>t):e.bytes}},Pn=class{_key;_publicKey;constructor(e,t){this._key=ti(e,Nn),this._publicKey=ti(t,js)}sign(e){return jm(this._key,e)}get public(){return new cs(this._publicKey)}marshal(){return this._key}get bytes(){return Wr.encode({Type:Ue.Ed25519,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}async hash(){let e=ke.digest(this.bytes),t;return Sr(e)?{bytes:t}=await e:t=e.bytes,t}async id(){let e=Mt.digest(this.public.bytes);return We.encode(e.bytes).substring(1)}async export(e,t="libp2p-key"){if(t==="libp2p-key")return Js(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function Ox(r){if(r.length>Nn){r=ti(r,Nn+js);let n=r.subarray(0,Nn),o=r.subarray(Nn,r.length);return new Pn(n,o)}r=ti(r,Nn);let e=r.subarray(0,Nn),t=r.subarray(js);return new Pn(e,t)}function Bx(r){return r=ti(r,js),new cs(r)}async function Mx(){let{privateKey:r,publicKey:e}=Qm();return new Pn(r,e)}async function Ph(r){let{privateKey:e,publicKey:t}=Zm(r);return new Pn(e,t)}function ti(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new m(`Key must be a Uint8Array of length ${e}, got ${r.length}`,"ERR_INVALID_KEY_TYPE");return r}var r4={"P-256":256,"P-384":384,"P-521":521},Ux=Object.keys(r4),Oh=Ux.join(" / ");async function n4(r){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new m(`Unknown curve: ${r}. Must be ${Oh}`,"ERR_INVALID_CURVE");let e=await $e.get().subtle.generateKey({name:"ECDH",namedCurve:r},!0,["deriveBits"]),t=async(s,i)=>{let a;i!=null?a=await $e.get().subtle.importKey("jwk",Vx(r,i),{name:"ECDH",namedCurve:r},!1,["deriveBits"]):a=e.privateKey;let c=await $e.get().subtle.importKey("jwk",s4(r,s),{name:"ECDH",namedCurve:r},!1,[]),l=await $e.get().subtle.deriveBits({name:"ECDH",namedCurve:r,public:c},a,r4[r]);return new Uint8Array(l,0,l.byteLength)},n=await $e.get().subtle.exportKey("jwk",e.publicKey);return{key:Fx(n),genSharedKey:t}}var o4={"P-256":32,"P-384":48,"P-521":66};function Fx(r){if(r.crv==null||r.x==null||r.y==null)throw new m("JWK was missing components","ERR_INVALID_PARAMETERS");if(r.crv!=="P-256"&&r.crv!=="P-384"&&r.crv!=="P-521")throw new m(`Unknown curve: ${r.crv}. Must be ${Oh}`,"ERR_INVALID_CURVE");let e=o4[r.crv];return ve([Uint8Array.from([4]),hh(r.x,e),hh(r.y,e)],1+e*2)}function s4(r,e){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new m(`Unknown curve: ${r}. Must be ${Oh}`,"ERR_INVALID_CURVE");let t=o4[r];if(!J(e.subarray(0,1),Uint8Array.from([4])))throw new m("Cannot unmarshal public key - invalid key format","ERR_INVALID_KEY_FORMAT");return{kty:"EC",crv:r,x:U(e.subarray(1,t+1),"base64url"),y:U(e.subarray(1+t),"base64url"),ext:!0}}var Vx=(r,e)=>({...s4(r,e.public),d:U(e.private,"base64url")});var i4=n4;async function a4(r,e){let t=ot.decode(r);return Jc().decrypt(t,e)}var c4={"AES-128":{ivSize:16,keySize:16},"AES-256":{ivSize:16,keySize:32},Blowfish:{ivSize:8,keySize:32}};async function l4(r,e,t){let n=c4[r];if(n==null){let b=Object.keys(c4).join(" / ");throw new m(`unknown cipher type '${r}'. Must be ${b}`,"ERR_INVALID_CIPHER_TYPE")}if(e==null)throw new m("missing hash type","ERR_MISSING_HASH_TYPE");let o=n.keySize,s=n.ivSize,i=20,a=L("key expansion"),c=2*(s+o+i),l=await km(e,t),d=await l.digest(a),u=[],f=0;for(;f<c;){let b=await l.digest(ve([d,a])),E=b.length;f+E>c&&(E=c-f),u.push(b),f+=E,d=await l.digest(d)}let h=c/2,p=ve(u),g=p.subarray(0,h),y=p.subarray(h,c),w=b=>({iv:b.subarray(0,s),cipherKey:b.subarray(s,s+o),macKey:b.subarray(s+o)});return{k1:w(g),k2:w(y)}}var Wh={};Ye(Wh,{MAX_RSA_KEY_SIZE:()=>ds,RsaPrivateKey:()=>Eo,RsaPublicKey:()=>us,fromJwk:()=>u_,generateKeyPair:()=>d_,unmarshalRsaPrivateKey:()=>qh,unmarshalRsaPublicKey:()=>l_});function je(r){if(isNaN(r)||r<=0)throw new m("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return rs(r)}var wo={};Ye(wo,{exportToPem:()=>s_,importFromPem:()=>Hh,jwkToPkcs1:()=>t_,jwkToPkix:()=>n_,pkcs1ToJwk:()=>e_,pkixToJwk:()=>r_});var el=class extends zs{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,Jo(e);let n=Kr(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,s=new Uint8Array(o);s.set(n.length>o?e.create().update(n).digest():n);for(let i=0;i<s.length;i++)s[i]^=54;this.iHash.update(s),this.oHash=e.create();for(let i=0;i<s.length;i++)s[i]^=106;this.oHash.update(s),s.fill(0)}update(e){return Ws(this),this.iHash.update(e),this}digestInto(e){Ws(this),Gs(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},po=(r,e,t)=>new el(r,e).update(t).digest();po.create=(r,e)=>new el(r,e);function u4(r,e,t,n){Jo(r);let o=Lm({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(io(s),io(i),io(a),s<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=Kr(e),l=Kr(t),d=new Uint8Array(i),u=po.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function d4(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function f4(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=u4(r,e,t,n),l,d=new Uint8Array(4),u=ts(d),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<s;h++,p+=a.outputLen){let g=i.subarray(p,p+a.outputLen);u.setInt32(0,h,!1),(l=c._cloneInto(l)).update(d).digestInto(f),g.set(f.subarray(0,g.length));for(let y=1;y<o;y++){a._cloneInto(l).update(f).digestInto(f);for(let w=0;w<g.length;w++)g[w]^=f[w]}}return d4(a,c,i,l,f)}async function Bh(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=u4(r,e,t,n),d,u=new Uint8Array(4),f=ts(u),h=new Uint8Array(c.outputLen);for(let p=1,g=0;g<s;p++,g+=c.outputLen){let y=a.subarray(g,g+c.outputLen);f.setInt32(0,p,!1),(d=l._cloneInto(d)).update(u).digestInto(h),y.set(h.subarray(0,y.length)),await Nm(o-1,i,()=>{c._cloneInto(d).update(h).digestInto(h);for(let w=0;w<y.length;w++)y[w]^=h[w]})}return d4(c,l,a,d,h)}var ge=nt(h4());function ls(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function mo(r,e,t=-1){let n=t,o=r,s=0,i=Math.pow(2,e);for(let a=1;a<8;a++){if(r<i){let c;if(n<0)c=new ArrayBuffer(a),s=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),s=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[s-d-1]=Math.floor(o/u),o-=l[s-d-1]*u}return c}i*=Math.pow(2,e)}return new ArrayBuffer(0)}function nl(...r){let e=0,t=0;for(let s of r)e+=s.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let s of r)o.set(s,t),t+=s.length;return o}function Uh(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=ls(t,8),o=new ArrayBuffer(this.valueHex.byteLength),s=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)s[a]=r[a];return s[0]&=127,ls(s,8)-n}function p4(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let i=t-e,a=mo(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=mo(e,8,n),s=new Uint8Array(o);if(s[0]&128){let i=o.slice(0),a=new Uint8Array(i);o=new ArrayBuffer(o.byteLength+1),s=new Uint8Array(o);for(let c=0;c<i.byteLength;c++)s[c+1]=a[c];s[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function m4(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function Qt(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let i=0;i<n;i++)o[i]="0";return o.join("").concat(t)}var mL=Math.log(2);function ol(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function Fh(r){let e=0,t=0;for(let o=0;o<r.length;o++){let s=r[o];e+=s.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let s=r[o];n.set(new Uint8Array(s),t),t+=s.byteLength}return n.buffer}function Un(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var ha=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return Fh(this.items)}},fa=[new Uint8Array([1])],g4="0123456789";var oi="",Yr=new ArrayBuffer(0),Vh=new Uint8Array(0),pa="EndOfContent",w4="OCTET STRING",E4="BIT STRING";function Fn(r){var e;return e=class extends r{constructor(...n){var o;super(...n);let s=n[0]||{};this.isHexOnly=(o=s.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=s.valueHex?ge.BufferSourceConverter.toUint8Array(s.valueHex):Vh}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Un(this,i,o,s))return-1;let a=o+s;return this.valueHexView=i.subarray(o,a),this.valueHexView.length?(this.blockLength=s,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",Yr)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ge.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var On=class{constructor({blockLength:e=0,error:t=oi,warnings:n=[],valueBeforeDecode:o=Vh}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ge.BufferSourceConverter.toUint8Array(o)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ge.Convert.ToHex(this.valueBeforeDecodeView)}}};On.NAME="baseBlock";var kt=class extends On{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};kt.NAME="valueBlock";var sl=class extends Fn(On){constructor({idBlock:e={}}={}){var t,n,o,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ge.BufferSourceConverter.toUint8Array(e.valueHex):Vh,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(s=e.isConstructed)!==null&&s!==void 0?s:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",Yr}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let s=this.tagNumber;s&=31,t|=s,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=mo(this.tagNumber,7),s=new Uint8Array(o),i=o.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=s[c]|128;a[i]=s[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let s=0;s<o.length-1;s++)n[s+1]=o[s]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ge.BufferSourceConverter.toUint8Array(e);if(!Un(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;switch(s[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(s[0]&32)===32,this.isHexOnly=!1;let a=s[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;s[c]&128;){if(l[c-1]=s[c]&127,c++,c>=s.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let f=new Uint8Array(d);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=s[c]&127;let u=new Uint8Array(c);for(let f=0;f<c;f++)u[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=ls(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};sl.NAME="identificationBlock";var il=class extends On{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=ge.BufferSourceConverter.toUint8Array(e);if(!Un(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;if(s[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=s[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(s[0]&128),this.longFormUsed===!1)return this.length=s[0],this.blockLength=1,t+this.blockLength;let i=s[0]&127;if(i>8)return this.error="Too big integer",-1;if(i+1>s.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+i);return c[i-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=ls(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=i+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=mo(this.length,8);if(o.byteLength>127)return this.error="Too big length",Yr;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let s=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let i=0;i<o.byteLength;i++)n[i+1]=s[i];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};il.NAME="lengthBlock";var z={},wt=class extends On{constructor({name:e=oi,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new sl(o),this.lenBlock=new il(o),this.valueBlock=s?new s(o):new kt(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new ha;t||b4(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let s=this.valueBlock.toBER(e);this.lenBlock.length=s.byteLength;let i=this.lenBlock.toBER(e);n.write(i),n.write(s)}return t?Yr:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():ge.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${ge.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return m4(t,n)}};wt.NAME="BaseBlock";function b4(r){if(r instanceof z.Constructed)for(let e of r.valueBlock.value)b4(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var al=class extends wt{constructor({value:e=oi,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};al.NAME="BaseStringBlock";var cl=class extends Fn(kt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};cl.NAME="PrimitiveValueBlock";var x4,ll=class extends wt{constructor(e={}){super(e,cl),this.idBlock.isConstructed=!1}};x4=ll;z.Primitive=x4;ll.NAME="PRIMITIVE";function Xx(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function $l(r,e=0,t=r.length){let n=e,o=new wt({},kt),s=new On;if(!Un(s,r,e,t))return o.error=s.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=wt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=z.EndOfContent;break;case 1:c=z.Boolean;break;case 2:c=z.Integer;break;case 3:c=z.BitString;break;case 4:c=z.OctetString;break;case 5:c=z.Null;break;case 6:c=z.ObjectIdentifier;break;case 10:c=z.Enumerated;break;case 12:c=z.Utf8String;break;case 13:c=z.RelativeObjectIdentifier;break;case 14:c=z.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=z.Sequence;break;case 17:c=z.Set;break;case 18:c=z.NumericString;break;case 19:c=z.PrintableString;break;case 20:c=z.TeletexString;break;case 21:c=z.VideotexString;break;case 22:c=z.IA5String;break;case 23:c=z.UTCTime;break;case 24:c=z.GeneralizedTime;break;case 25:c=z.GraphicString;break;case 26:c=z.VisibleString;break;case 27:c=z.GeneralString;break;case 28:c=z.UniversalString;break;case 29:c=z.CharacterString;break;case 30:c=z.BmpString;break;case 31:c=z.DATE;break;case 32:c=z.TimeOfDay;break;case 33:c=z.DateTime;break;case 34:c=z.Duration;break;default:{let l=o.idBlock.isConstructed?new z.Constructed:new z.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?z.Constructed:z.Primitive}return o=Xx(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function si(r){if(!r.byteLength){let e=new wt({},kt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return $l(ge.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function Qx(r,e){return r?1:e}var hn=class extends kt{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=ge.BufferSourceConverter.toUint8Array(e);if(!Un(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let s=t;for(;Qx(this.isIndefiniteForm,n)>0;){let i=$l(o,s,n);if(i.offset===-1)return this.error=i.result.error,this.warnings.concat(i.result.warnings),-1;if(s=i.offset,this.blockLength+=i.result.blockLength,n-=i.result.blockLength,this.value.push(i.result),this.isIndefiniteForm&&i.result.constructor.NAME===pa)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===pa?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new ha;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Yr:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};hn.NAME="ConstructedValueBlock";var _4,go=class extends wt{constructor(e={}){super(e,hn),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
4
4
  `).map(o=>` ${o}`).join(`
5
5
  `));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
6
6
  ${e.join(`
7
- `)}`:`${t} :`}};cm=uo;z.Constructed=cm;uo.NAME="CONSTRUCTED";var sl=class extends Dt{fromBER(e,t,n){return t}toBER(e){return zr}};sl.override="EndOfContentValueBlock";var lm,il=class extends wt{constructor(e={}){super(e,sl),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};lm=il;z.EndOfContent=lm;il.NAME=da;var um,fo=class extends wt{constructor(e={}){super(e,Dt),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};um=fo;z.Null=um;fo.NAME="NULL";var al=class extends Mn(Dt){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return Bn(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,Sh.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};al.NAME="BooleanValueBlock";var dm,cl=class extends wt{constructor(e={}){super(e,al),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};dm=cl;z.Boolean=dm;cl.NAME="BOOLEAN";var ll=class extends Mn(dn){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=dn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let s=0;s<this.value.length;s++){let i=this.value[s].constructor.NAME;if(i===da){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==om)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?dn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};ll.NAME="OctetStringValueBlock";var fm,Ln=class r extends wt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},ll),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(s.byteLength){let i=Ml(s,0,s.byteLength);i.offset!==-1&&i.offset===n&&(this.valueBlock.value=[i.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?uo.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof r&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};fm=Ln;z.OctetString=fm;Ln.NAME=om;var ul=class extends Mn(dn){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=dn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===da){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==sm)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let s=ye.BufferSourceConverter.toUint8Array(e);if(!Bn(this,s,t,n))return-1;let i=s.subarray(t,t+n);if(this.unusedBits=i[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=i.subarray(1);try{if(a.byteLength){let c=Ml(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=i.subarray(1),this.blockLength=i.length,t+n}toBER(e,t){if(this.isConstructed)return dn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return zr;let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};ul.NAME="BitStringValueBlock";var hm,ti=class extends wt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},ul),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return uo.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let o of t)e.push(o.toString(2).padStart(8,"0"));let n=e.join("");return`${this.constructor.NAME} : ${n.substring(0,n.length-this.valueBlock.unusedBits)}`}}};hm=ti;z.BitString=hm;ti.NAME=sm;var pm;function Ux(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<i?i:c,u=0;for(let h=d;h>=0;h--,u++){switch(!0){case u<a.length:l=s[i-u]+a[c-u]+t[0];break;default:l=s[i-u]+t[0]}switch(t[0]=l/10,!0){case u>=s.length:s=jc(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=jc(t,s)),s}function nm(r){if(r>=la.length)for(let e=la.length;e<=r;e++){let t=new Uint8Array([0]),n=la[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let s=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=s[0]/10,n[o]=s[0]%10}t[0]>0&&(n=jc(t,n)),la.push(n)}return la[r]}function Fx(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=s[i-d]-a[c-d]-t,!0){case l<0:t=1,s[i-d]=l+10;break;default:t=0,s[i-d]=l}if(t>0)for(let u=i-c+1;u>=0;u--,d++)if(l=s[i-d]-t,l<0)t=1,s[i-d]=l+10;else{t=0,s[i-d]=l;break}return s.slice()}var fa=class extends Mn(Dt){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=Sh.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(em(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let s=this.fromBER(e,t,n);if(s===-1)return s;let i=this.valueHexView;return i[0]===0&&i[1]&128?this.valueHexView=i.subarray(1):o!==0&&i.length<o&&(o-i.length>1&&(o=i.length+1),this.valueHexView=i.subarray(o-i.length)),s}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,s=this.valueHexView,i="",a=!1;for(let c=s.byteLength-1;c>=0;c--){o=s[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=Fx(nm(n),t),i="-";break;default:t=Ux(t,nm(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=rm.charAt(t[c]));return a===!1&&(i+=rm.charAt(0)),i}};pm=fa;fa.NAME="IntegerValueBlock";Object.defineProperty(pm.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var mm,at=class r extends wt{constructor(e={}){super(e,fa),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Jc(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Jc();let t=BigInt(e),n=new ua,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,d=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else s[0]&128&&n.write(new Uint8Array([0])),n.write(s);return new r({valueHex:n.final()})}convertToDER(){let e=new r({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new r({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};mm=at;z.Integer=mm;at.NAME="INTEGER";var gm,dl=class extends at{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};gm=dl;z.Enumerated=gm;dl.NAME="ENUMERATED";var ha=class extends Mn(Dt){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!Bn(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=os(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Jc();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=lo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",zr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}return n}toString(){let e="";if(this.isHexOnly)e=ye.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};ha.NAME="sidBlock";var fl=class extends Dt{constructor({value:e=ri,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new ha;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.value.length===0&&(s.isFirstSid=!0),this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,zr;t.push(o)}return Rh(t)}fromString(e){this.value=[];let t=0,n=0,o="",s=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,s){let i=this.value[0],a=0;switch(i.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;i.valueDec=c+a,s=!1}else{let i=new ha;if(o>Number.MAX_SAFE_INTEGER){Jc();let a=BigInt(o);i.valueBigInt=a}else if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return;this.value.length||(i.isFirstSid=!0,s=!0),this.value.push(i)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};fl.NAME="ObjectIdentifierValueBlock";var ym,Wr=class extends wt{constructor(e={}){super(e,fl),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};ym=Wr;z.ObjectIdentifier=ym;Wr.NAME="OBJECT IDENTIFIER";var pa=class extends Mn(Pn){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!Bn(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=os(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=lo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",zr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}return n.buffer}toString(){let e="";return this.isHexOnly?e=ye.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};pa.NAME="relativeSidBlock";var hl=class extends Dt{constructor({value:e=ri,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new pa;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let s=this.value[o].toBER(e);if(s.byteLength===0)return this.error=this.value[o].error,zr;n.push(s)}return Rh(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let s=new pa;if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return!0;this.value.push(s)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};hl.NAME="RelativeObjectIdentifierValueBlock";var wm,pl=class extends wt{constructor(e={}){super(e,hl),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};wm=pl;z.RelativeObjectIdentifier=wm;pl.NAME="RelativeObjectIdentifier";var Em,pt=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};Em=pt;z.Sequence=Em;pt.NAME="SEQUENCE";var bm,ml=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};bm=ml;z.Set=bm;ml.NAME="SET";var gl=class extends Mn(Dt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ri}toJSON(){return{...super.toJSON(),value:this.value}}};gl.NAME="StringValueBlock";var yl=class extends gl{};yl.NAME="SimpleStringValueBlock";var Ut=class extends rl{constructor({...e}={}){super(e,yl)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Ut.NAME="SIMPLE STRING";var wl=class extends Ut{fromBuffer(e){this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=ye.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=ye.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf8String(e)),this.valueBlock.value=e}};wl.NAME="Utf8StringValueBlock";var xm,On=class extends wl{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};xm=On;z.Utf8String=xm;On.NAME="UTF8String";var El=class extends Ut{fromBuffer(e){this.valueBlock.value=ye.Convert.ToUtf16String(e),this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf16String(e))}};El.NAME="BmpStringValueBlock";var _m,bl=class extends El{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};_m=bl;z.BmpString=_m;bl.NAME="BMPString";var xl=class extends Ut{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let s=lo(e.charCodeAt(o),8),i=new Uint8Array(s);if(i.length>4)continue;let a=4-i.length;for(let c=i.length-1;c>=0;c--)n[o*4+c+a]=i[c]}this.valueBlock.value=e}};xl.NAME="UniversalStringValueBlock";var vm,_l=class extends xl{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};vm=_l;z.UniversalString=vm;_l.NAME="UniversalString";var Sm,vl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};Sm=vl;z.NumericString=Sm;vl.NAME="NumericString";var Rm,Sl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};Rm=Sl;z.PrintableString=Rm;Sl.NAME="PrintableString";var Am,Rl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};Am=Rl;z.TeletexString=Am;Rl.NAME="TeletexString";var Im,Al=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};Im=Al;z.VideotexString=Im;Al.NAME="VideotexString";var Tm,Il=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};Tm=Il;z.IA5String=Tm;Il.NAME="IA5String";var Cm,Tl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Cm=Tl;z.GraphicString=Cm;Tl.NAME="GraphicString";var km,ma=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};km=ma;z.VisibleString=km;ma.NAME="VisibleString";var Dm,Cl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Dm=Cl;z.GeneralString=Dm;Cl.NAME="GeneralString";var Nm,kl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};Nm=kl;z.CharacterString=Nm;kl.NAME="CharacterString";var Pm,ga=class extends ma{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=Wt(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=Wt(this.month,2),t[2]=Wt(this.day,2),t[3]=Wt(this.hour,2),t[4]=Wt(this.minute,2),t[5]=Wt(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};Pm=ga;z.UTCTime=Pm;ga.NAME="UTCTime";var Lm,Dl=class extends ga{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(e){let t=!1,n="",o="",s=0,i,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,h=n.indexOf("+"),f="";if(h===-1&&(h=n.indexOf("-"),u=-1),h!==-1){if(f=n.substring(h+1),n=n.substring(0,h),f.length!==2&&f.length!==4)throw new Error("Wrong input string for conversion");let p=parseInt(f.substring(0,2),10);if(isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");if(a=u*p,f.length===4){if(p=parseInt(f.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=u*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");s=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(i=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*s;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=i.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(Wt(this.year,4)),t.push(Wt(this.month,2)),t.push(Wt(this.day,2)),t.push(Wt(this.hour,2)),t.push(Wt(this.minute,2)),t.push(Wt(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(Wt(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Lm=Dl;z.GeneralizedTime=Lm;Dl.NAME="GeneralizedTime";var Om,Nl=class extends On{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};Om=Nl;z.DATE=Om;Nl.NAME="DATE";var Bm,Pl=class extends On{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Bm=Pl;z.TimeOfDay=Bm;Pl.NAME="TimeOfDay";var Mm,Ll=class extends On{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Mm=Ll;z.DateTime=Mm;Ll.NAME="DateTime";var Um,Ol=class extends On{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};Um=Ol;z.Duration=Um;Ol.NAME="Duration";var Fm,Bl=class extends On{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};Fm=Bl;z.TIME=Fm;Bl.NAME="TIME";function Kx(r){let{result:e}=ni(r),t=e.valueBlock.value;return{n:B(fn(t[1].toBigInt()),"base64url"),e:B(fn(t[2].toBigInt()),"base64url"),d:B(fn(t[3].toBigInt()),"base64url"),p:B(fn(t[4].toBigInt()),"base64url"),q:B(fn(t[5].toBigInt()),"base64url"),dp:B(fn(t[6].toBigInt()),"base64url"),dq:B(fn(t[7].toBigInt()),"base64url"),qi:B(fn(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function $x(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new pt({value:[new at({value:0}),at.fromBigInt(hn(L(r.n,"base64url"))),at.fromBigInt(hn(L(r.e,"base64url"))),at.fromBigInt(hn(L(r.d,"base64url"))),at.fromBigInt(hn(L(r.p,"base64url"))),at.fromBigInt(hn(L(r.q,"base64url"))),at.fromBigInt(hn(L(r.dp,"base64url"))),at.fromBigInt(hn(L(r.dq,"base64url"))),at.fromBigInt(hn(L(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function Hx(r){let{result:e}=ni(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:B(fn(t[0].toBigInt()),"base64url"),e:B(fn(t[1].toBigInt()),"base64url")}}function qx(r){if(r.n==null||r.e==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new pt({value:[new pt({value:[new Wr({value:"1.2.840.113549.1.1.1"}),new fo]}),new ti({valueHex:new pt({value:[at.fromBigInt(hn(L(r.n,"base64url"))),at.fromBigInt(hn(L(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function fn(r){let e=r.toString(16);e.length%2>0&&(e=`0${e}`);let t=e.length/2,n=new Uint8Array(t),o=0,s=0;for(;o<t;)n[o]=parseInt(e.slice(s,s+2),16),o+=1,s+=2;return n}function hn(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}var Gx=16,Ih=32,Th=1e4;async function Wx(r,e){let t=$e.get(),o=new pt({value:[new at({value:0}),new pt({value:[new Wr({value:"1.2.840.113549.1.1.1"}),new fo]}),new Ln({valueHex:r.marshal()})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=it(Gx),a=await _h(es,e,i,{c:Th,dkLen:Ih}),c=it(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,s),u=new pt({value:[new Ln({valueHex:i}),new at({value:Th}),new at({value:Ih}),new pt({value:[new Wr({value:"1.2.840.113549.2.11"}),new fo]})]}),h=new pt({value:[new Wr({value:"1.2.840.113549.1.5.13"}),new pt({value:[new pt({value:[new Wr({value:"1.2.840.113549.1.5.12"}),u]}),new pt({value:[new Wr({value:"2.16.840.1.101.3.4.1.42"}),new Ln({valueHex:c})]})]})]}),p=new pt({value:[h,new Ln({valueHex:d})]}).toBER(),m=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...B(m,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
8
- `)}async function Ch(r,e){let t=$e.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let o=L(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ni(o),{iv:i,salt:a,iterations:c,keySize:l,cipherText:d}=zx(s),u=await _h(es,e,a,{c,dkLen:l}),h=await t.subtle.importKey("raw",u,"AES-CBC",!1,["decrypt"]),f=ya(await t.subtle.decrypt({name:"AES-CBC",iv:i},h,d)),{result:p}=ni(f);n=Vm(p)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let o=L(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ni(o);n=Vm(s)}else throw new g("Could not parse private key from PEM data","ERR_INVALID_PARAMETERS");return kh(n)}function zx(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new g("Only pkcs5PBES2 encrypted private keys are supported","ERR_INVALID_PARAMS");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new g("Only pkcs5PBKDF2 key derivation functions are supported","ERR_INVALID_PARAMS");let s=n.valueBlock.value[1],i=ya(s.valueBlock.value[0].getValue()),a=Th,c=Ih;if(s.valueBlock.value.length===3)a=Number(s.valueBlock.value[1].toBigInt()),c=Number(s.valueBlock.value[2].toBigInt());else if(s.valueBlock.value.length===2)throw new g("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key","ERR_INVALID_PARAMS");let l=e.valueBlock.value[1].valueBlock.value[1],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new g("Only AES-CBC encryption schemes are supported","ERR_INVALID_PARAMS")}}}}let u=ya(l.valueBlock.value[1].getValue());return{cipherText:ya(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function Vm(r){return ya(r.valueBlock.value[2].getValue())}function ya(r){return new Uint8Array(r,0,r.byteLength)}async function Km(r){let e=await $e.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await qm(e);return{privateKey:t[0],publicKey:t[1]}}async function Dh(r){let t=[await $e.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await Yx(r)],n=await qm({privateKey:t[0],publicKey:t[1]});return{privateKey:n[0],publicKey:n[1]}}async function $m(r,e){let t=await $e.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await $e.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function Hm(r,e,t){let n=await $e.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return $e.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function qm(r){if(r.privateKey==null||r.publicKey==null)throw new g("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([$e.get().subtle.exportKey("jwk",r.privateKey),$e.get().subtle.exportKey("jwk",r.publicKey)])}async function Yx(r){return $e.get().subtle.importKey("jwk",{kty:r.kty,n:r.n,e:r.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function Ul(r){if(r.kty!=="RSA")throw new g("invalid key type","ERR_INVALID_KEY_TYPE");if(r.n==null)throw new g("invalid key modulus","ERR_INVALID_KEY_MODULUS");return L(r.n,"base64url").length*8}var is=8192,ss=class{_key;constructor(e){this._key=e}verify(e,t){return Hm(this._key,t,e)}marshal(){return ho.jwkToPkix(this._key)}get bytes(){return qr.encode({Type:Fe.RSA,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return vr(e)?e.then(({bytes:t})=>t):e.bytes}},po=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t}genSecret(){return it(16)}sign(e){return $m(this._key,e)}get public(){if(this._publicKey==null)throw new g("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new ss(this._publicKey)}marshal(){return ho.jwkToPkcs1(this._key)}get bytes(){return Gr.encode({Type:Fe.RSA,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return vr(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return B(e,"base58btc")}async export(e,t="pkcs-8"){if(t==="pkcs-8")return ho.exportToPem(this,e);if(t==="libp2p-key")return Zs(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};async function kh(r){let e=ho.pkcs1ToJwk(r);if(Ul(e)>is)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await Dh(e);return new po(t.privateKey,t.publicKey)}function Qx(r){let e=ho.pkixToJwk(r);if(Ul(e)>is)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new ss(e)}async function Zx(r){if(Ul(r)>is)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await Dh(r);return new po(e.privateKey,e.publicKey)}async function jx(r){if(r>is)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await Km(r);return new po(e.privateKey,e.publicKey)}var Mh={};Ye(Mh,{Secp256k1PrivateKey:()=>ls,Secp256k1PublicKey:()=>cs,generateKeyPair:()=>d_,unmarshalSecp256k1PrivateKey:()=>l_,unmarshalSecp256k1PublicKey:()=>u_});var Jx=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),mo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),go=new Uint32Array(64),Ph=class extends no{constructor(){super(64,32,8,!1),this.A=mo[0]|0,this.B=mo[1]|0,this.C=mo[2]|0,this.D=mo[3]|0,this.E=mo[4]|0,this.F=mo[5]|0,this.G=mo[6]|0,this.H=mo[7]|0}get(){let{A:e,B:t,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[e,t,n,o,s,i,a,c]}set(e,t,n,o,s,i,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)go[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let h=go[u-15],f=go[u-2],p=Vr(h,7)^Vr(h,18)^h>>>3,m=Vr(f,17)^Vr(f,19)^f>>>10;go[u]=m+go[u-7]+p+go[u-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let h=Vr(a,6)^Vr(a,11)^Vr(a,25),f=d+h+Uc(a,c,l)+Jx[u]+go[u]|0,m=(Vr(n,2)^Vr(n,13)^Vr(n,22))+Fc(n,o,s)|0;d=l,l=c,c=a,a=i+f|0,i=s,s=o,o=n,n=f+m|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,s,i,a,c,l,d)}roundClean(){go.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var yo=zs(()=>new Ph);function e_(r){let e=sa(r);Sr(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:t_,hexToBytes:r_}=$c,as={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(r){let{Err:e}=as;if(r.length<2||r[0]!==2)throw new e("Invalid signature integer tag");let t=r[1],n=r.subarray(2,t+2);if(!t||n.length!==t)throw new e("Invalid signature integer: wrong length");if(n[0]&128)throw new e("Invalid signature integer: negative");if(n[0]===0&&!(n[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return{d:t_(n),l:r.subarray(t+2)}},toSig(r){let{Err:e}=as,t=typeof r=="string"?r_(r):r;Ys(t);let n=t.length;if(n<2||t[0]!=48)throw new e("Invalid signature tag");if(t[1]!==n-2)throw new e("Invalid signature: incorrect length");let{d:o,l:s}=as._parseInt(t.subarray(2)),{d:i,l:a}=as._parseInt(s);if(a.length)throw new e("Invalid signature: left bytes after parsing");return{r:o,s:i}},hexFromSig(r){let e=l=>Number.parseInt(l[0],16)&8?"00"+l:l,t=l=>{let d=l.toString(16);return d.length&1?`0${d}`:d},n=e(t(r.s)),o=e(t(r.r)),s=n.length/2,i=o.length/2,a=t(s),c=t(i);return`30${t(i+s+4)}02${c}${o}02${a}${n}`}},Un=BigInt(0),Ar=BigInt(1),_L=BigInt(2),Gm=BigInt(3),vL=BigInt(4);function n_(r){let e=e_(r),{Fp:t}=e,n=e.toBytes||((p,m,y)=>{let w=m.toAffine();return Cn(Uint8Array.from([4]),t.toBytes(w.x),t.toBytes(w.y))}),o=e.fromBytes||(p=>{let m=p.subarray(1),y=t.fromBytes(m.subarray(0,t.BYTES)),w=t.fromBytes(m.subarray(t.BYTES,2*t.BYTES));return{x:y,y:w}});function s(p){let{a:m,b:y}=e,w=t.sqr(p),b=t.mul(w,p);return t.add(t.add(b,t.mul(p,m)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function i(p){return typeof p=="bigint"&&Un<p&&p<e.n}function a(p){if(!i(p))throw new Error("Expected valid bigint: 0 < bigint < curve.n")}function c(p){let{allowedPrivateKeyLengths:m,nByteLength:y,wrapPrivateKey:w,n:b}=e;if(m&&typeof p!="bigint"){if(io(p)&&(p=An(p)),typeof p!="string"||!m.includes(p.length))throw new Error("Invalid key");p=p.padStart(y*2,"0")}let E;try{E=typeof p=="bigint"?p:In(Me("private key",p,y))}catch{throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof p}`)}return w&&(E=Ae(E,b)),a(E),E}let l=new Map;function d(p){if(!(p instanceof u))throw new Error("ProjectivePoint expected")}class u{constructor(m,y,w){if(this.px=m,this.py=y,this.pz=w,m==null||!t.isValid(m))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(w==null||!t.isValid(w))throw new Error("z required")}static fromAffine(m){let{x:y,y:w}=m||{};if(!m||!t.isValid(y)||!t.isValid(w))throw new Error("invalid affine point");if(m instanceof u)throw new Error("projective point not allowed");let b=E=>t.eql(E,t.ZERO);return b(y)&&b(w)?u.ZERO:new u(y,w,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(m){let y=t.invertBatch(m.map(w=>w.pz));return m.map((w,b)=>w.toAffine(y[b])).map(u.fromAffine)}static fromHex(m){let y=u.fromAffine(o(Me("pointHex",m)));return y.assertValidity(),y}static fromPrivateKey(m){return u.BASE.multiply(c(m))}_setWindowSize(m){this._WINDOW_SIZE=m,l.delete(this)}assertValidity(){if(this.is0()){if(e.allowInfinityPoint&&!t.is0(this.py))return;throw new Error("bad point: ZERO")}let{x:m,y}=this.toAffine();if(!t.isValid(m)||!t.isValid(y))throw new Error("bad point: x or y not FE");let w=t.sqr(y),b=s(m);if(!t.eql(w,b))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:m}=this.toAffine();if(t.isOdd)return!t.isOdd(m);throw new Error("Field doesn't support isOdd")}equals(m){d(m);let{px:y,py:w,pz:b}=this,{px:E,py:x,pz:_}=m,I=t.eql(t.mul(y,_),t.mul(E,b)),A=t.eql(t.mul(w,_),t.mul(x,b));return I&&A}negate(){return new u(this.px,t.neg(this.py),this.pz)}double(){let{a:m,b:y}=e,w=t.mul(y,Gm),{px:b,py:E,pz:x}=this,_=t.ZERO,I=t.ZERO,A=t.ZERO,R=t.mul(b,b),k=t.mul(E,E),O=t.mul(x,x),N=t.mul(b,E);return N=t.add(N,N),A=t.mul(b,x),A=t.add(A,A),_=t.mul(m,A),I=t.mul(w,O),I=t.add(_,I),_=t.sub(k,I),I=t.add(k,I),I=t.mul(_,I),_=t.mul(N,_),A=t.mul(w,A),O=t.mul(m,O),N=t.sub(R,O),N=t.mul(m,N),N=t.add(N,A),A=t.add(R,R),R=t.add(A,R),R=t.add(R,O),R=t.mul(R,N),I=t.add(I,R),O=t.mul(E,x),O=t.add(O,O),R=t.mul(O,N),_=t.sub(_,R),A=t.mul(O,k),A=t.add(A,A),A=t.add(A,A),new u(_,I,A)}add(m){d(m);let{px:y,py:w,pz:b}=this,{px:E,py:x,pz:_}=m,I=t.ZERO,A=t.ZERO,R=t.ZERO,k=e.a,O=t.mul(e.b,Gm),N=t.mul(y,E),M=t.mul(w,x),C=t.mul(b,_),Q=t.add(y,w),T=t.add(E,x);Q=t.mul(Q,T),T=t.add(N,M),Q=t.sub(Q,T),T=t.add(y,b);let P=t.add(E,_);return T=t.mul(T,P),P=t.add(N,C),T=t.sub(T,P),P=t.add(w,b),I=t.add(x,_),P=t.mul(P,I),I=t.add(M,C),P=t.sub(P,I),R=t.mul(k,T),I=t.mul(O,C),R=t.add(I,R),I=t.sub(M,R),R=t.add(M,R),A=t.mul(I,R),M=t.add(N,N),M=t.add(M,N),C=t.mul(k,C),T=t.mul(O,T),M=t.add(M,C),C=t.sub(N,C),C=t.mul(k,C),T=t.add(T,C),N=t.mul(M,T),A=t.add(A,N),N=t.mul(P,T),I=t.mul(Q,I),I=t.sub(I,N),N=t.mul(Q,M),R=t.mul(P,R),R=t.add(R,N),new u(I,A,R)}subtract(m){return this.add(m.negate())}is0(){return this.equals(u.ZERO)}wNAF(m){return f.wNAFCached(this,l,m,y=>{let w=t.invertBatch(y.map(b=>b.pz));return y.map((b,E)=>b.toAffine(w[E])).map(u.fromAffine)})}multiplyUnsafe(m){let y=u.ZERO;if(m===Un)return y;if(a(m),m===Ar)return this;let{endo:w}=e;if(!w)return f.unsafeLadder(this,m);let{k1neg:b,k1:E,k2neg:x,k2:_}=w.splitScalar(m),I=y,A=y,R=this;for(;E>Un||_>Un;)E&Ar&&(I=I.add(R)),_&Ar&&(A=A.add(R)),R=R.double(),E>>=Ar,_>>=Ar;return b&&(I=I.negate()),x&&(A=A.negate()),A=new u(t.mul(A.px,w.beta),A.py,A.pz),I.add(A)}multiply(m){a(m);let y=m,w,b,{endo:E}=e;if(E){let{k1neg:x,k1:_,k2neg:I,k2:A}=E.splitScalar(y),{p:R,f:k}=this.wNAF(_),{p:O,f:N}=this.wNAF(A);R=f.constTimeNegate(x,R),O=f.constTimeNegate(I,O),O=new u(t.mul(O.px,E.beta),O.py,O.pz),w=R.add(O),b=k.add(N)}else{let{p:x,f:_}=this.wNAF(y);w=x,b=_}return u.normalizeZ([w,b])[0]}multiplyAndAddUnsafe(m,y,w){let b=u.BASE,E=(_,I)=>I===Un||I===Ar||!_.equals(b)?_.multiplyUnsafe(I):_.multiply(I),x=E(this,y).add(E(m,w));return x.is0()?void 0:x}toAffine(m){let{px:y,py:w,pz:b}=this,E=this.is0();m==null&&(m=E?t.ONE:t.inv(b));let x=t.mul(y,m),_=t.mul(w,m),I=t.mul(b,m);if(E)return{x:t.ZERO,y:t.ZERO};if(!t.eql(I,t.ONE))throw new Error("invZ was invalid");return{x,y:_}}isTorsionFree(){let{h:m,isTorsionFree:y}=e;if(m===Ar)return!0;if(y)return y(u,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:m,clearCofactor:y}=e;return m===Ar?this:y?y(u,this):this.multiplyUnsafe(e.h)}toRawBytes(m=!0){return this.assertValidity(),n(u,this,m)}toHex(m=!0){return An(this.toRawBytes(m))}}u.BASE=new u(e.Gx,e.Gy,t.ONE),u.ZERO=new u(t.ZERO,t.ONE,t.ZERO);let h=e.nBitLength,f=Gc(u,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:u,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:i}}function o_(r){let e=sa(r);return Sr(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function Wm(r){let e=o_(r),{Fp:t,n}=e,o=t.BYTES+1,s=2*t.BYTES+1;function i(T){return Un<T&&T<t.ORDER}function a(T){return Ae(T,n)}function c(T){return Hc(T,n)}let{ProjectivePoint:l,normPrivateKeyToScalar:d,weierstrassEquation:u,isWithinCurveOrder:h}=n_({...e,toBytes(T,P,H){let D=P.toAffine(),S=t.toBytes(D.x),U=Cn;return H?U(Uint8Array.from([P.hasEvenY()?2:3]),S):U(Uint8Array.from([4]),S,t.toBytes(D.y))},fromBytes(T){let P=T.length,H=T[0],D=T.subarray(1);if(P===o&&(H===2||H===3)){let S=In(D);if(!i(S))throw new Error("Point is not on curve");let U=u(S),V;try{V=t.sqrt(U)}catch(ae){let fe=ae instanceof Error?": "+ae.message:"";throw new Error("Point is not on curve"+fe)}let G=(V&Ar)===Ar;return(H&1)===1!==G&&(V=t.neg(V)),{x:S,y:V}}else if(P===s&&H===4){let S=t.fromBytes(D.subarray(0,t.BYTES)),U=t.fromBytes(D.subarray(t.BYTES,2*t.BYTES));return{x:S,y:U}}else throw new Error(`Point of length ${P} was invalid. Expected ${o} compressed bytes or ${s} uncompressed bytes`)}}),f=T=>An(ao(T,e.nByteLength));function p(T){let P=n>>Ar;return T>P}function m(T){return p(T)?a(-T):T}let y=(T,P,H)=>In(T.slice(P,H));class w{constructor(P,H,D){this.r=P,this.s=H,this.recovery=D,this.assertValidity()}static fromCompact(P){let H=e.nByteLength;return P=Me("compactSignature",P,H*2),new w(y(P,0,H),y(P,H,2*H))}static fromDER(P){let{r:H,s:D}=as.toSig(Me("DER",P));return new w(H,D)}assertValidity(){if(!h(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!h(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(P){return new w(this.r,this.s,P)}recoverPublicKey(P){let{r:H,s:D,recovery:S}=this,U=A(Me("msgHash",P));if(S==null||![0,1,2,3].includes(S))throw new Error("recovery id invalid");let V=S===2||S===3?H+e.n:H;if(V>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let G=S&1?"03":"02",ie=l.fromHex(G+f(V)),ae=c(V),fe=a(-U*ae),le=a(D*ae),de=l.BASE.multiplyAndAddUnsafe(ie,fe,le);if(!de)throw new Error("point at infinify");return de.assertValidity(),de}hasHighS(){return p(this.s)}normalizeS(){return this.hasHighS()?new w(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return ts(this.toDERHex())}toDERHex(){return as.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return ts(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let b={isValidPrivateKey(T){try{return d(T),!0}catch{return!1}},normPrivateKeyToScalar:d,randomPrivateKey:()=>{let T=ph(e.n);return C4(e.randomBytes(T),e.n)},precompute(T=8,P=l.BASE){return P._setWindowSize(T),P.multiply(BigInt(3)),P}};function E(T,P=!0){return l.fromPrivateKey(T).toRawBytes(P)}function x(T){let P=io(T),H=typeof T=="string",D=(P||H)&&T.length;return P?D===o||D===s:H?D===2*o||D===2*s:T instanceof l}function _(T,P,H=!0){if(x(T))throw new Error("first arg must be private key");if(!x(P))throw new Error("second arg must be public key");return l.fromHex(P).multiply(d(T)).toRawBytes(H)}let I=e.bits2int||function(T){let P=In(T),H=T.length*8-e.nBitLength;return H>0?P>>BigInt(H):P},A=e.bits2int_modN||function(T){return a(I(T))},R=oa(e.nBitLength);function k(T){if(typeof T!="bigint")throw new Error("bigint expected");if(!(Un<=T&&T<R))throw new Error(`bigint expected < 2^${e.nBitLength}`);return ao(T,e.nByteLength)}function O(T,P,H=N){if(["recovered","canonical"].some(Ce=>Ce in H))throw new Error("sign() legacy options not supported");let{hash:D,randomBytes:S}=e,{lowS:U,prehash:V,extraEntropy:G}=H;U==null&&(U=!0),T=Me("msgHash",T),V&&(T=Me("prehashed msgHash",D(T)));let ie=A(T),ae=d(P),fe=[k(ae),k(ie)];if(G!=null&&G!==!1){let Ce=G===!0?S(t.BYTES):G;fe.push(Me("extraEntropy",Ce))}let le=Cn(...fe),de=ie;function Oe(Ce){let gt=I(Ce);if(!h(gt))return;let yt=c(gt),lt=l.BASE.multiply(gt).toAffine(),At=a(lt.x);if(At===Un)return;let xn=a(yt*a(de+At*ae));if(xn===Un)return;let Fo=(lt.x===At?0:2)|Number(lt.y&Ar),Qi=xn;return U&&p(xn)&&(Qi=m(xn),Fo^=1),new w(At,Qi,Fo)}return{seed:le,k2sig:Oe}}let N={lowS:e.lowS,prehash:!1},M={lowS:e.lowS,prehash:!1};function C(T,P,H=N){let{seed:D,k2sig:S}=O(T,P,H),U=e;return lh(U.hash.outputLen,U.nByteLength,U.hmac)(D,S)}l.BASE._setWindowSize(8);function Q(T,P,H,D=M){let S=T;if(P=Me("msgHash",P),H=Me("publicKey",H),"strict"in D)throw new Error("options.strict was renamed to lowS");let{lowS:U,prehash:V}=D,G,ie;try{if(typeof S=="string"||io(S))try{G=w.fromDER(S)}catch(lt){if(!(lt instanceof as.Err))throw lt;G=w.fromCompact(S)}else if(typeof S=="object"&&typeof S.r=="bigint"&&typeof S.s=="bigint"){let{r:lt,s:At}=S;G=new w(lt,At)}else throw new Error("PARSE");ie=l.fromHex(H)}catch(lt){if(lt.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(U&&G.hasHighS())return!1;V&&(P=e.hash(P));let{r:ae,s:fe}=G,le=A(P),de=c(fe),Oe=a(le*de),Ce=a(ae*de),gt=l.BASE.multiplyAndAddUnsafe(ie,Oe,Ce)?.toAffine();return gt?a(gt.x)===ae:!1}return{CURVE:e,getPublicKey:E,getSharedSecret:_,sign:C,verify:Q,ProjectivePoint:l,Signature:w,utils:b}}function s_(r){return{hash:r,hmac:(e,...t)=>co(r,e,oh(...t)),randomBytes:Jo}}function zm(r,e){let t=n=>Wm({...r,...s_(n)});return Object.freeze({...t(e),create:t})}var Qm=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Ym=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),i_=BigInt(1),Lh=BigInt(2),Xm=(r,e)=>(r+e/Lh)/e;function a_(r){let e=Qm,t=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=Ue(d,t,e)*d%e,h=Ue(u,t,e)*d%e,f=Ue(h,Lh,e)*l%e,p=Ue(f,o,e)*f%e,m=Ue(p,s,e)*p%e,y=Ue(m,a,e)*m%e,w=Ue(y,c,e)*y%e,b=Ue(w,a,e)*m%e,E=Ue(b,t,e)*d%e,x=Ue(E,i,e)*p%e,_=Ue(x,n,e)*l%e,I=Ue(_,Lh,e);if(!Oh.eql(Oh.sqr(I),r))throw new Error("Cannot find square root");return I}var Oh=qc(Qm,void 0,void 0,{sqrt:a_}),Yr=zm({a:BigInt(0),b:BigInt(7),Fp:Oh,n:Ym,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=Ym,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-i_*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=t,i=BigInt("0x100000000000000000000000000000000"),a=Xm(s*r,e),c=Xm(-n*r,e),l=Ae(r-a*t-c*o,e),d=Ae(-a*n-c*s,e),u=l>i,h=d>i;if(u&&(l=e-l),h&&(d=e-d),l>i||d>i)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:u,k1:l,k2neg:h,k2:d}}}},yo),NL=BigInt(0);var PL=Yr.ProjectivePoint;function Zm(){return Yr.utils.randomPrivateKey()}function jm(r,e){let t=De.digest(e instanceof Uint8Array?e:e.subarray());if(vr(t))return t.then(({digest:n})=>Yr.sign(n,r).toDERRawBytes()).catch(n=>{throw new g(String(n),"ERR_INVALID_INPUT")});try{return Yr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new g(String(n),"ERR_INVALID_INPUT")}}function Jm(r,e,t){let n=De.digest(t instanceof Uint8Array?t:t.subarray());if(vr(n))return n.then(({digest:o})=>Yr.verify(e,o,r)).catch(o=>{throw new g(String(o),"ERR_INVALID_INPUT")});try{return Yr.verify(e,n.digest,r)}catch(o){throw new g(String(o),"ERR_INVALID_INPUT")}}function e6(r){return Yr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function t6(r){try{Yr.getPublicKey(r,!0)}catch(e){throw new g(String(e),"ERR_INVALID_PRIVATE_KEY")}}function Bh(r){try{Yr.ProjectivePoint.fromHex(r)}catch(e){throw new g(String(e),"ERR_INVALID_PUBLIC_KEY")}}function r6(r){try{return Yr.getPublicKey(r,!0)}catch(e){throw new g(String(e),"ERR_INVALID_PRIVATE_KEY")}}var cs=class{_key;constructor(e){Bh(e),this._key=e}verify(e,t){return Jm(this._key,t,e)}marshal(){return e6(this._key)}get bytes(){return qr.encode({Type:Fe.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}async hash(){let e=De.digest(this.bytes),t;return vr(e)?{bytes:t}=await e:t=e.bytes,t}},ls=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t??r6(e),t6(this._key),Bh(this._publicKey)}sign(e){return jm(this._key,e)}get public(){return new cs(this._publicKey)}marshal(){return this._key}get bytes(){return Gr.encode({Type:Fe.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return vr(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return B(e,"base58btc")}async export(e,t="libp2p-key"){if(t==="libp2p-key")return Zs(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function l_(r){return new ls(r)}function u_(r){return new cs(r)}async function d_(){let r=Zm();return new ls(r)}var Fn={rsa:Nh,ed25519:bh,secp256k1:Mh};function Uh(r){let e=Object.keys(Fn).join(" / ");return new g(`invalid or unsupported key type ${r}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function Fh(r){if(r=r.toLowerCase(),r==="rsa"||r==="ed25519"||r==="secp256k1")return Fn[r];throw Uh(r)}async function wa(r,e){return Fh(r).generateKeyPair(e??2048)}async function f_(r,e,t){if(r.toLowerCase()!=="ed25519")throw new g("Seed key derivation is unimplemented for RSA or secp256k1","ERR_UNSUPPORTED_KEY_DERIVATION_TYPE");return Eh(e)}function Xr(r){let e=qr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Fe.RSA:return Fn.rsa.unmarshalRsaPublicKey(t);case Fe.Ed25519:return Fn.ed25519.unmarshalEd25519PublicKey(t);case Fe.Secp256k1:return Fn.secp256k1.unmarshalSecp256k1PublicKey(t);default:throw Uh(e.Type??"unknown")}}function Vh(r,e){return e=(e??"rsa").toLowerCase(),Fh(e),r.bytes}async function Ir(r){let e=Gr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Fe.RSA:return Fn.rsa.unmarshalRsaPrivateKey(t);case Fe.Ed25519:return Fn.ed25519.unmarshalEd25519PrivateKey(t);case Fe.Secp256k1:return Fn.secp256k1.unmarshalSecp256k1PrivateKey(t);default:throw Uh(e.Type??"RSA")}}function Kh(r,e){return e=(e??"rsa").toLowerCase(),Fh(e),r.bytes}async function oi(r,e){try{let t=await z4(r,e);return await Ir(t)}catch{}if(!r.includes("BEGIN"))throw new g("Encrypted key was not a libp2p-key or a PEM file","ERR_INVALID_IMPORT_FORMAT");return Ch(r,e)}var Ea=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),wo=new Uint32Array(80),$h=class extends no{constructor(){super(64,20,8,!1),this.A=Ea[0]|0,this.B=Ea[1]|0,this.C=Ea[2]|0,this.D=Ea[3]|0,this.E=Ea[4]|0}get(){let{A:e,B:t,C:n,D:o,E:s}=this;return[e,t,n,o,s]}set(e,t,n,o,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0}process(e,t){for(let c=0;c<16;c++,t+=4)wo[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)wo[c]=Mc(wo[c-3]^wo[c-8]^wo[c-14]^wo[c-16],1);let{A:n,B:o,C:s,D:i,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=Uc(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=Fc(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=Mc(n,5)+l+a+d+wo[c]|0;a=i,i=s,s=Mc(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,this.set(n,o,s,i,a)}roundClean(){wo.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},n6=zs(()=>new $h);var o6={sha1:n6,"sha2-256":yo,"sha2-512":es};function ba(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(o6).join(" / ");throw new g(`Hash '${o}' is unknown or not supported. Must be ${a}`,"ERR_UNSUPPORTED_HASH_TYPE")}let s=o6[o],i=j4(s,r,e,{c:t,dkLen:n});return ot.encode(i).substring(1)}var Hh=Xe(Kl(),1);var h_=Math.LN2*Math.LN2,$l=class{seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=m_(e.hashes??8),this.bits=e.bits??1024,this.buffer=pe(Math.ceil(this.bits/8))}add(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.seeds.length;t++){let o=Hh.default.x86.hash32(e,this.seeds[t])%this.bits;this.setbit(o)}}has(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.seeds.length;t++){let o=Hh.default.x86.hash32(e,this.seeds[t])%this.bits;if(!this.getbit(o))return!1}return!0}clear(){this.buffer.fill(0)}setbit(e){let t=0,n=e;for(;n>7;)t++,n-=8;let o=this.buffer[t];o|=1<<n,this.buffer[t]=o}getbit(e){let t=0,n=e;for(;n>7;)t++,n-=8;return(this.buffer[t]&1<<n)!==0}};function qh(r,e=.005){let t=p_(r,e);return new $l(t)}function p_(r,e=.005){let t=Math.round(-1*r*Math.log(e)/h_),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function m_(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(it(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var Gh=64,Qr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>Gh)throw new TypeError("Invalid Fingerprint Size");let s=t.hashV(e,n),i=pe(o);for(let a=0;a<i.length;a++)i[a]=s[a];i.length===0&&(i[0]=7),this.fp=i,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?J(this.fp,e.fp):!1}};function us(r,e){return Math.floor(Math.random()*(e-r))+r}var ds=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Qr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Qr))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof Qr))throw new TypeError("Invalid Fingerprint");let t=us(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Qr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var Wh={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},a6={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},c6=new globalThis.TextEncoder;function g_(r,e){let t=Wh[e],n=a6[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function y_(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=Wh[e],o=a6[e],s=r;for(;s.length>0;){let i=c6.encodeInto(s,t);s=s.slice(i.read);for(let a=0;a<i.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function zh(r,{size:e=32,utf8Buffer:t}={}){if(!Wh[e])throw new Error("The `size` option must be one of 32, 64, 128, 256, 512, or 1024");if(typeof r=="string"){if(t)return y_(r,e,t);r=c6.encode(r)}return g_(r,e)}var w_=Xe(Kl(),1);var _a={hash:r=>Number(zh(r,{size:32})),hashV:(r,e)=>E_(_a.hash(r,e))};function E_(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),L(e,"base16")}var b_=500,va=class{bucketSize;filterSize;fingerprintSize;buckets;count;hash;seed;constructor(e){this.filterSize=e.filterSize,this.bucketSize=e.bucketSize??4,this.fingerprintSize=e.fingerprintSize??2,this.count=0,this.buckets=[],this.hash=e.hash??_a,this.seed=e.seed??us(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=L(e));let t=new Qr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new ds(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new ds(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let s=[n,o],i=s[us(0,s.length-1)];this.buckets[i]==null&&(this.buckets[i]=new ds(this.bucketSize));for(let a=0;a<b_;a++){let c=this.buckets[i].swap(t);if(c!=null&&(i=(i^c.hash())%this.filterSize,this.buckets[i]==null&&(this.buckets[i]=new ds(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=L(e));let t=new Qr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let s=(n^t.hash())%this.filterSize;return this.buckets[s]?.has(t)??!1}remove(e){typeof e=="string"&&(e=L(e));let t=new Qr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let s=(n^t.hash())%this.filterSize,i=this.buckets[s]?.remove(t)??!1;return i&&this.count--,i}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},x_={1:.5,2:.84,4:.95,8:.98};function __(r=.001){return r>.002?2:r>1e-5?4:8}function l6(r,e=.001){let t=__(e),n=x_[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),Gh);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var Hl=class{filterSize;bucketSize;fingerprintSize;scale;filterSeries;hash;seed;constructor(e){this.bucketSize=e.bucketSize??4,this.filterSize=e.filterSize??(1<<18)/this.bucketSize,this.fingerprintSize=e.fingerprintSize??2,this.scale=e.scale??2,this.hash=e.hash??_a,this.seed=e.seed??us(0,Math.pow(2,10)),this.filterSeries=[new va({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=L(e)),this.has(e))return!0;let t=this.filterSeries.find(n=>n.reliable);if(t==null){let n=this.filterSize*Math.pow(this.scale,this.filterSeries.length);t=new va({filterSize:n,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed}),this.filterSeries.push(t)}return t.add(e)}has(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].has(e))return!0;return!1}remove(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].remove(e))return!0;return!1}get count(){return this.filterSeries.reduce((e,t)=>e+t.count,0)}};function Sa(r,e=.001,t){return new Hl({...l6(r,e),...t??{}})}var ql=class{filter;constructor(e,t){this.filter=Sa(e,t)}has(e){return this.filter.has(e.toBytes())}add(e){this.filter.add(e.toBytes())}remove(e){this.filter.remove?.(e.toBytes())}};function Yh(r,e=.001){return new ql(r,e)}var Xh=class extends st{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Ra(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Xh({name:e,metrics:t}):n=new st,n}var Vn=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=ot.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=ot.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=ot.encode(e.multihash.bytes);this.blocks.set(n,t)}};function v_(r){let e=new Uint8Array(r.reduce((n,o)=>n+Se(o),0)),t=0;for(let n of r)e=Ve(n,e,t),t+=Se(n);return e}var u6=v_;function Qh(r){return u6([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var Gl=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new Vn,n=new Set;for(let[o,s]of this.wants.entries())try{let i=await this.blockstore.get(s.cid,e);s.wantType===et.WantHave?i.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",s.cid),n.add(o),t.addBlock(s.cid,{data:i,prefix:Qh(s.cid)})):(this.log("sending have for %c",s.cid),t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:_r.HaveBlock})):(this.log("sending block for %c",s.cid),n.add(o),t.addBlock(s.cid,{data:i,prefix:Qh(s.cid)}))}catch(i){if(i.code!=="ERR_NOT_FOUND")throw i;if(this.log("do not have block for %c",s.cid),!s.sendDontHave||s.sentDontHave===!0)continue;s.sentDontHave=!0,t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:_r.DontHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((o,s)=>o+s.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var Wl=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=Ra({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new Gl({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,s)=>o+s.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let s=ue.decode(o.cid),i=B(s.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,s),n.wants.delete(i)):(o.wantType===et.WantHave?this.log("peer %p wanted block presence for %c",e,s):this.log("peer %p wanted block for %c",e,s),n.wants.set(i,{cid:s,priority:o.priority,wantType:o.wantType??et.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=B(e.multihash.bytes,"base64"),o=[];for(let s of this.ledgerMap.values())s.wants.has(n)&&o.push(s);await Promise.all(o.map(async s=>s.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var ar=Xe(m6(),1);ar.default.formatters.b=r=>r==null?"undefined":We.baseEncode(r);ar.default.formatters.t=r=>r==null?"undefined":ut.baseEncode(r);ar.default.formatters.m=r=>r==null?"undefined":ot.baseEncode(r);ar.default.formatters.p=r=>r==null?"undefined":r.toString();ar.default.formatters.c=r=>r==null?"undefined":r.toString();ar.default.formatters.k=r=>r==null?"undefined":r.toString();ar.default.formatters.a=r=>r==null?"undefined":r.toString();function B_(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function Eo(){return{forComponent(r){return cr(r)}}}function cr(r){let e=B_(`${r}:trace`);return ar.default.enabled(`${r}:trace`)&&ar.default.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=(0,ar.default)(`${r}:trace`)),Object.assign((0,ar.default)(r),{error:(0,ar.default)(`${r}:error`),trace:e})}var jh=Xe(y6(),1);var bo=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Jh=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},w6=r=>globalThis.DOMException===void 0?new Jh(r):new DOMException(r),E6=r=>{let e=r.reason===void 0?w6("This operation was aborted."):r.reason;return e instanceof Error?e:w6(e)};function Zr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:s={setTimeout,clearTimeout}}=e,i,c=new Promise((l,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&d(E6(h)),h.addEventListener("abort",()=>{d(E6(h))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new bo;i=s.setTimeout.call(void 0,()=>{if(n){try{l(n())}catch(h){d(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?l():o instanceof Error?d(o):(u.message=o??`Promise timed out after ${t} milliseconds`,d(u))},t),(async()=>{try{l(await r)}catch(h){d(h)}})()}).finally(()=>{c.clear()});return c.clear=()=>{s.clearTimeout.call(void 0,i),i=void 0},c}function e0(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var Ia=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,run:e};if(this.size&&this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=e0(this.#e,n,(s,i)=>i.priority-s.priority);this.#e.splice(o,0,n)}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var Tr=class extends jh.default{#e;#t;#r=0;#o;#a;#l=0;#s;#u;#n;#m;#i=0;#d;#c;#g;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Ia,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#o=e.intervalCap,this.#a=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#c=e.autoStart===!1}get#E(){return this.#t||this.#r<this.#o}get#b(){return this.#i<this.#d}#x(){this.#i--,this.#f(),this.emit("next")}#_(){this.#w(),this.#y(),this.#u=void 0}get#v(){let e=Date.now();if(this.#s===void 0){let t=this.#l-e;if(t<0)this.#r=this.#e?this.#i:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#_()},t)),!0}return!1}#f(){if(this.#n.size===0)return this.#s&&clearInterval(this.#s),this.#s=void 0,this.emit("empty"),this.#i===0&&this.emit("idle"),!1;if(!this.#c){let e=!this.#v;if(this.#E&&this.#b){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#s!==void 0||(this.#s=setInterval(()=>{this.#w()},this.#a),this.#l=Date.now()+this.#a)}#w(){this.#r===0&&this.#i===0&&this.#s&&(clearInterval(this.#s),this.#s=void 0),this.#r=this.#e?this.#i:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#d}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#d=e,this.#h()}async#S(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}async add(e,t={}){return t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#i++,this.#r++;try{t.signal?.throwIfAborted();let s=e({signal:t.signal});t.timeout&&(s=Zr(Promise.resolve(s),{milliseconds:t.timeout})),t.signal&&(s=Promise.race([s,this.#S(t.signal)]));let i=await s;n(i),this.emit("completed",i)}catch(s){if(s instanceof bo&&!t.throwOnTimeout){n();return}o(s),this.emit("error",s)}finally{this.#x()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#c?(this.#c=!1,this.#h(),this):this}pause(){this.#c=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#p("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#p("next",()=>this.#n.size<e)}async onIdle(){this.#i===0&&this.#n.size===0||await this.#p("idle")}async#p(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#i}get isPaused(){return this.#c}};function Ql(r){let e=[lr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var t0=60;function Zl(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:lr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:lr[e.type],TTL:e.TTL??e.ttl??t0,data:e.data instanceof Uint8Array?B(e.data):e.data}))}}var F_=4;function r0(r,e={}){let t=new Tr({concurrency:e.queryConcurrency??F_});return async(n,o={})=>{let s=new URLSearchParams;s.set("name",n),Ql(o.types).forEach(a=>{s.append("type",lr[a])}),o.onProgress?.(new q("dns:query",{detail:n}));let i=await t.add(async()=>{let a=await fetch(`${r}?${s}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=Zl(await a.json());return o.onProgress?.(new q("dns:response",{detail:c})),c},{signal:o.signal});if(i==null)throw new Error("No DNS response received");return i}}function b6(){return[r0("https://cloudflare-dns.com/dns-query"),r0("https://dns.google/resolve")]}var _6=Xe(n0(),1);var o0=class{lru;constructor(e){this.lru=(0,_6.default)(e)}get(e,t){let n=!0,o=[];for(let s of t){let i=this.getAnswers(e,s);if(i.length===0){n=!1;break}o.push(...i)}if(n)return Zl({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let s=o.filter(i=>i.expires>Date.now()).map(({expires:i,value:a})=>({...a,TTL:Math.round((i-Date.now())/1e3),type:lr[a.type]}));return s.length===0&&this.lru.remove(n),s}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??t0)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function v6(r){return new o0(r)}var V_=1e3,jl=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=v6(e.cacheSize??V_),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=b6())}async query(e,t={}){let n=Ql(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new q("dns:cache",{detail:o})),o;let s=`${e.split(".").pop()}.`,i=(this.resolvers[s]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of i){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new q("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var lr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(lr||(lr={}));function Jl(r={}){return new jl(r)}var K_=["string","number","bigint","symbol"],$_=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function S6(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(K_.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(H_(r))return"Buffer";let t=q_(r);return t||"Object"}function H_(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function q_(r){let e=Object.prototype.toString.call(r).slice(8,-1);if($_.includes(e))return e}var v=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};v.uint=new v(0,"uint",!0);v.negint=new v(1,"negint",!0);v.bytes=new v(2,"bytes",!0);v.string=new v(3,"string",!0);v.array=new v(4,"array",!1);v.map=new v(5,"map",!1);v.tag=new v(6,"tag",!1);v.float=new v(7,"float",!0);v.false=new v(7,"false",!0);v.true=new v(7,"true",!0);v.null=new v(7,"null",!0);v.undefined=new v(7,"undefined",!0);v.break=new v(7,"break",!0);var F=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var ci=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",G_=new TextDecoder,W_=new TextEncoder;function eu(r){return ci&&globalThis.Buffer.isBuffer(r)}function Ta(r){return r instanceof Uint8Array?eu(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var T6=ci?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):A6(r,e,t):(r,e,t)=>t-e>64?G_.decode(r.subarray(e,t)):A6(r,e,t),tu=ci?r=>r.length>64?globalThis.Buffer.from(r):R6(r):r=>r.length>64?W_.encode(r):R6(r),pn=r=>Uint8Array.from(r),li=ci?(r,e,t)=>eu(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),C6=ci?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Ta(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},k6=ci?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function D6(r,e){if(eu(r)&&eu(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function R6(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function A6(r,e,t){let n=[];for(;e<t;){let o=r[e],s=null,i=o>239?4:o>223?3:o>191?2:1;if(e+i<=t){let a,c,l,d;switch(i){case 1:o<128&&(s=o);break;case 2:a=r[e+1],(a&192)===128&&(d=(o&31)<<6|a&63,d>127&&(s=d));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(d=(o&15)<<12|(a&63)<<6|c&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(d=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,d>65535&&d<1114112&&(s=d))}}s===null?(s=65533,i=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),e+=i}return s0(n)}var I6=4096;function s0(r){let e=r.length;if(e<=I6)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=I6));return t}var z_=256,Ca=class{constructor(e=z_){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=k6(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=li(n,0,this.cursor)}else t=C6(this.chunks,this.cursor);return e&&this.reset(),t}};var Z="CBOR decode error:",ui="CBOR encode error:",ka=[];ka[23]=1;ka[24]=2;ka[25]=3;ka[26]=5;ka[27]=9;function Kn(r,e,t){if(r.length-e<t)throw new Error(`${Z} not enough data for type`)}var mt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function ur(r,e,t){Kn(r,e,1);let n=r[e];if(t.strict===!0&&n<mt[0])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function dr(r,e,t){Kn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<mt[1])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function fr(r,e,t){Kn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<mt[2])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function hr(r,e,t){Kn(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],s=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&s<mt[3])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);if(s<=Number.MAX_SAFE_INTEGER)return Number(s);if(t.allowBigInt===!0)return s;throw new Error(`${Z} integers outside of the safe integer range are not supported`)}function N6(r,e,t,n){return new F(v.uint,ur(r,e+1,n),2)}function P6(r,e,t,n){return new F(v.uint,dr(r,e+1,n),3)}function L6(r,e,t,n){return new F(v.uint,fr(r,e+1,n),5)}function O6(r,e,t,n){return new F(v.uint,hr(r,e+1,n),9)}function Cr(r,e){return Et(r,0,e.value)}function Et(r,e,t){if(t<mt[0]){let n=Number(t);r.push([e|n])}else if(t<mt[1]){let n=Number(t);r.push([e|24,n])}else if(t<mt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<mt[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<mt[4]){let o=[e|27,0,0,0,0,0,0,0],s=Number(n&BigInt(4294967295)),i=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=s&255,s=s>>8,o[7]=s&255,s=s>>8,o[6]=s&255,s=s>>8,o[5]=s&255,o[4]=i&255,i=i>>8,o[3]=i&255,i=i>>8,o[2]=i&255,i=i>>8,o[1]=i&255,r.push(o)}else throw new Error(`${Z} encountered BigInt larger than allowable range`)}}Cr.encodedSize=function(e){return Et.encodedSize(e.value)};Et.encodedSize=function(e){return e<mt[0]?1:e<mt[1]?2:e<mt[2]?3:e<mt[3]?5:9};Cr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function B6(r,e,t,n){return new F(v.negint,-1-ur(r,e+1,n),2)}function M6(r,e,t,n){return new F(v.negint,-1-dr(r,e+1,n),3)}function U6(r,e,t,n){return new F(v.negint,-1-fr(r,e+1,n),5)}var i0=BigInt(-1),F6=BigInt(1);function V6(r,e,t,n){let o=hr(r,e+1,n);if(typeof o!="bigint"){let s=-1-o;if(s>=Number.MIN_SAFE_INTEGER)return new F(v.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${Z} integers outside of the safe integer range are not supported`);return new F(v.negint,i0-BigInt(o),9)}function ru(r,e){let t=e.value,n=typeof t=="bigint"?t*i0-F6:t*-1-1;Et(r,e.type.majorEncoded,n)}ru.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*i0-F6:t*-1-1;return n<mt[0]?1:n<mt[1]?2:n<mt[2]?3:n<mt[3]?5:9};ru.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Da(r,e,t,n){Kn(r,e,t+n);let o=li(r,e+t,e+t+n);return new F(v.bytes,o,t+n)}function K6(r,e,t,n){return Da(r,e,1,t)}function $6(r,e,t,n){return Da(r,e,2,ur(r,e+1,n))}function H6(r,e,t,n){return Da(r,e,3,dr(r,e+1,n))}function q6(r,e,t,n){return Da(r,e,5,fr(r,e+1,n))}function G6(r,e,t,n){let o=hr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer bytes lengths not supported`);return Da(r,e,9,o)}function nu(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===v.string?tu(r.value):r.value),r.encodedBytes}function di(r,e){let t=nu(e);Et(r,e.type.majorEncoded,t.length),r.push(t)}di.encodedSize=function(e){let t=nu(e);return Et.encodedSize(t.length)+t.length};di.compareTokens=function(e,t){return X_(nu(e),nu(t))};function X_(r,e){return r.length<e.length?-1:r.length>e.length?1:D6(r,e)}function Na(r,e,t,n,o){let s=t+n;Kn(r,e,s);let i=new F(v.string,T6(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=li(r,e+t,e+s)),i}function W6(r,e,t,n){return Na(r,e,1,t,n)}function z6(r,e,t,n){return Na(r,e,2,ur(r,e+1,n),n)}function Y6(r,e,t,n){return Na(r,e,3,dr(r,e+1,n),n)}function X6(r,e,t,n){return Na(r,e,5,fr(r,e+1,n),n)}function Q6(r,e,t,n){let o=hr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer string lengths not supported`);return Na(r,e,9,o,n)}var Z6=di;function fi(r,e,t,n){return new F(v.array,n,t)}function j6(r,e,t,n){return fi(r,e,1,t)}function J6(r,e,t,n){return fi(r,e,2,ur(r,e+1,n))}function e8(r,e,t,n){return fi(r,e,3,dr(r,e+1,n))}function t8(r,e,t,n){return fi(r,e,5,fr(r,e+1,n))}function r8(r,e,t,n){let o=hr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer array lengths not supported`);return fi(r,e,9,o)}function n8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return fi(r,e,1,1/0)}function ou(r,e){Et(r,v.array.majorEncoded,e.value)}ou.compareTokens=Cr.compareTokens;ou.encodedSize=function(e){return Et.encodedSize(e.value)};function hi(r,e,t,n){return new F(v.map,n,t)}function o8(r,e,t,n){return hi(r,e,1,t)}function s8(r,e,t,n){return hi(r,e,2,ur(r,e+1,n))}function i8(r,e,t,n){return hi(r,e,3,dr(r,e+1,n))}function a8(r,e,t,n){return hi(r,e,5,fr(r,e+1,n))}function c8(r,e,t,n){let o=hr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer map lengths not supported`);return hi(r,e,9,o)}function l8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return hi(r,e,1,1/0)}function su(r,e){Et(r,v.map.majorEncoded,e.value)}su.compareTokens=Cr.compareTokens;su.encodedSize=function(e){return Et.encodedSize(e.value)};function u8(r,e,t,n){return new F(v.tag,t,1)}function d8(r,e,t,n){return new F(v.tag,ur(r,e+1,n),2)}function f8(r,e,t,n){return new F(v.tag,dr(r,e+1,n),3)}function h8(r,e,t,n){return new F(v.tag,fr(r,e+1,n),5)}function p8(r,e,t,n){return new F(v.tag,hr(r,e+1,n),9)}function iu(r,e){Et(r,v.tag.majorEncoded,e.value)}iu.compareTokens=Cr.compareTokens;iu.encodedSize=function(e){return Et.encodedSize(e.value)};var tv=20,rv=21,nv=22,ov=23;function m8(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Z} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new F(v.null,null,1):new F(v.undefined,void 0,1)}function g8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return new F(v.break,void 0,1)}function a0(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Z} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Z} Infinity values are not supported`)}return new F(v.float,r,e)}function y8(r,e,t,n){return a0(c0(r,e+1),3,n)}function w8(r,e,t,n){return a0(l0(r,e+1),5,n)}function E8(r,e,t,n){return a0(v8(r,e+1),9,n)}function au(r,e,t){let n=e.value;if(n===!1)r.push([v.float.majorEncoded|tv]);else if(n===!0)r.push([v.float.majorEncoded|rv]);else if(n===null)r.push([v.float.majorEncoded|nv]);else if(n===void 0)r.push([v.float.majorEncoded|ov]);else{let o,s=!1;(!t||t.float64!==!0)&&(x8(n),o=c0(jr,1),n===o||Number.isNaN(n)?(jr[0]=249,r.push(jr.slice(0,3)),s=!0):(_8(n),o=l0(jr,1),n===o&&(jr[0]=250,r.push(jr.slice(0,5)),s=!0))),s||(sv(n),o=v8(jr,1),jr[0]=251,r.push(jr.slice(0,9)))}}au.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){x8(n);let o=c0(jr,1);if(n===o||Number.isNaN(n))return 3;if(_8(n),o=l0(jr,1),n===o)return 5}return 9};var b8=new ArrayBuffer(9),kr=new DataView(b8,1),jr=new Uint8Array(b8,0);function x8(r){if(r===1/0)kr.setUint16(0,31744,!1);else if(r===-1/0)kr.setUint16(0,64512,!1);else if(Number.isNaN(r))kr.setUint16(0,32256,!1);else{kr.setFloat32(0,r);let e=kr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)kr.setUint16(0,31744,!1);else if(t===0)kr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?kr.setUint16(0,0):o<-14?kr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):kr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function c0(r,e){if(r.length-e<2)throw new Error(`${Z} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,s;return n===0?s=o*2**-24:n!==31?s=(o+1024)*2**(n-25):s=o===0?1/0:NaN,t&32768?-s:s}function _8(r){kr.setFloat32(0,r,!1)}function l0(r,e){if(r.length-e<4)throw new Error(`${Z} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function sv(r){kr.setFloat64(0,r,!1)}function v8(r,e){if(r.length-e<8)throw new Error(`${Z} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}au.compareTokens=Cr.compareTokens;function Re(r,e,t){throw new Error(`${Z} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function cu(r){return()=>{throw new Error(`${Z} ${r}`)}}var $=[];for(let r=0;r<=23;r++)$[r]=Re;$[24]=N6;$[25]=P6;$[26]=L6;$[27]=O6;$[28]=Re;$[29]=Re;$[30]=Re;$[31]=Re;for(let r=32;r<=55;r++)$[r]=Re;$[56]=B6;$[57]=M6;$[58]=U6;$[59]=V6;$[60]=Re;$[61]=Re;$[62]=Re;$[63]=Re;for(let r=64;r<=87;r++)$[r]=K6;$[88]=$6;$[89]=H6;$[90]=q6;$[91]=G6;$[92]=Re;$[93]=Re;$[94]=Re;$[95]=cu("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)$[r]=W6;$[120]=z6;$[121]=Y6;$[122]=X6;$[123]=Q6;$[124]=Re;$[125]=Re;$[126]=Re;$[127]=cu("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)$[r]=j6;$[152]=J6;$[153]=e8;$[154]=t8;$[155]=r8;$[156]=Re;$[157]=Re;$[158]=Re;$[159]=n8;for(let r=160;r<=183;r++)$[r]=o8;$[184]=s8;$[185]=i8;$[186]=a8;$[187]=c8;$[188]=Re;$[189]=Re;$[190]=Re;$[191]=l8;for(let r=192;r<=215;r++)$[r]=u8;$[216]=d8;$[217]=f8;$[218]=h8;$[219]=p8;$[220]=Re;$[221]=Re;$[222]=Re;$[223]=Re;for(let r=224;r<=243;r++)$[r]=cu("simple values are not supported");$[244]=Re;$[245]=Re;$[246]=Re;$[247]=m8;$[248]=cu("simple values are not supported");$[249]=y8;$[250]=w8;$[251]=E8;$[252]=Re;$[253]=Re;$[254]=Re;$[255]=g8;var Jr=[];for(let r=0;r<24;r++)Jr[r]=new F(v.uint,r,1);for(let r=-1;r>=-24;r--)Jr[31-r]=new F(v.negint,r,1);Jr[64]=new F(v.bytes,new Uint8Array(0),1);Jr[96]=new F(v.string,"",1);Jr[128]=new F(v.array,0,1);Jr[160]=new F(v.map,0,1);Jr[244]=new F(v.false,!1,1);Jr[245]=new F(v.true,!0,1);Jr[246]=new F(v.null,null,1);function S8(r){switch(r.type){case v.false:return pn([244]);case v.true:return pn([245]);case v.null:return pn([246]);case v.bytes:return r.value.length?void 0:pn([64]);case v.string:return r.value===""?pn([96]):void 0;case v.array:return r.value===0?pn([128]):void 0;case v.map:return r.value===0?pn([160]):void 0;case v.uint:return r.value<24?pn([Number(r.value)]):void 0;case v.negint:if(r.value>=-24)return pn([31-Number(r.value)])}}var av={float64:!1,mapSorter:uv,quickEncodeToken:S8};function cv(){let r=[];return r[v.uint.major]=Cr,r[v.negint.major]=ru,r[v.bytes.major]=di,r[v.string.major]=Z6,r[v.array.major]=ou,r[v.map.major]=su,r[v.tag.major]=iu,r[v.float.major]=au,r}var R8=cv(),u0=new Ca,uu=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${ui} object contains circular references`);return new r(t,e)}},xo={null:new F(v.null,null),undefined:new F(v.undefined,void 0),true:new F(v.true,!0),false:new F(v.false,!1),emptyArray:new F(v.array,0),emptyMap:new F(v.map,0)},_o={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new F(v.float,r):r>=0?new F(v.uint,r):new F(v.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new F(v.uint,r):new F(v.negint,r)},Uint8Array(r,e,t,n){return new F(v.bytes,r)},string(r,e,t,n){return new F(v.string,r)},boolean(r,e,t,n){return r?xo.true:xo.false},null(r,e,t,n){return xo.null},undefined(r,e,t,n){return xo.undefined},ArrayBuffer(r,e,t,n){return new F(v.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new F(v.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[xo.emptyArray,new F(v.break)]:xo.emptyArray;n=uu.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=lu(i,t,n);return t.addBreakTokens?[new F(v.array,r.length),o,new F(v.break)]:[new F(v.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",s=o?r.keys():Object.keys(r),i=o?r.size:s.length;if(!i)return t.addBreakTokens===!0?[xo.emptyMap,new F(v.break)]:xo.emptyMap;n=uu.createCheck(n,r);let a=[],c=0;for(let l of s)a[c++]=[lu(l,t,n),lu(o?r.get(l):r[l],t,n)];return lv(a,t),t.addBreakTokens?[new F(v.map,i),a,new F(v.break)]:[new F(v.map,i),a]}};_o.Map=_o.Object;_o.Buffer=_o.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))_o[`${r}Array`]=_o.DataView;function lu(r,e={},t){let n=S6(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||_o[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=_o[n];if(!s)throw new Error(`${ui} unsupported type: ${n}`);return s(r,n,e,t)}function lv(r,e){e.mapSorter&&r.sort(e.mapSorter)}function uv(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,s=R8[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function A8(r,e,t,n){if(Array.isArray(e))for(let o of e)A8(r,o,t,n);else t[e.type.major](r,e,n)}function I8(r,e,t){let n=lu(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let s=e[n.type.major];if(s.encodedSize){let i=s.encodedSize(n,t),a=new Ca(i);if(s(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return Ta(a.chunks[0])}}return u0.reset(),A8(u0,n,e,t),u0.toBytes(!0)}function pi(r,e){return e=Object.assign({},av,e),I8(r,R8,e)}var dv={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},du=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=Jr[e];if(t===void 0){let n=$[e];if(!n)throw new Error(`${Z} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},Pa=Symbol.for("DONE"),fu=Symbol.for("BREAK");function fv(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=mi(e,t);if(s===fu){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed array`)}if(s===Pa)throw new Error(`${Z} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function hv(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},s=n?new Map:void 0;for(let i=0;i<r.value;i++){let a=mi(e,t);if(a===fu){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed map`)}if(a===Pa)throw new Error(`${Z} found map but not enough entries (got ${i} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Z} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&s.has(a)||!n&&a in o))throw new Error(`${Z} found repeat map key "${a}"`);let c=mi(e,t);if(c===Pa)throw new Error(`${Z} found map but not enough entries (got ${i} [no value], expected ${r.value})`);n?s.set(a,c):o[a]=c}return n?s:o}function mi(r,e){if(r.done())return Pa;let t=r.next();if(t.type===v.break)return fu;if(t.type.terminal)return t.value;if(t.type===v.array)return fv(t,r,e);if(t.type===v.map)return hv(t,r,e);if(t.type===v.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=mi(r,e);return e.tags[t.value](n)}throw new Error(`${Z} tag not supported (${t.value})`)}throw new Error("unsupported")}function d0(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Z} data to decode must be a Uint8Array`);e=Object.assign({},dv,e);let t=e.tokenizer||new du(r,e),n=mi(t,e);if(n===Pa)throw new Error(`${Z} did not find any content to decode`);if(n===fu)throw new Error(`${Z} got unexpected break`);return[n,r.subarray(t.pos())]}function Dr(r,e){let[t,n]=d0(r,e);if(n.length>0)throw new Error(`${Z} too many terminals, data makes no sense`);return t}var $n="/",T8=new TextEncoder().encode($n),pu=T8[0],Ne=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=L(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==pu)throw new Error("Invalid key")}toString(e="utf8"){return B(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join($n))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=T8),this._buf[0]!==pu){let e=new Uint8Array(this._buf.byteLength+1);e.fill(pu,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===pu;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let s=t[o],i=n[o];if(s<i)return!0;if(s>i)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split($n).slice(1)}type(){return pv(this.baseNamespace())}name(){return mv(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith($n)||(e+=$n),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r($n):new r(e.slice(0,-1).join($n))}child(e){return this.toString()===$n?e:e.toString()===$n?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...gv(e.map(t=>t.namespaces()))])}};function pv(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function mv(r){let e=r.split(":");return e[e.length-1]}function gv(r){return[].concat(...r)}var N8="/pin/",C8="/pinned-block/",f0=to,k8=1;function D8(r){return r.version===0&&(r=r.toV1()),new Ne(`${N8}${r.toString(f0)}`)}var mu=class{datastore;blockstore;dagWalkers;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.dagWalkers=n}async*add(e,t={}){let n=D8(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let s=new rr({concurrency:k8});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>J(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,pi(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=this.dagWalkers[e.code];if(o==null)throw new Error(`No dag walker found for cid codec ${e.code}`);let s=await this.blockstore.get(e,n);yield e;for await(let i of o.walk(s))yield*await t.add(async()=>this.#e(i,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Ne(`${C8}${f0.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=Dr(await this.datastore.get(o,n))}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,pi(s),n),n.onProgress?.(new q("helia:pin:add",e))}}async*rm(e,t={}){let n=D8(e),o=await this.datastore.get(n,t),s=Dr(o);await this.datastore.delete(n,t);let i=new rr({concurrency:k8});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>J(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:N8+(e.cid!=null?`${e.cid.toString(to)}`:"")},e)){let o=ue.parse(t.toString().substring(5),to),s=Dr(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new Ne(`${C8}${f0.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}};var yv=5,gu=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??yv}async start(){await wr(...this.routers)}async stop(){await Er(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new g("No content routers available","ERR_NO_ROUTERS_AVAILABLE");let n=new Kt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of Ot(n.toGenerator(),...gi(this.routers,"findProviders").map(s=>s.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let s=await this.findPeer(o.id,t);return s.multiaddrs.length===0?null:s}catch(s){return this.log.error("could not load multiaddrs for peer %p",o.id,s),null}},{peerId:o.id,signal:t.signal}).catch(s=>{this.log.error("could not load multiaddrs for peer %p",o.id,s)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new g("No content routers available","ERR_NO_ROUTERS_AVAILABLE");await Promise.all(gi(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(gi(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(gi(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new g("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");let n=this,o=Ot(...gi(this.routers,"findPeer").map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s;throw new g("Could not find peer in routing","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new g("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");for await(let n of Ot(...gi(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function gi(r,e){return r.filter(t=>t[e]!=null)}var vo={},yi=r=>{r.addEventListener("message",e=>{yi.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{yi.dispatchEvent("message",r,e)})};yi.addEventListener=(r,e)=>{vo[r]==null&&(vo[r]=[]),vo[r].push(e)};yi.removeEventListener=(r,e)=>{vo[r]!=null&&(vo[r]=vo[r].filter(t=>t===e))};yi.dispatchEvent=function(r,e,t){vo[r]!=null&&vo[r].forEach(n=>n(e,t))};var h0=yi;var p0="lock:worker:request-read",m0="lock:worker:release-read",g0="lock:master:grant-read",y0="lock:worker:request-write",w0="lock:worker:release-write",E0="lock:master:grant-write";var P8=(r=21)=>Math.random().toString().substring(2);var L8=(r,e,t,n,o)=>(s,i)=>{if(i.data.type!==t)return;let a={type:i.data.type,name:i.data.name,identifier:i.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{s.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=d=>{if(d==null||d.data==null)return;let u={type:d.data.type,name:d.data.name,identifier:d.data.identifier};u.type===n&&u.identifier===a.identifier&&(s.removeEventListener("message",l),c())};s.addEventListener("message",l)})}}}))},O8=(r,e,t,n)=>async()=>{let o=P8();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(s=>{let i=a=>{if(a==null||a.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",i),s(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",i)})},wv={singleProcess:!1},B8=r=>{if(r=Object.assign({},wv,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return h0.addEventListener("message",L8(t,"requestReadLock",p0,m0,g0)),h0.addEventListener("message",L8(t,"requestWriteLock",y0,w0,E0)),t}return{isWorker:!0,readLock:t=>O8(t,p0,g0,m0),writeLock:t=>O8(t,y0,E0,w0)}};var ps={},So;async function b0(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Zr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var Ev=(r,e)=>{if(So.isWorker===!0)return{readLock:So.readLock(r,e),writeLock:So.writeLock(r,e)};let t=new Tr({concurrency:1}),n;return{async readLock(){if(n!=null)return b0(n,e);n=new Tr({concurrency:e.concurrency,autoStart:!1});let o=n,s=b0(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),s},async writeLock(){return n=null,b0(t,e)}}},bv={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function La(r){let e=Object.assign({},bv,r);return So==null&&(So=B8(e),So.isWorker!==!0&&(So.addEventListener("requestReadLock",t=>{ps[t.data.name]!=null&&ps[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),So.addEventListener("requestWriteLock",async t=>{ps[t.data.name]!=null&&ps[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),ps[e.name]==null&&(ps[e.name]=Ev(e.name,e)),ps[e.name]}var yu=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=La({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await wr(this.child),this.started=!0}async stop(){await Er(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let s of e){if(await o.pins.isPinned(s))throw new Error("CID was pinned");yield s}}(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var U8=42;function xv(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=ue.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new F(v.tag,U8),new F(v.bytes,t)]}function _v(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function vv(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var M8={float64:!0,typeEncoders:{Object:xv,undefined:_v,number:vv}},DU={...M8,typeEncoders:{...M8.typeEncoders}};function Sv(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return ue.decode(r.subarray(1))}var x0={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};x0.tags[U8]=Sv;var NU={...x0,tags:x0.tags.slice()};var F8=113;var V8=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===v.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===v.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[v.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);e.push(o)}[v.negint.major](e,t){this[v.uint.major](e,t)}[v.bytes.major](e,t){throw new Error(`${ui} unsupported type: Uint8Array`)}[v.string.major](e,t){this.prefix(e);let n=tu(JSON.stringify(t.value));e.push(n.length>32?Ta(n):n)}[v.array.major](e,t){this.prefix(e),this.inRecursive.push({type:v.array,elements:0}),e.push([91])}[v.map.major](e,t){this.prefix(e),this.inRecursive.push({type:v.map,elements:0}),e.push([123])}[v.tag.major](e,t){}[v.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(i.type===v.array)e.push([93]);else if(i.type===v.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${ui} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],s=!1;for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i),!s&&(o[i]===46||o[i]===101||o[i]===69)&&(s=!0);s||(o.push(46),o.push(48)),e.push(o)}};var ms=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${Z} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${Z} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new F(v.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${Z} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Z} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let s=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),i=parseFloat(s);return n?new F(v.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new F(i>=0?v.uint:v.negint,i,this._pos-e):new F(i>=0?v.uint:v.negint,BigInt(s),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Z} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let s=this._pos,i=0;s<this.data.length&&i<65536;s++,i++){let a=this.data[s];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,s));return this._pos=s+1,new F(v.string,c,i)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Z} unexpected end of unicode escape sequence at position ${this._pos}`);let s=0;for(let i=0;i<4;i++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${Z} unexpected unicode escape character at position ${this._pos}`);s=s*16+a,this._pos++}return s},o=()=>{let s=this.ch(),i=null,a=s>239?4:s>223?3:s>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Z} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:s<128&&(i=s);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(s&31)<<6|c&63,u>127&&(i=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(s&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(s&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(i=u))}i===null?(i=65533,a=1):i>65535&&(i-=65536,t.push(i>>>10&1023|55296),i=56320|i&1023),t.push(i),this._pos+=a};for(;!this.done();){let s=this.ch(),i;switch(s){case 92:if(this._pos++,this.done())throw new Error(`${Z} unexpected string termination at position ${this._pos}`);switch(i=this.ch(),this._pos++,i){case 34:case 39:case 92:case 47:t.push(i);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${Z} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new F(v.string,s0(t),this._pos-e);default:if(s<32)throw new Error(`${Z} invalid control character at position ${this._pos}`);s<128?(t.push(s),this._pos++):o()}}throw new Error(`${Z} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new F(v.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new F(v.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new F(v.null,null,4);case 102:return this.expect([102,97,108,115,101]),new F(v.false,!1,5);case 116:return this.expect([116,114,117,101]),new F(v.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${Z} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new F(v.break,void 0,1);if(this.ch()!==44)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new F(v.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new F(v.break,void 0,1);if(this.ch()!==44)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new F(v.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${Z} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function wu(r,e){return e=Object.assign({tokenizer:new ms(r,e)},e),Dr(r,e)}var Iv={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Iv.tags[42]=ue.parse;var $8=297;var XU=new TextDecoder;var QU=new TextEncoder;var Cv=new TextDecoder;function _0(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function Eu(r,e){let t;[t,e]=_0(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function H8(r,e){let t;return[t,e]=_0(r,e),[t&7,t>>3,e]}function kv(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=H8(r,n),s===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=Eu(r,n)}else if(s===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let i;[i,n]=Eu(r,n),e.Name=Cv.decode(i)}else if(s===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=_0(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function q8(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=H8(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=Eu(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=Eu(r,t),n.push(kv(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let i={};return s&&(i.Data=s),i.Links=n||[],i}var jU=new TextEncoder,JU=2**32,eF=2**31;var nF=new TextEncoder;function G8(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var W8=112;function z8(r){let e=G8(r),t=q8(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=ue.decode(o.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(s.Name=o.Name),o.Tsize!==void 0&&(s.Tsize=o.Tsize),s})),n}var Nv={codec:W8,*walk(r){yield*z8(r).Links.map(t=>t.Hash)}},Pv={codec:Tc,*walk(){}},Y8=42,Lv={codec:F8,*walk(r){let e=[],t=[];t[Y8]=n=>{if(n[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");let o=ue.decode(n.subarray(1));return e.push(o),o},Dr(r,{tags:t}),yield*e}},v0=class extends ms{tokenBuffer;constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===v.map){let t=this._next();if(t.type===v.string&&t.value==="/"){let n=this._next();if(n.type===v.string){if(this._next().type!==v.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new F(v.tag,42,0)}if(n.type===v.map){let o=this._next();if(o.type===v.string&&o.value==="bytes"){let s=this._next();if(s.type===v.string){for(let a=0;a<2;a++)if(this._next().type!==v.break)throw new Error("Invalid encoded Bytes form");let i=ot.decode(`m${s.value}`);return new F(v.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Ov={codec:$8,*walk(r){let e=[],t=[];t[Y8]=n=>{let o=ue.parse(n);return e.push(o),o},wu(r,{tags:t,tokenizer:new v0(r,{tags:t,allowIndefinite:!0,allowUndefined:!0,allowNaN:!0,allowInfinity:!0,allowBigInt:!0,strict:!1,rejectDuplicateMapKeys:!1})}),yield*e}},Bv={codec:Y3,*walk(){}};function X8(r=[]){let e={};return[Nv,Pv,Lv,Ov,Bv,...r].forEach(t=>{e[t.codec]=t}),e}var S0=new Ne("/version"),Q8=1;async function Z8(r){if(!await r.has(S0)){await r.put(S0,L(`${Q8}`));return}let e=await r.get(S0),t=B(e);if(parseInt(t,10)!==Q8)throw new Error("Unknown datastore version, a datastore migration may be required")}function j8(r=[]){let e={};return[De,Vf,Mt,...r].forEach(t=>{e[t.code]=t}),e}var Hn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var wi={};Ye(wi,{abortedError:()=>Kv,closeFailedError:()=>Uv,deleteFailedError:()=>e5,getFailedError:()=>Fv,hasFailedError:()=>Vv,notFoundError:()=>Oa,openFailedError:()=>Mv,putFailedError:()=>J8});var qn=Xe($o(),1);function Mv(r){return r=r??new Error("Open failed"),(0,qn.default)(r,"ERR_OPEN_FAILED")}function Uv(r){return r=r??new Error("Close failed"),(0,qn.default)(r,"ERR_CLOSE_FAILED")}function J8(r){return r=r??new Error("Put failed"),(0,qn.default)(r,"ERR_PUT_FAILED")}function Fv(r){return r=r??new Error("Get failed"),(0,qn.default)(r,"ERR_GET_FAILED")}function e5(r){return r=r??new Error("Delete failed"),(0,qn.default)(r,"ERR_DELETE_FAILED")}function Vv(r){return r=r??new Error("Has failed"),(0,qn.default)(r,"ERR_HAS_FAILED")}function Oa(r){return r=r??new Error("Not Found"),(0,qn.default)(r,"ERR_NOT_FOUND")}function Kv(r){return r=r??new Error("Aborted"),(0,qn.default)(r,"ERR_ABORTED")}var Ba=class extends Hn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(ut.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(ut.encode(e.multihash.bytes));if(t==null)throw Oa();return t}has(e){return this.data.has(ut.encode(e.multihash.bytes))}async delete(e){this.data.delete(ut.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:ue.createV1(Tc,Fr(ut.decode(e))),block:t}}};function $v(r){return r[Symbol.asyncIterator]!=null}function Hv(r,e){let t=0;if($v(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Os(r),{value:o,done:s}=n.next();if(s===!0)return function*(){}();let i=e(o,t++);if(typeof i.then=="function")return async function*(){await i&&(yield o);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){i===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)}()}var en=Hv;var VF=cr("blockstore:core:tiered");var t5={...wi};var bu=0,xu=class extends Hn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===bu||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===bu)return e.multihash.digest;if(this.child==null)throw t5.notFoundError();return this.child.get(e)}has(e){return e.multihash.code===bu?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==bu&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function qv(r){return r[Symbol.asyncIterator]!=null}function r5(r){return r?.then!=null}function Gv(r,e){let t=0;if(qv(r))return async function*(){for await(let c of r){let l=e(c,t++);r5(l)&&await l,yield c}}();let n=Os(r),{value:o,done:s}=n.next();if(s===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let c of n){let l=e(c,t++);r5(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var Ma=Gv;var _u=class{child;hashers;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new xu(e.blockstore),this.hashers=e.hashers??{}}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new q("blocks:put:duplicate",e)),e):(n.onProgress?.(new q("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new q("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=en(e,async({cid:s})=>{let i=await this.child.has(s,t);return i&&t.onProgress?.(new q("blocks:put-many:duplicate",s)),!i}),o=Ma(n,async({cid:s,block:i})=>{t.onProgress?.(new q("blocks:put-many:providers:notify",s)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(s,i,t)))});t.onProgress?.(new q("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){t.onProgress?.(new q("blocks:get:providers:get",e));let n=await n5(e,this.components.blockBrokers,this.hashers[e.multihash.code],{...t,log:this.log});return t.onProgress?.(new q("blocks:get:blockstore:put",e)),await this.child.put(e,n,t),t.onProgress?.(new q("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,n,t))),n}return t.onProgress?.(new q("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new q("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Ma(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){t.onProgress?.(new q("blocks:get-many:providers:get",n));let o=await n5(n,this.components.blockBrokers,this.hashers[n.multihash.code],{...t,log:this.log});t.onProgress?.(new q("blocks:get-many:blockstore:put",n)),await this.child.put(n,o,t),t.onProgress?.(new q("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,o,t)))}}))}async delete(e,t={}){t.onProgress?.(new q("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new q("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new q("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},vu=class extends _u{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await wr(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Er(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(o=>o.createSession==null?o:o.createSession(t));return new R0({blockstore:this.child,blockBrokers:n,hashers:this.hashers,logger:this.logger},{root:e})}},R0=class extends _u{closeController;constructor(e,t){super(e),this.closeController=new AbortController,K(1/0,this.closeController.signal),this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=_e([this.closeController.signal,n.signal]);K(1/0,o);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=_e([this.closeController.signal,e.signal]);K(1/0,t);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function Wv(r){return typeof r.retrieve=="function"}var zv=(r,e)=>{if(e==null)throw new g(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`,"ERR_UNKNOWN_HASH_ALG");return async t=>{let n=await e.digest(t);if(!J(n.digest,r.multihash.digest))throw new g("Hash of downloaded block did not match multihash from passed CID","ERR_HASH_MISMATCH")}};async function n5(r,e,t,n){let o=zv(r,t),s=new AbortController,i=_e([s.signal,n.signal]);K(1/0,s.signal,i);let a=[];for(let c of e)Wv(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,d=await c.retrieve(r,{...n,signal:i,validateFn:async u=>{await o(u),l=!0}});return l||await o(d),d}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{s.abort(),i.clear()}}var o5=1,s5=5;var A0=Xe(Kl(),1);var Yv=Math.LN2*Math.LN2,Su=class r{static create(e,t=.005){let n=Xv(e,t);return new r(n)}seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=Qv(e.hashes??8),this.bits=e.bits??1024,this.buffer=pe(Math.ceil(this.bits/8))}add(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.seeds.length;t++){let o=A0.default.x86.hash32(e,this.seeds[t])%this.bits;this.setbit(o)}}has(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.seeds.length;t++){let o=A0.default.x86.hash32(e,this.seeds[t])%this.bits;if(!this.getbit(o))return!1}return!0}clear(){this.buffer.fill(0)}setbit(e){let t=0,n=e;for(;n>7;)t++,n-=8;let o=this.buffer[t];o|=1<<n,this.buffer[t]=o}getbit(e){let t=0,n=e;for(;n>7;)t++,n-=8;return(this.buffer[t]&1<<n)!==0}};function Xv(r,e=.005){let t=Math.round(-1*r*Math.log(e)/Yv),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function Qv(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(it(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var gs=class extends ge{intialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),K(1/0,this),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=Su.create(this.maxProviders)}async retrieve(e,t={}){let n=ot.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let s=ee();if(this.requests.set(n,s.promise),this.providers.length===0){let l=!1;this.intialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.intialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.intialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let i=!1,a=new rr({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{i=!0,s.resolve(l.detail.result)}),a.addEventListener("idle",()=>{i||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let d=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(d)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),s.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),s.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(d=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,d)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await s.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=ee(),s=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let i of this.findNewProviders(e,n)){if(s===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(i)&&(this.log("found %d/%d new providers",s,this.maxProviders),this.providers.push(i),this.safeDispatchEvent("provider",{detail:i}),s++,s===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",s);break}}if(this.log("found %d/%d new session peers",s,this.maxProviders),s<t)throw new g(`Found ${s} of ${t} ${this.name} providers for ${e}`,"ERR_INSUFFICIENT_PROVIDERS_FOUND")}).catch(i=>{this.log.error("error searching routing for potential session peers for %c",e,i.errors??i),o.reject(i)}),o.promise}};var Ru=class{blockstore;datastore;pins;logger;routing;dagWalkers;hashers;dns;metrics;log;constructor(e){this.logger=e.logger??Eo(),this.log=this.logger.forComponent("helia"),this.hashers=j8(e.hashers),this.dagWalkers=X8(e.dagWalkers),this.dns=e.dns??Jl(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,hashers:this.hashers,dagWalkers:this.dagWalkers,logger:this.logger,blockBrokers:[],dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new gu(t,{routers:(e.routers??[]).flatMap(o=>{let s=[o];return o[an]!=null&&s.push(o[an]),o[cn]!=null&&s.push(o[cn]),s}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new vu(t);this.pins=new mu(e.datastore,n,this.dagWalkers),this.blockstore=new yu(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await Z8(this.datastore),await wr(this.blockstore,this.datastore,this.routing)}async stop(){await Er(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await $t(o.deleteMany(async function*(){for await(let{cid:s}of o.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new q("helia:gc:deleted",s))}catch(i){n.log.error("Error during gc",i),e.onProgress?.(new q("helia:gc:error",i))}}()))}finally{t()}this.log("gc finished")}};var I0=class extends gs{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toBytes()}equals(e,t){return e.equals(t)}};function i5(r,e){return new I0(r,e)}var Au=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var T0=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Iu(r){let{name:e,metrics:t}=r,n;return t!=null?n=new T0({name:e,metrics:t}):n=new Map,n}function Zv(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Lt(r);e.push(t),r=r.slice(Se(t))}return e}var a5=Zv;var Tu=class extends ge{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),K(1/0,this),this.peers=Ra({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=Iu({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=B(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??et.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===et.WantHave&&t.wantType===et.WantBlock&&(o.wantType=et.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===et.WantBlock?(await tr(this,"block",t?.signal,{filter:a=>J(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await tr(this,"presence",t?.signal,{filter:i=>J(e.multihash.digest,i.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=ee(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Vn;for(let[s,i]of this.wants.entries())t.has(s)||i.cancel||(n.add(s),o.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:i.priority,wantType:i.wantType,cancel:i.cancel,sendDontHave:i.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let s of n)t.add(s)}catch(s){this.log.error("error sending full wantlist to new peer",s)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=B(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Vn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:et.WantHave,priority:1}),await this.network.sendMessage(t,o),(await tr(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&J(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:et.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Vn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:et.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await tr(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&J(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=B(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p with %d blocks",e,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let s=a5(o.prefix),i=s[0],a=s[1],c=s[2],l=c===De.code?De:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let d=l.digest(o.data);d.then!=null&&(d=await d);let u=ue.create(i===0?0:1,a,d);this.log("received block from %p for %c",e,u),this.safeDispatchEvent("block",{detail:{sender:e,cid:u,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:u,has:!0,block:o.data}});let h=B(u.multihash.bytes,"base64"),f=this.wants.get(h);f!=null&&(f.cancel=!0,n=!0)}for(let{cid:o,type:s}of t.blockPresences){let i=ue.decode(o);this.log("received %s from %p for %c",s,e,i),this.safeDispatchEvent("presence",{detail:{sender:e,cid:i,has:s===_r.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Vn(!0);for(let[o,s]of this.wants.entries())s.cancel||(t.add(o),n.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:1,wantType:et.WantBlock,cancel:!1,sendDontHave:!1}));if(n.wantlist.size===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var Cu=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new Au(e),this.network=new Oc(e,t),this.peerWantLists=new Wl({...e,network:this.network},t),this.wantList=new Tu({...e,network:this.network},t)}createSession(e={}){return i5({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=_e([n.signal,t.signal]);K(1/0,n.signal,o),this.network.findAndConnect(e,{...t,signal:o}).catch(s=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,s)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var c5=(r,e={})=>new Cu(r,e);var C0=class{bitswap;started;constructor(e,t={}){let{hashers:n}=e;this.bitswap=c5(e,{hashLoader:{getHasher:async o=>{let s;if(typeof o=="string"?s=Object.values(n).find(i=>i.name===o):s=n[o],s!=null)return s;throw new Error(`Could not load hasher for code/name "${o}"`)}},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,o,s)=>{await this.bitswap.notify(n,o,s)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function k0(r={}){return e=>new C0(e,r)}var ku=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let h=Number.parseInt(u,e);if(!Number.isNaN(h))return h});if(d===void 0)break;if(s*=e,s+=d,s>l||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&c&&i>1?void 0:s})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];t[o]=s>>8,t[o+1]=s&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var l5=45,jv=15,Ei=new ku;function D0(r){if(!(r.length>jv))return Ei.new(r).parseWith(()=>Ei.readIPv4Addr())}function N0(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>l5))return Ei.new(r).parseWith(()=>Ei.readIPv6Addr())}function Du(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>l5))return Ei.new(r).parseWith(()=>Ei.readIPAddr())}function bi(r){return!!D0(r)}function xi(r){return!!N0(r)}function Nu(r){return!!Du(r)}var d5=Xe(u5(),1),Jv=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],eS=Jv.map(r=>new d5.Netmask(r));function P0(r){for(let e of eS)if(e.contains(r))return!0;return!1}function tS(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function rS(r){let e=r.split(":");if(e.length<2)return!1;let t=e[e.length-1].padStart(4,"0"),n=e[e.length-2].padStart(4,"0"),o=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return P0(o)}function nS(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function oS(r){let e=r.split(":"),t=e[e.length-1];return P0(t)}function sS(r){return/^::$/.test(r)||/^::1$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function zt(r){return bi(r)?P0(r):tS(r)?rS(r):nS(r)?oS(r):xi(r)?sS(r):void 0}var AK=parseInt("0xFFFF",16),IK=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var p5=bi,uS=xi,L0=function(r){let e=0;if(r=r.toString().trim(),p5(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(uS(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=p5(t[n]),i;s&&(i=L0(t[n]),t[n]=B(i.slice(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,B(i.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let s=parseInt(t[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},m5=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let s=0;s<t;s++)o.push(r[e+s]);return o.join(".")}if(t===16){let o=[];for(let s=0;s<t;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var _i={},O0={},fS=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];fS.forEach(r=>{let e=hS(...r);O0[e.code]=e,_i[e.name]=e});function hS(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function te(r){if(typeof r=="number"){if(O0[r]!=null)return O0[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(_i[r]!=null)return _i[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var c$=te("ip4"),l$=te("ip6"),u$=te("ipcidr");function F0(r,e){switch(te(r).code){case 4:case 41:return mS(e);case 42:return U0(e);case 6:case 273:case 33:case 132:return w5(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return U0(e);case 421:return ES(e);case 444:return y5(e);case 445:return y5(e);case 466:return wS(e);case 481:return globalThis.encodeURIComponent(U0(e));default:return B(e,"base16")}}function V0(r,e){switch(te(r).code){case 4:return g5(e);case 41:return g5(e);case 42:return M0(e);case 6:case 273:case 33:case 132:return K0(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return M0(e);case 421:return gS(e);case 444:return bS(e);case 445:return xS(e);case 466:return yS(e);case 481:return M0(globalThis.decodeURIComponent(e));default:return L(e,"base16")}}var B0=Object.values(br).map(r=>r.decoder),pS=function(){let r=B0[0].or(B0[1]);return B0.slice(2).forEach(e=>r=r.or(e)),r}();function g5(r){if(!Nu(r))throw new Error("invalid ip address");return L0(r)}function mS(r){let e=m5(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!Nu(e))throw new Error("invalid ip address");return e}function K0(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function w5(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function M0(r){let e=L(r),t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function U0(r){let e=Lt(r);if(r=r.slice(Se(e)),r.length!==e)throw new Error("inconsistent lengths");return B(r)}function gS(r){let e;r[0]==="Q"||r[0]==="1"?e=Fr(We.decode(`z${r}`)).bytes:e=ue.parse(r).multihash.bytes;let t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function yS(r){let e=pS.decode(r),t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function wS(r){let e=Lt(r),t=r.slice(Se(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+B(t,"base64url")}function ES(r){let e=Lt(r),t=r.slice(Se(e));if(t.length!==e)throw new Error("inconsistent lengths");return B(t,"base58btc")}function bS(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=ut.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=K0(n);return ve([t,o],t.length+o.length)}function xS(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=ut.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=K0(n);return ve([t,o],t.length+o.length)}function y5(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=B(e,"base32"),o=w5(t);return`${n}:${o}`}function E5(r){r=$0(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let s=0;s<o.length;s++){let i=o[s],a=te(i);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw x5("invalid address: "+r);if(a.path===!0){n=$0(o.slice(s).join("/")),e.push([a.code,V0(a.code,n)]),t.push([a.code,n]);break}let c=V0(a.code,o[s]);e.push([a.code,c]),t.push([a.code,F0(a.code,c)])}return{string:b5(t),bytes:q0(e),tuples:e,stringTuples:t,path:n}}function H0(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=Lt(r,o),i=Se(s),a=te(s),c=_S(a,r.slice(o+i));if(c===0){e.push([s]),t.push([s]),o+=i;continue}let l=r.slice(o+i,o+i+c);if(o+=c+i,o>r.length)throw x5("Invalid address Uint8Array: "+B(r,"base16"));e.push([s,l]);let d=F0(s,l);if(t.push([s,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:b5(t),tuples:e,stringTuples:t,path:n}}function b5(r){let e=[];return r.map(t=>{let n=te(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),$0(e.join("/"))}function q0(r){return ve(r.map(e=>{let t=te(e[0]),n=Uint8Array.from(Ve(t.code));return e.length>1&&e[1]!=null&&(n=ve([n,e[1]])),n}))}function _S(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Lt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+Se(t)}}function $0(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function x5(r){return new Error("Error parsing address: "+r)}var vS=Symbol.for("nodejs.util.inspect.custom"),G0=Symbol.for("@multiformats/js-multiaddr/multiaddr"),SS=[te("dns").code,te("dns4").code,te("dns6").code,te("dnsaddr").code],Pu=class r{bytes;#e;#t;#r;#o;[G0]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=H0(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=E5(e)}else if(Ro(e))t=H0(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,s="",i=te("tcp"),a=te("udp"),c=te("ip4"),l=te("ip6"),d=te("dns6"),u=te("ip6zone");for(let[f,p]of this.stringTuples())f===u.code&&(s=`%${p??""}`),SS.includes(f)&&(t=i.name,o=443,n=`${p??""}${s}`,e=f===d.code?6:4),(f===i.code||f===a.code)&&(t=te(f).name,o=parseInt(p??"")),(f===c.code||f===l.code)&&(t=te(f).name,n=`${p??""}${s}`,e=f===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},te(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>te(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(q0(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===_i.p2p.code&&e.push([n,o]),n===_i["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?B(We.decode(`z${n}`),"base58btc"):B(ue.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return J(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(s=>s.resolvable);if(t==null)return[this];let n=vi.get(t.name);if(n==null)throw new g(`no available resolver for ${t.name}`,"ERR_NO_AVAILABLE_RESOLVER");return(await n(this,e)).map(s=>j(s))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[vS](){return`Multiaddr(${this.#e})`}};var vi=new Map;function Ro(r){return!!r?.[G0]}function j(r){return new Pu(r)}var RS=r=>r.toString().split("/").slice(1),Fa=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Ie=r=>({match:e=>Fa(t=>t===r).match(e),pattern:r}),Bu=()=>({match:r=>Fa(e=>typeof e=="string").match(r),pattern:"{string}"}),Mu=()=>({match:r=>Fa(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),bt=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{We.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),Lu=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{kf.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),ht=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Nr=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),Pe=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function tt(...r){function e(o){let s=RS(o);for(let i of r){let a=i.match(s);if(a===!1)return!1;s=a}return s}function t(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matches:t,exactMatch:n}}var z0=Pe(Ie("dns4"),Bu()),Y0=Pe(Ie("dns6"),Bu()),X0=Pe(Ie("dnsaddr"),Bu()),_5=Pe(Ie("dns"),Bu()),F$=tt(z0),V$=tt(Y0),K$=tt(X0),Uu=tt(Nr(_5,X0,z0,Y0)),v5=Pe(Ie("ip4"),Fa(bi)),S5=Pe(Ie("ip6"),Fa(xi)),R5=Nr(v5,S5),mn=Nr(R5,_5,z0,Y0,X0),A5=tt(mn),$$=tt(v5),H$=tt(S5),I5=tt(R5),Q0=Pe(mn,Ie("tcp"),Mu()),Va=Pe(mn,Ie("udp"),Mu()),q$=tt(Q0),G$=tt(Va),Z0=Pe(Va,Ie("quic")),Fu=Pe(Va,Ie("quic-v1")),AS=Nr(Z0,Fu),W$=tt(Z0),z$=tt(Fu),W0=Nr(mn,Q0,Va,Z0,Fu),T5=Nr(Pe(W0,Ie("ws"),ht(bt()))),Y$=tt(T5),C5=Nr(Pe(W0,Ie("wss"),ht(bt())),Pe(W0,Ie("tls"),Ie("ws"),ht(bt()))),X$=tt(C5),k5=Pe(Va,Ie("webrtc-direct"),ht(Lu()),ht(Lu()),ht(bt())),D5=tt(k5),N5=Pe(Fu,Ie("webtransport"),ht(Lu()),ht(Lu()),ht(bt())),Vu=tt(N5),Ou=Nr(T5,C5,Pe(Q0,ht(bt())),Pe(AS,ht(bt())),Pe(mn,ht(bt())),k5,N5,bt()),Q$=tt(Ou),IS=Pe(Ou,Ie("p2p-circuit"),bt()),ys=tt(IS),TS=Nr(Pe(Ou,Ie("p2p-circuit"),Ie("webrtc"),ht(bt())),Pe(Ou,Ie("webrtc"),ht(bt())),Ie("webrtc")),P5=tt(TS),CS=Nr(Pe(mn,Ie("tcp"),Mu(),Ie("http"),ht(bt())),Pe(mn,Ie("http"),ht(bt()))),L5=tt(CS),kS=Nr(Pe(mn,Ie("tcp"),Nr(Pe(Ie("443"),Ie("http")),Pe(Mu(),Ie("https"))),ht(bt())),Pe(mn,Ie("tls"),Ie("http"),ht(bt())),Pe(mn,Ie("https"),ht(bt()))),O5=tt(kS);var DS=[te("tcp").code,te("dns").code,te("dnsaddr").code,te("dns4").code,te("dns6").code];function B5(r){let e;try{e=te("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function M5(r){return r.some(([e,t])=>e===te("tls").code)}function Yt(r,e,t){let n=U5[te(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${te(r).name}`);let o=n(e,t);return r===te("ip6").code?`[${o}]`:o}var U5={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${Yt(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${Yt(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Yt(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Yt(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=M5(e),n=B5(e);if(t&&n!==null)return`https://${n}`;let o=t?"https://":"http://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=Yt(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},"http-path":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=Yt(t[0],t[1]??"",e),o=decodeURIComponent(r);return`${n}/${o}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return Yt(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return Yt(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=Yt(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=M5(e),n=B5(e);if(t&&n!==null)return`wss://${n}`;let o=t?"wss://":"ws://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=Yt(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=Yt(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Yt(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Yt(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Yt(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function Ku(r,e){let n=j(r).stringTuples(),o=n.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let s=te(o[0]),i=U5[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&DS.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var $u=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;constructor(e,t){this.url=e instanceof URL?e:new URL(e),this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return ot.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let o=this.#l(e),s=new AbortController,i=()=>{s.abort()};t?.addEventListener("abort",i);try{let a=this.#a.get(o);return a==null&&(this.#e++,a=fetch(n.toString(),{signal:s.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"}).then(async c=>{if(this.log("GET %s %d",n,c.status),!c.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await c.arrayBuffer())}),this.#a.set(o,a)),await a}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`unable to fetch raw block for CID ${e}`))}finally{t?.removeEventListener("abort",i),this.#a.delete(o)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#o/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#o,pendingResponses:this.#a.size}}};function NS(r,e,t){return r.filter(n=>O5.matches(n)||e&&L5.matches(n)?t||Uu.matches(n)?!0:zt(n.toOptions().host)===!1:!1)}async function*Hu(r,e,t,n,o,s){for await(let i of e.findProviders(r,s)){let a=NS(i.multiaddrs,n,o);if(a.length===0)continue;let c=Ku(a[0]);yield new $u(c,t)}}var j0=class extends gs{routing;allowInsecure;allowLocal;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??qu,this.allowLocal=t.allowLocal??Gu}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*Hu(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function F5(r,e){return new j0(r,e)}var Wu=class{allowInsecure;allowLocal;routing;log;logger;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.logger=e.logger,this.routing=e.routing,this.allowInsecure=t.allowInsecure??qu,this.allowLocal=t.allowLocal??Gu}async retrieve(e,t={}){let n=[];for await(let o of Hu(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)){this.log("getting block for %c from %s",e,o.url);try{let s=await o.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(s)}catch(i){this.log.error("failed to validate block for %c from %s",e,o.url,i);continue}return s}catch(s){if(this.log.error("failed to get block for %c from %s",e,o.url,s),s instanceof Error?n.push(s):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${o.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,o.url);break}}}throw n.length>0?new AggregateError(n,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}createSession(e={}){return F5({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure})}};var qu=!1,Gu=!1;function J0(r={}){return e=>new Wu(e,r)}async function*zu(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var BS=Xe($o(),1);var MS=Xe(Yu(),1);var V5="ERR_IPNS_EXPIRED_RECORD",Xu="ERR_UNRECOGNIZED_VALIDITY";var Gn="ERR_SIGNATURE_VERIFICATION";var t2="ERR_UNDEFINED_PARAMETER",K5="ERR_INVALID_RECORD_DATA",$5="ERR_INVALID_VALUE",H5="ERR_INVALID_EMBEDDED_KEY";var q5="ERR_RECORD_TOO_LARGE";var Xt;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.value!=null&&(s.uint32(10),s.bytes(o.value)),o.signatureV1!=null&&(s.uint32(18),s.bytes(o.signatureV1)),o.validityType!=null&&(s.uint32(24),r.ValidityType.codec().encode(o.validityType,s)),o.validity!=null&&(s.uint32(34),s.bytes(o.validity)),o.sequence!=null&&(s.uint32(40),s.uint64(o.sequence)),o.ttl!=null&&(s.uint32(48),s.uint64(o.ttl)),o.pubKey!=null&&(s.uint32(58),s.bytes(o.pubKey)),o.signatureV2!=null&&(s.uint32(66),s.bytes(o.signatureV2)),o.data!=null&&(s.uint32(74),s.bytes(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.value=o.bytes();break;case 2:i.signatureV1=o.bytes();break;case 3:i.validityType=r.ValidityType.codec().decode(o);break;case 4:i.validity=o.bytes();break;case 5:i.sequence=o.uint64();break;case 6:i.ttl=o.uint64();break;case 7:i.pubKey=o.bytes();break;case 8:i.signatureV2=o.bytes();break;case 9:i.data=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ne(o,r.codec()),r.decode=o=>re(o,r.codec())})(Xt||(Xt={}));var pr=Xe($o(),1);var W5=cr("ipns:utils"),z5=L("/ipns/"),PS=114,Y5=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw W5.error(n),(0,pr.default)(n,t2)}let t;if(e.pubKey!=null){try{t=Xr(e.pubKey)}catch(o){throw W5.error(o),o}if(!(await dt(e.pubKey)).equals(r))throw(0,pr.default)(new Error("Embedded public key did not match PeerID"),H5)}else r.publicKey!=null&&(t=Xr(r.publicKey));if(t!=null)return t;throw(0,pr.default)(new Error("no public key is available"),t2)};var X5=r=>{let e=L("ipns-signature:");return ve([e,r])},Ka=r=>"signatureV1"in r?Xt.encode({value:L(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:L(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):Xt.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data});function gn(r){let e=Xt.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw(0,pr.default)(new Error("missing data or signatureV2"),Gn);let t=Z5(e.data),n=LS(t.Value),o=B(t.Validity);if(e.value!=null&&e.signatureV1!=null)return OS(e),{value:n,validityType:Xt.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:Xt.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}var r2=r=>ve([z5,r.toBytes()]),Q5=r=>je(r.slice(z5.length));var Z5=r=>{let e=Dr(r);if(e.ValidityType===0)e.ValidityType=Xt.ValidityType.EOL;else throw(0,pr.default)(new Error("Unknown validity type"),Xu);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e},LS=r=>{if(r!=null){if(Ns(r))return`/ipns/${r.toCID().toString(to)}`;if(r instanceof Uint8Array){let n=B(r);n.startsWith("/")&&(r=n)}let e=r.toString().trim();if(e.startsWith("/")&&e.length>1)return e;let t=ue.asCID(r);if(t!=null)return t.code===PS?`/ipns/${t.toString(to)}`:`/ipfs/${t.toV1().toString()}`;try{return r instanceof Uint8Array?`/ipfs/${ue.decode(r).toV1().toString()}`:`/ipfs/${ue.parse(e).toV1().toString()}`}catch{}}throw(0,pr.default)(new Error("Value must be a valid content path starting with /"),$5)},OS=r=>{if(r.data==null)throw(0,pr.default)(new Error("Record data is missing"),K5);let e=Z5(r.data);if(!J(e.Value,r.value??new Uint8Array(0)))throw(0,pr.default)(new Error('Field "value" did not match between protobuf and CBOR'),Gn);if(!J(e.Validity,r.validity??new Uint8Array(0)))throw(0,pr.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Gn);if(e.ValidityType!==r.validityType)throw(0,pr.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Gn);if(e.Sequence!==r.sequence)throw(0,pr.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Gn);if(e.TTL!==r.ttl)throw(0,pr.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Gn)};var HH=cr("ipns"),qH=Mt.code,GH=60*60*1e9,US="/ipns/",WH=US.length;var $a=Xe($o(),1),j5=Xe(Yu(),1);var Qu=cr("ipns:validator"),FS=1024*10,VS=async(r,e)=>{let t=gn(e),n;try{let o=X5(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Qu.error("record signature verification failed"),(0,$a.default)(new Error("record signature verification failed"),Gn);if(t.validityType===Xt.ValidityType.EOL){if(j5.default.fromString(t.validity).toDate().getTime()<Date.now())throw Qu.error("record has expired"),(0,$a.default)(new Error("record has expired"),V5)}else if(t.validityType!=null)throw Qu.error("unrecognized validity type"),(0,$a.default)(new Error("unrecognized validity type"),Xu);Qu("ipns record for %s is valid",t.value)};async function Zu(r,e){if(e.byteLength>FS)throw(0,$a.default)(new Error("record too large"),q5);let t=Q5(r),n=gn(e),o=await Y5(t,n);await VS(o,e)}async function*Ha(r){let e=/\r?\n/,t=new TextDecoder("utf8"),n="";for await(let o of r){typeof o=="string"&&(o=new TextEncoder().encode(o)),n+=t.decode(o,{stream:!0});let s=n.split(e);n=s.pop()??"";for(let i=0;i<s.length;i++)yield JSON.parse(s[i])}n+=t.decode(),n!==""&&(yield JSON.parse(n))}function KS(r){return r[Symbol.asyncIterator]!=null}function $S(r){if(KS(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var ws=$S;var n2=L("/ipns/");function J5(r){return J(r.subarray(0,n2.byteLength),n2)}var eg=r=>je(r.slice(n2.length)),ju=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Gt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async put(e,t,n){if(!J5(e))return;let o=eg(e),s=gn(t);await this.client.putIPNS(o,s,n)}async get(e,t){if(!J5(e))throw new g("Not found","ERR_NOT_FOUND");let n=eg(e);try{let o=await this.client.getIPNS(n,t);return Ka(o)}catch(o){throw o.code==="ERR_BAD_RESPONSE"?new g("Not found","ERR_NOT_FOUND"):o}}},Ju=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await ws(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new g("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){}};var Qt=cr("delegated-routing-v1-http-api-client"),tg={concurrentRequests:4,timeout:3e4},e1=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal),this.httpQueue=new Tr({concurrency:t.concurrentRequests??tg.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??tg.timeout,this.contentRouting=new ju(this),this.peerRouting=new Ju(this)}get[an](){return this.contentRouting}get[cn](){return this.peerRouting}isStarted(){return this.started}start(){this.started=!0}stop(){this.httpQueue.clear(),this.shutDownController.abort(),this.started=!1}async*getProviders(e,t={}){Qt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=_e([this.shutDownController.signal,n,t.signal]);K(1/0,n,o);let s=ee(),i=ee();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=`${this.clientUrl}routing/v1/providers/${e.toString()}`,l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new g("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new g("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new g("Routing response had no body","ERR_BAD_RESPONSE");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let h of u.Providers){let f=this.#e(h);f!=null&&(yield f)}}else for await(let u of Ha(zu(l.body))){let h=this.#e(u);h!=null&&(yield h)}}catch(a){Qt.error("getProviders errored:",a)}finally{o.clear(),i.resolve(),Qt("getProviders finished: %c",e)}}async*getPeers(e,t={}){Qt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=_e([this.shutDownController.signal,n,t.signal]);K(1/0,n,o);let s=ee(),i=ee();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`,l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new g("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new g("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new g("Routing response had no body","ERR_BAD_RESPONSE");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let h of u.Peers){let f=this.#e(h);f!=null&&(yield f)}}else for await(let u of Ha(zu(l.body))){let h=this.#e(u);h!=null&&(yield h)}}catch(a){Qt.error("getPeers errored:",a)}finally{o.clear(),i.resolve(),Qt("getPeers finished: %c",e)}}async getIPNS(e,t={}){Qt("getIPNS starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=_e([this.shutDownController.signal,n,t.signal]);K(1/0,n,o);let s=ee(),i=ee();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await s.promise;let l=await fetch(a,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o});if(Qt("getIPNS GET %s %d",a,l.status),l.status===404)throw new g("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new g("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new g("GET ipns response had no body","ERR_BAD_RESPONSE");let d=await l.arrayBuffer(),u=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await Zu(r2(e),u),gn(u)}catch(c){throw Qt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),i.resolve(),Qt("getIPNS finished: %c",e)}}async putIPNS(e,t,n={}){Qt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=_e([this.shutDownController.signal,o,n.signal]);K(1/0,o,s);let i=ee(),a=ee();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await i.promise;let l=Ka(t),u=await fetch(c,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s});if(Qt("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new g("PUT ipns response had status other than 200","ERR_BAD_RESPONSE")}catch(l){throw Qt.error("putIPNS PUT %s error:",c,l.stack),l}finally{s.clear(),a.resolve(),Qt("putIPNS finished: %c",e)}}#e(e){let t=[],n=e.Addrs?.map(j)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:me(e.ID),Addrs:n,Protocols:t}}};function rg(r,e={}){return new e1(new URL(r),e)}var ng="[a-fA-F\\d:]",Ao=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${ng})|(?<=${ng})(?=\\s|$))`:"",tn="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",ct="[a-fA-F\\d]{1,4}",t1=`
7
+ `)}`:`${t} :`}};_4=go;z.Constructed=_4;go.NAME="CONSTRUCTED";var ul=class extends kt{fromBER(e,t,n){return t}toBER(e){return Yr}};ul.override="EndOfContentValueBlock";var v4,dl=class extends wt{constructor(e={}){super(e,ul),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};v4=dl;z.EndOfContent=v4;dl.NAME=pa;var S4,yo=class extends wt{constructor(e={}){super(e,kt),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};S4=yo;z.Null=S4;yo.NAME="NULL";var fl=class extends Fn(kt){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ge.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,n){let o=ge.BufferSourceConverter.toUint8Array(e);return Un(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,Uh.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};fl.NAME="BooleanValueBlock";var R4,hl=class extends wt{constructor(e={}){super(e,fl),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};R4=hl;z.Boolean=R4;hl.NAME="BOOLEAN";var pl=class extends Fn(hn){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=hn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let s=0;s<this.value.length;s++){let i=this.value[s].constructor.NAME;if(i===pa){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==w4)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?hn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};pl.NAME="OctetStringValueBlock";var A4,Bn=class r extends wt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},pl),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(s.byteLength){let i=$l(s,0,s.byteLength);i.offset!==-1&&i.offset===n&&(this.valueBlock.value=[i.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?go.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${ge.Convert.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof r&&e.push(t.valueBlock.valueHexView);return ge.BufferSourceConverter.concat(e)}};A4=Bn;z.OctetString=A4;Bn.NAME=w4;var ml=class extends Fn(hn){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=hn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===pa){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==E4)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let s=ge.BufferSourceConverter.toUint8Array(e);if(!Un(this,s,t,n))return-1;let i=s.subarray(t,t+n);if(this.unusedBits=i[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=i.subarray(1);try{if(a.byteLength){let c=$l(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=i.subarray(1),this.blockLength=i.length,t+n}toBER(e,t){if(this.isConstructed)return hn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return Yr;let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};ml.NAME="BitStringValueBlock";var I4,ni=class extends wt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},ml),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return go.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let o of t)e.push(o.toString(2).padStart(8,"0"));let n=e.join("");return`${this.constructor.NAME} : ${n.substring(0,n.length-this.valueBlock.unusedBits)}`}}};I4=ni;z.BitString=I4;ni.NAME=E4;var T4;function Zx(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<i?i:c,u=0;for(let f=d;f>=0;f--,u++){switch(!0){case u<a.length:l=s[i-u]+a[c-u]+t[0];break;default:l=s[i-u]+t[0]}switch(t[0]=l/10,!0){case u>=s.length:s=nl(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=nl(t,s)),s}function y4(r){if(r>=fa.length)for(let e=fa.length;e<=r;e++){let t=new Uint8Array([0]),n=fa[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let s=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=s[0]/10,n[o]=s[0]%10}t[0]>0&&(n=nl(t,n)),fa.push(n)}return fa[r]}function jx(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=s[i-d]-a[c-d]-t,!0){case l<0:t=1,s[i-d]=l+10;break;default:t=0,s[i-d]=l}if(t>0)for(let u=i-c+1;u>=0;u--,d++)if(l=s[i-d]-t,l<0)t=1,s[i-d]=l+10;else{t=0,s[i-d]=l;break}return s.slice()}var ma=class extends Fn(kt){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=Uh.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(p4(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let s=this.fromBER(e,t,n);if(s===-1)return s;let i=this.valueHexView;return i[0]===0&&i[1]&128?this.valueHexView=i.subarray(1):o!==0&&i.length<o&&(o-i.length>1&&(o=i.length+1),this.valueHexView=i.subarray(o-i.length)),s}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,s=this.valueHexView,i="",a=!1;for(let c=s.byteLength-1;c>=0;c--){o=s[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=jx(y4(n),t),i="-";break;default:t=Zx(t,y4(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=g4.charAt(t[c]));return a===!1&&(i+=g4.charAt(0)),i}};T4=ma;ma.NAME="IntegerValueBlock";Object.defineProperty(T4.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var C4,it=class r extends wt{constructor(e={}){super(e,ma),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return ol(),BigInt(this.valueBlock.toString())}static fromBigInt(e){ol();let t=BigInt(e),n=new ha,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(ge.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ge.Convert.ToHex(a)}`)+t,d=ge.BufferSourceConverter.toUint8Array(ge.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else s[0]&128&&n.write(new Uint8Array([0])),n.write(s);return new r({valueHex:n.final()})}convertToDER(){let e=new r({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new r({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};C4=it;z.Integer=C4;it.NAME="INTEGER";var k4,gl=class extends it{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};k4=gl;z.Enumerated=k4;gl.NAME="ENUMERATED";var ga=class extends Fn(kt){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=ge.BufferSourceConverter.toUint8Array(e);if(!Un(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=ls(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){ol();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=mo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Yr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}return n}toString(){let e="";if(this.isHexOnly)e=ge.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};ga.NAME="sidBlock";var yl=class extends kt{constructor({value:e=oi,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new ga;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.value.length===0&&(s.isFirstSid=!0),this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,Yr;t.push(o)}return Fh(t)}fromString(e){this.value=[];let t=0,n=0,o="",s=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,s){let i=this.value[0],a=0;switch(i.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;i.valueDec=c+a,s=!1}else{let i=new ga;if(o>Number.MAX_SAFE_INTEGER){ol();let a=BigInt(o);i.valueBigInt=a}else if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return;this.value.length||(i.isFirstSid=!0,s=!0),this.value.push(i)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};yl.NAME="ObjectIdentifierValueBlock";var D4,zr=class extends wt{constructor(e={}){super(e,yl),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};D4=zr;z.ObjectIdentifier=D4;zr.NAME="OBJECT IDENTIFIER";var ya=class extends Fn(On){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=ge.BufferSourceConverter.toUint8Array(e);if(!Un(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=ls(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=mo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Yr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}return n.buffer}toString(){let e="";return this.isHexOnly?e=ge.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};ya.NAME="relativeSidBlock";var wl=class extends kt{constructor({value:e=oi,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new ya;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let s=this.value[o].toBER(e);if(s.byteLength===0)return this.error=this.value[o].error,Yr;n.push(s)}return Fh(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let s=new ya;if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return!0;this.value.push(s)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};wl.NAME="RelativeObjectIdentifierValueBlock";var N4,El=class extends wt{constructor(e={}){super(e,wl),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};N4=El;z.RelativeObjectIdentifier=N4;El.NAME="RelativeObjectIdentifier";var P4,ht=class extends go{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};P4=ht;z.Sequence=P4;ht.NAME="SEQUENCE";var L4,bl=class extends go{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};L4=bl;z.Set=L4;bl.NAME="SET";var xl=class extends Fn(kt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=oi}toJSON(){return{...super.toJSON(),value:this.value}}};xl.NAME="StringValueBlock";var _l=class extends xl{};_l.NAME="SimpleStringValueBlock";var Ut=class extends al{constructor({...e}={}){super(e,_l)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,ge.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Ut.NAME="SIMPLE STRING";var vl=class extends Ut{fromBuffer(e){this.valueBlock.valueHexView=ge.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=ge.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=ge.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(ge.Convert.FromUtf8String(e)),this.valueBlock.value=e}};vl.NAME="Utf8StringValueBlock";var O4,Mn=class extends vl{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};O4=Mn;z.Utf8String=O4;Mn.NAME="UTF8String";var Sl=class extends Ut{fromBuffer(e){this.valueBlock.value=ge.Convert.ToUtf16String(e),this.valueBlock.valueHexView=ge.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(ge.Convert.FromUtf16String(e))}};Sl.NAME="BmpStringValueBlock";var B4,Rl=class extends Sl{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};B4=Rl;z.BmpString=B4;Rl.NAME="BMPString";var Al=class extends Ut{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let s=mo(e.charCodeAt(o),8),i=new Uint8Array(s);if(i.length>4)continue;let a=4-i.length;for(let c=i.length-1;c>=0;c--)n[o*4+c+a]=i[c]}this.valueBlock.value=e}};Al.NAME="UniversalStringValueBlock";var M4,Il=class extends Al{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};M4=Il;z.UniversalString=M4;Il.NAME="UniversalString";var U4,Tl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};U4=Tl;z.NumericString=U4;Tl.NAME="NumericString";var F4,Cl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};F4=Cl;z.PrintableString=F4;Cl.NAME="PrintableString";var V4,kl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};V4=kl;z.TeletexString=V4;kl.NAME="TeletexString";var K4,Dl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};K4=Dl;z.VideotexString=K4;Dl.NAME="VideotexString";var $4,Nl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};$4=Nl;z.IA5String=$4;Nl.NAME="IA5String";var H4,Pl=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};H4=Pl;z.GraphicString=H4;Pl.NAME="GraphicString";var q4,wa=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};q4=wa;z.VisibleString=q4;wa.NAME="VisibleString";var G4,Ll=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};G4=Ll;z.GeneralString=G4;Ll.NAME="GeneralString";var W4,Ol=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};W4=Ol;z.CharacterString=W4;Ol.NAME="CharacterString";var z4,Ea=class extends wa{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,ge.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=Qt(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=Qt(this.month,2),t[2]=Qt(this.day,2),t[3]=Qt(this.hour,2),t[4]=Qt(this.minute,2),t[5]=Qt(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};z4=Ea;z.UTCTime=z4;Ea.NAME="UTCTime";var Y4,Bl=class extends Ea{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(e){let t=!1,n="",o="",s=0,i,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),u=-1),f!==-1){if(h=n.substring(f+1),n=n.substring(0,f),h.length!==2&&h.length!==4)throw new Error("Wrong input string for conversion");let p=parseInt(h.substring(0,2),10);if(isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");if(a=u*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=u*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");s=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(i=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*s;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=i.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(Qt(this.year,4)),t.push(Qt(this.month,2)),t.push(Qt(this.day,2)),t.push(Qt(this.hour,2)),t.push(Qt(this.minute,2)),t.push(Qt(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(Qt(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Y4=Bl;z.GeneralizedTime=Y4;Bl.NAME="GeneralizedTime";var X4,Ml=class extends Mn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};X4=Ml;z.DATE=X4;Ml.NAME="DATE";var Q4,Ul=class extends Mn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Q4=Ul;z.TimeOfDay=Q4;Ul.NAME="TimeOfDay";var Z4,Fl=class extends Mn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Z4=Fl;z.DateTime=Z4;Fl.NAME="DateTime";var j4,Vl=class extends Mn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};j4=Vl;z.Duration=j4;Vl.NAME="Duration";var J4,Kl=class extends Mn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};J4=Kl;z.TIME=J4;Kl.NAME="TIME";function e_(r){let{result:e}=si(r),t=e.valueBlock.value;return{n:U(pn(t[1].toBigInt()),"base64url"),e:U(pn(t[2].toBigInt()),"base64url"),d:U(pn(t[3].toBigInt()),"base64url"),p:U(pn(t[4].toBigInt()),"base64url"),q:U(pn(t[5].toBigInt()),"base64url"),dp:U(pn(t[6].toBigInt()),"base64url"),dq:U(pn(t[7].toBigInt()),"base64url"),qi:U(pn(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function t_(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new m("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new ht({value:[new it({value:0}),it.fromBigInt(mn(L(r.n,"base64url"))),it.fromBigInt(mn(L(r.e,"base64url"))),it.fromBigInt(mn(L(r.d,"base64url"))),it.fromBigInt(mn(L(r.p,"base64url"))),it.fromBigInt(mn(L(r.q,"base64url"))),it.fromBigInt(mn(L(r.dp,"base64url"))),it.fromBigInt(mn(L(r.dq,"base64url"))),it.fromBigInt(mn(L(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function r_(r){let{result:e}=si(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:U(pn(t[0].toBigInt()),"base64url"),e:U(pn(t[1].toBigInt()),"base64url")}}function n_(r){if(r.n==null||r.e==null)throw new m("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new ht({value:[new ht({value:[new zr({value:"1.2.840.113549.1.1.1"}),new yo]}),new ni({valueHex:new ht({value:[it.fromBigInt(mn(L(r.n,"base64url"))),it.fromBigInt(mn(L(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function pn(r){let e=r.toString(16);e.length%2>0&&(e=`0${e}`);let t=e.length/2,n=new Uint8Array(t),o=0,s=0;for(;o<t;)n[o]=parseInt(e.slice(s,s+2),16),o+=1,s+=2;return n}function mn(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}var o_=16,Kh=32,$h=1e4;async function s_(r,e){let t=$e.get(),o=new ht({value:[new it({value:0}),new ht({value:[new zr({value:"1.2.840.113549.1.1.1"}),new yo]}),new Bn({valueHex:r.marshal()})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=je(o_),a=await Bh(ns,e,i,{c:$h,dkLen:Kh}),c=je(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,s),u=new ht({value:[new Bn({valueHex:i}),new it({value:$h}),new it({value:Kh}),new ht({value:[new zr({value:"1.2.840.113549.2.11"}),new yo]})]}),f=new ht({value:[new zr({value:"1.2.840.113549.1.5.13"}),new ht({value:[new ht({value:[new zr({value:"1.2.840.113549.1.5.12"}),u]}),new ht({value:[new zr({value:"2.16.840.1.101.3.4.1.42"}),new Bn({valueHex:c})]})]})]}),p=new ht({value:[f,new Bn({valueHex:d})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...U(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
8
+ `)}async function Hh(r,e){let t=$e.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let o=L(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=si(o),{iv:i,salt:a,iterations:c,keySize:l,cipherText:d}=i_(s),u=await Bh(ns,e,a,{c,dkLen:l}),f=await t.subtle.importKey("raw",u,"AES-CBC",!1,["decrypt"]),h=ba(await t.subtle.decrypt({name:"AES-CBC",iv:i},f,d)),{result:p}=si(h);n=e6(p)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let o=L(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=si(o);n=e6(s)}else throw new m("Could not parse private key from PEM data","ERR_INVALID_PARAMETERS");return qh(n)}function i_(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new m("Only pkcs5PBES2 encrypted private keys are supported","ERR_INVALID_PARAMS");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new m("Only pkcs5PBKDF2 key derivation functions are supported","ERR_INVALID_PARAMS");let s=n.valueBlock.value[1],i=ba(s.valueBlock.value[0].getValue()),a=$h,c=Kh;if(s.valueBlock.value.length===3)a=Number(s.valueBlock.value[1].toBigInt()),c=Number(s.valueBlock.value[2].toBigInt());else if(s.valueBlock.value.length===2)throw new m("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key","ERR_INVALID_PARAMS");let l=e.valueBlock.value[1].valueBlock.value[1],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new m("Only AES-CBC encryption schemes are supported","ERR_INVALID_PARAMS")}}}}let u=ba(l.valueBlock.value[1].getValue());return{cipherText:ba(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function e6(r){return ba(r.valueBlock.value[2].getValue())}function ba(r){return new Uint8Array(r,0,r.byteLength)}async function t6(r){let e=await $e.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await o6(e);return{privateKey:t[0],publicKey:t[1]}}async function Gh(r){let t=[await $e.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await a_(r)],n=await o6({privateKey:t[0],publicKey:t[1]});return{privateKey:n[0],publicKey:n[1]}}async function r6(r,e){let t=await $e.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await $e.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function n6(r,e,t){let n=await $e.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return $e.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function o6(r){if(r.privateKey==null||r.publicKey==null)throw new m("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([$e.get().subtle.exportKey("jwk",r.privateKey),$e.get().subtle.exportKey("jwk",r.publicKey)])}async function a_(r){return $e.get().subtle.importKey("jwk",{kty:r.kty,n:r.n,e:r.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function Hl(r){if(r.kty!=="RSA")throw new m("invalid key type","ERR_INVALID_KEY_TYPE");if(r.n==null)throw new m("invalid key modulus","ERR_INVALID_KEY_MODULUS");return L(r.n,"base64url").length*8}var ds=8192,us=class{_key;constructor(e){this._key=e}verify(e,t){return n6(this._key,t,e)}marshal(){return wo.jwkToPkix(this._key)}get bytes(){return Gr.encode({Type:Ue.RSA,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=ke.digest(this.bytes);return Sr(e)?e.then(({bytes:t})=>t):e.bytes}},Eo=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t}genSecret(){return je(16)}sign(e){return r6(this._key,e)}get public(){if(this._publicKey==null)throw new m("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new us(this._publicKey)}marshal(){return wo.jwkToPkcs1(this._key)}get bytes(){return Wr.encode({Type:Ue.RSA,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=ke.digest(this.bytes);return Sr(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return U(e,"base58btc")}async export(e,t="pkcs-8"){if(t==="pkcs-8")return wo.exportToPem(this,e);if(t==="libp2p-key")return Js(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};async function qh(r){let e=wo.pkcs1ToJwk(r);if(Hl(e)>ds)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await Gh(e);return new Eo(t.privateKey,t.publicKey)}function l_(r){let e=wo.pkixToJwk(r);if(Hl(e)>ds)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new us(e)}async function u_(r){if(Hl(r)>ds)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await Gh(r);return new Eo(e.privateKey,e.publicKey)}async function d_(r){if(r>ds)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await t6(r);return new Eo(e.privateKey,e.publicKey)}var Zh={};Ye(Zh,{Secp256k1PrivateKey:()=>hs,Secp256k1PublicKey:()=>fs,generateKeyPair:()=>S_,unmarshalSecp256k1PrivateKey:()=>__,unmarshalSecp256k1PublicKey:()=>v_});var f_=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),bo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),xo=new Uint32Array(64),zh=class extends ao{constructor(){super(64,32,8,!1),this.A=bo[0]|0,this.B=bo[1]|0,this.C=bo[2]|0,this.D=bo[3]|0,this.E=bo[4]|0,this.F=bo[5]|0,this.G=bo[6]|0,this.H=bo[7]|0}get(){let{A:e,B:t,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[e,t,n,o,s,i,a,c]}set(e,t,n,o,s,i,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)xo[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=xo[u-15],h=xo[u-2],p=Vr(f,7)^Vr(f,18)^f>>>3,g=Vr(h,17)^Vr(h,19)^h>>>10;xo[u]=g+xo[u-7]+p+xo[u-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=Vr(a,6)^Vr(a,11)^Vr(a,25),h=d+f+Hc(a,c,l)+f_[u]+xo[u]|0,g=(Vr(n,2)^Vr(n,13)^Vr(n,22))+qc(n,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=n,n=h+g|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,s,i,a,c,l,d)}roundClean(){xo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var _o=Ys(()=>new zh);function s6(r){r.lowS!==void 0&&$r("lowS",r.lowS),r.prehash!==void 0&&$r("prehash",r.prehash)}function h_(r){let e=la(r);Rr(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:p_,hexToBytes:m_}=zc,Vn={Err:class extends Error{constructor(e=""){super(e)}},_tlv:{encode:(r,e)=>{let{Err:t}=Vn;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,o=os(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let s=n>127?os(o.length/2|128):"";return`${os(r)}${s}${o}${e}`},decode(r,e){let{Err:t}=Vn,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],s=!!(o&128),i=0;if(!s)i=o;else{let c=o&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let d of l)i=i<<8|d;if(n+=c,i<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+i);if(a.length!==i)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+i)}}},_int:{encode(r){let{Err:e}=Vn;if(r<Kn)throw new e("integer: negative integers are not allowed");let t=os(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected assertion");return t},decode(r){let{Err:e}=Vn;if(r[0]&128)throw new e("Invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return p_(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Vn,o=typeof r=="string"?m_(r):r;Xs(o);let{v:s,l:i}=n.decode(48,o);if(i.length)throw new e("Invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,s),{v:l,l:d}=n.decode(2,c);if(d.length)throw new e("Invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=Vn,n=`${e.encode(2,t.encode(r.r))}${e.encode(2,t.encode(r.s))}`;return e.encode(48,n)}},Kn=BigInt(0),pt=BigInt(1),KL=BigInt(2),i6=BigInt(3),$L=BigInt(4);function g_(r){let e=h_(r),{Fp:t}=e,n=ho(e.n,e.nBitLength),o=e.toBytes||((g,y,w)=>{let b=y.toAffine();return Dn(Uint8Array.from([4]),t.toBytes(b.x),t.toBytes(b.y))}),s=e.fromBytes||(g=>{let y=g.subarray(1),w=t.fromBytes(y.subarray(0,t.BYTES)),b=t.fromBytes(y.subarray(t.BYTES,2*t.BYTES));return{x:w,y:b}});function i(g){let{a:y,b:w}=e,b=t.sqr(g),E=t.mul(b,g);return t.add(t.add(E,t.mul(g,y)),w)}if(!t.eql(t.sqr(e.Gy),i(e.Gx)))throw new Error("bad generator point: equation left != right");function a(g){return aa(g,pt,e.n)}function c(g){let{allowedPrivateKeyLengths:y,nByteLength:w,wrapPrivateKey:b,n:E}=e;if(y&&typeof g!="bigint"){if(uo(g)&&(g=Tn(g)),typeof g!="string"||!y.includes(g.length))throw new Error("Invalid key");g=g.padStart(w*2,"0")}let x;try{x=typeof g=="bigint"?g:Cn(Be("private key",g,w))}catch{throw new Error(`private key must be ${w} bytes, hex or bigint, not ${typeof g}`)}return b&&(x=Re(x,E)),yt("private key",x,pt,E),x}function l(g){if(!(g instanceof f))throw new Error("ProjectivePoint expected")}let d=is((g,y)=>{let{px:w,py:b,pz:E}=g;if(t.eql(E,t.ONE))return{x:w,y:b};let x=g.is0();y==null&&(y=x?t.ONE:t.inv(E));let T=t.mul(w,y),C=t.mul(b,y),v=t.mul(E,y);if(x)return{x:t.ZERO,y:t.ZERO};if(!t.eql(v,t.ONE))throw new Error("invZ was invalid");return{x:T,y:C}}),u=is(g=>{if(g.is0()){if(e.allowInfinityPoint&&!t.is0(g.py))return;throw new Error("bad point: ZERO")}let{x:y,y:w}=g.toAffine();if(!t.isValid(y)||!t.isValid(w))throw new Error("bad point: x or y not FE");let b=t.sqr(w),E=i(y);if(!t.eql(b,E))throw new Error("bad point: equation left != right");if(!g.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class f{constructor(y,w,b){if(this.px=y,this.py=w,this.pz=b,y==null||!t.isValid(y))throw new Error("x required");if(w==null||!t.isValid(w))throw new Error("y required");if(b==null||!t.isValid(b))throw new Error("z required");Object.freeze(this)}static fromAffine(y){let{x:w,y:b}=y||{};if(!y||!t.isValid(w)||!t.isValid(b))throw new Error("invalid affine point");if(y instanceof f)throw new Error("projective point not allowed");let E=x=>t.eql(x,t.ZERO);return E(w)&&E(b)?f.ZERO:new f(w,b,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(y){let w=t.invertBatch(y.map(b=>b.pz));return y.map((b,E)=>b.toAffine(w[E])).map(f.fromAffine)}static fromHex(y){let w=f.fromAffine(s(Be("pointHex",y)));return w.assertValidity(),w}static fromPrivateKey(y){return f.BASE.multiply(c(y))}static msm(y,w){return Qc(f,n,y,w)}_setWindowSize(y){p.setWindowSize(this,y)}assertValidity(){u(this)}hasEvenY(){let{y}=this.toAffine();if(t.isOdd)return!t.isOdd(y);throw new Error("Field doesn't support isOdd")}equals(y){l(y);let{px:w,py:b,pz:E}=this,{px:x,py:T,pz:C}=y,v=t.eql(t.mul(w,C),t.mul(x,E)),S=t.eql(t.mul(b,C),t.mul(T,E));return v&&S}negate(){return new f(this.px,t.neg(this.py),this.pz)}double(){let{a:y,b:w}=e,b=t.mul(w,i6),{px:E,py:x,pz:T}=this,C=t.ZERO,v=t.ZERO,S=t.ZERO,I=t.mul(E,E),F=t.mul(x,x),O=t.mul(T,T),B=t.mul(E,x);return B=t.add(B,B),S=t.mul(E,T),S=t.add(S,S),C=t.mul(y,S),v=t.mul(b,O),v=t.add(C,v),C=t.sub(F,v),v=t.add(F,v),v=t.mul(C,v),C=t.mul(B,C),S=t.mul(b,S),O=t.mul(y,O),B=t.sub(I,O),B=t.mul(y,B),B=t.add(B,S),S=t.add(I,I),I=t.add(S,I),I=t.add(I,O),I=t.mul(I,B),v=t.add(v,I),O=t.mul(x,T),O=t.add(O,O),I=t.mul(O,B),C=t.sub(C,I),S=t.mul(O,F),S=t.add(S,S),S=t.add(S,S),new f(C,v,S)}add(y){l(y);let{px:w,py:b,pz:E}=this,{px:x,py:T,pz:C}=y,v=t.ZERO,S=t.ZERO,I=t.ZERO,F=e.a,O=t.mul(e.b,i6),B=t.mul(w,x),M=t.mul(b,T),D=t.mul(E,C),P=t.add(w,b),A=t.add(x,T);P=t.mul(P,A),A=t.add(B,M),P=t.sub(P,A),A=t.add(w,E);let R=t.add(x,C);return A=t.mul(A,R),R=t.add(B,D),A=t.sub(A,R),R=t.add(b,E),v=t.add(T,C),R=t.mul(R,v),v=t.add(M,D),R=t.sub(R,v),I=t.mul(F,A),v=t.mul(O,D),I=t.add(v,I),v=t.sub(M,I),I=t.add(M,I),S=t.mul(v,I),M=t.add(B,B),M=t.add(M,B),D=t.mul(F,D),A=t.mul(O,A),M=t.add(M,D),D=t.sub(B,D),D=t.mul(F,D),A=t.add(A,D),B=t.mul(M,A),S=t.add(S,B),B=t.mul(R,A),v=t.mul(P,v),v=t.sub(v,B),B=t.mul(P,M),I=t.mul(R,I),I=t.add(I,B),new f(v,S,I)}subtract(y){return this.add(y.negate())}is0(){return this.equals(f.ZERO)}wNAF(y){return p.wNAFCached(this,y,f.normalizeZ)}multiplyUnsafe(y){yt("scalar",y,Kn,e.n);let w=f.ZERO;if(y===Kn)return w;if(y===pt)return this;let{endo:b}=e;if(!b)return p.unsafeLadder(this,y);let{k1neg:E,k1:x,k2neg:T,k2:C}=b.splitScalar(y),v=w,S=w,I=this;for(;x>Kn||C>Kn;)x&pt&&(v=v.add(I)),C&pt&&(S=S.add(I)),I=I.double(),x>>=pt,C>>=pt;return E&&(v=v.negate()),T&&(S=S.negate()),S=new f(t.mul(S.px,b.beta),S.py,S.pz),v.add(S)}multiply(y){let{endo:w,n:b}=e;yt("scalar",y,pt,b);let E,x;if(w){let{k1neg:T,k1:C,k2neg:v,k2:S}=w.splitScalar(y),{p:I,f:F}=this.wNAF(C),{p:O,f:B}=this.wNAF(S);I=p.constTimeNegate(T,I),O=p.constTimeNegate(v,O),O=new f(t.mul(O.px,w.beta),O.py,O.pz),E=I.add(O),x=F.add(B)}else{let{p:T,f:C}=this.wNAF(y);E=T,x=C}return f.normalizeZ([E,x])[0]}multiplyAndAddUnsafe(y,w,b){let E=f.BASE,x=(C,v)=>v===Kn||v===pt||!C.equals(E)?C.multiplyUnsafe(v):C.multiply(v),T=x(this,w).add(x(y,b));return T.is0()?void 0:T}toAffine(y){return d(this,y)}isTorsionFree(){let{h:y,isTorsionFree:w}=e;if(y===pt)return!0;if(w)return w(f,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:y,clearCofactor:w}=e;return y===pt?this:w?w(f,this):this.multiplyUnsafe(e.h)}toRawBytes(y=!0){return $r("isCompressed",y),this.assertValidity(),o(f,this,y)}toHex(y=!0){return $r("isCompressed",y),Tn(this.toRawBytes(y))}}f.BASE=new f(e.Gx,e.Gy,t.ONE),f.ZERO=new f(t.ZERO,t.ONE,t.ZERO);let h=e.nBitLength,p=Xc(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:i,isWithinCurveOrder:a}}function y_(r){let e=la(r);return Rr(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function a6(r){let e=y_(r),{Fp:t,n}=e,o=t.BYTES+1,s=2*t.BYTES+1;function i(D){return Re(D,n)}function a(D){return Yc(D,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:d,isWithinCurveOrder:u}=g_({...e,toBytes(D,P,A){let R=P.toAffine(),N=t.toBytes(R.x),k=Dn;return $r("isCompressed",A),A?k(Uint8Array.from([P.hasEvenY()?2:3]),N):k(Uint8Array.from([4]),N,t.toBytes(R.y))},fromBytes(D){let P=D.length,A=D[0],R=D.subarray(1);if(P===o&&(A===2||A===3)){let N=Cn(R);if(!aa(N,pt,t.ORDER))throw new Error("Point is not on curve");let k=d(N),q;try{q=t.sqrt(k)}catch(ie){let ce=ie instanceof Error?": "+ie.message:"";throw new Error("Point is not on curve"+ce)}let W=(q&pt)===pt;return(A&1)===1!==W&&(q=t.neg(q)),{x:N,y:q}}else if(P===s&&A===4){let N=t.fromBytes(R.subarray(0,t.BYTES)),k=t.fromBytes(R.subarray(t.BYTES,2*t.BYTES));return{x:N,y:k}}else throw new Error(`Point of length ${P} was invalid. Expected ${o} compressed bytes or ${s} uncompressed bytes`)}}),f=D=>Tn(fo(D,e.nByteLength));function h(D){let P=n>>pt;return D>P}function p(D){return h(D)?i(-D):D}let g=(D,P,A)=>Cn(D.slice(P,A));class y{constructor(P,A,R){this.r=P,this.s=A,this.recovery=R,this.assertValidity()}static fromCompact(P){let A=e.nByteLength;return P=Be("compactSignature",P,A*2),new y(g(P,0,A),g(P,A,2*A))}static fromDER(P){let{r:A,s:R}=Vn.toSig(Be("DER",P));return new y(A,R)}assertValidity(){yt("r",this.r,pt,n),yt("s",this.s,pt,n)}addRecoveryBit(P){return new y(this.r,this.s,P)}recoverPublicKey(P){let{r:A,s:R,recovery:N}=this,k=C(Be("msgHash",P));if(N==null||![0,1,2,3].includes(N))throw new Error("recovery id invalid");let q=N===2||N===3?A+e.n:A;if(q>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let W=N&1?"03":"02",j=c.fromHex(W+f(q)),ie=a(q),ce=i(-k*ie),fe=i(R*ie),xe=c.BASE.multiplyAndAddUnsafe(j,ce,fe);if(!xe)throw new Error("point at infinify");return xe.assertValidity(),xe}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new y(this.r,i(-this.s),this.recovery):this}toDERRawBytes(){return ss(this.toDERHex())}toDERHex(){return Vn.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return ss(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let w={isValidPrivateKey(D){try{return l(D),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let D=Ih(e.n);return $m(e.randomBytes(D),e.n)},precompute(D=8,P=c.BASE){return P._setWindowSize(D),P.multiply(BigInt(3)),P}};function b(D,P=!0){return c.fromPrivateKey(D).toRawBytes(P)}function E(D){let P=uo(D),A=typeof D=="string",R=(P||A)&&D.length;return P?R===o||R===s:A?R===2*o||R===2*s:D instanceof c}function x(D,P,A=!0){if(E(D))throw new Error("first arg must be private key");if(!E(P))throw new Error("second arg must be public key");return c.fromHex(P).multiply(l(D)).toRawBytes(A)}let T=e.bits2int||function(D){let P=Cn(D),A=D.length*8-e.nBitLength;return A>0?P>>BigInt(A):P},C=e.bits2int_modN||function(D){return i(T(D))},v=ca(e.nBitLength);function S(D){return yt(`num < 2^${e.nBitLength}`,D,Kn,v),fo(D,e.nByteLength)}function I(D,P,A=F){if(["recovered","canonical"].some(Oe=>Oe in A))throw new Error("sign() legacy options not supported");let{hash:R,randomBytes:N}=e,{lowS:k,prehash:q,extraEntropy:W}=A;k==null&&(k=!0),D=Be("msgHash",D),s6(A),q&&(D=Be("prehashed msgHash",R(D)));let j=C(D),ie=l(P),ce=[S(ie),S(j)];if(W!=null&&W!==!1){let Oe=W===!0?N(t.BYTES):W;ce.push(Be("extraEntropy",Oe))}let fe=Dn(...ce),xe=j;function Le(Oe){let Fe=T(Oe);if(!u(Fe))return;let Nt=a(Fe),ct=c.BASE.multiply(Fe).toAffine(),Ht=i(ct.x);if(Ht===Kn)return;let vn=i(Nt*i(xe+Ht*ie));if(vn===Kn)return;let Zi=(ct.x===Ht?0:2)|Number(ct.y&pt),ji=vn;return k&&h(vn)&&(ji=p(vn),Zi^=1),new y(Ht,ji,Zi)}return{seed:fe,k2sig:Le}}let F={lowS:e.lowS,prehash:!1},O={lowS:e.lowS,prehash:!1};function B(D,P,A=F){let{seed:R,k2sig:N}=I(D,P,A),k=e;return _h(k.hash.outputLen,k.nByteLength,k.hmac)(R,N)}c.BASE._setWindowSize(8);function M(D,P,A,R=O){let N=D;if(P=Be("msgHash",P),A=Be("publicKey",A),"strict"in R)throw new Error("options.strict was renamed to lowS");s6(R);let{lowS:k,prehash:q}=R,W,j;try{if(typeof N=="string"||uo(N))try{W=y.fromDER(N)}catch(ct){if(!(ct instanceof Vn.Err))throw ct;W=y.fromCompact(N)}else if(typeof N=="object"&&typeof N.r=="bigint"&&typeof N.s=="bigint"){let{r:ct,s:Ht}=N;W=new y(ct,Ht)}else throw new Error("PARSE");j=c.fromHex(A)}catch(ct){if(ct.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(k&&W.hasHighS())return!1;q&&(P=e.hash(P));let{r:ie,s:ce}=W,fe=C(P),xe=a(ce),Le=i(fe*xe),Oe=i(ie*xe),Fe=c.BASE.multiplyAndAddUnsafe(j,Le,Oe)?.toAffine();return Fe?i(Fe.x)===ie:!1}return{CURVE:e,getPublicKey:b,getSharedSecret:x,sign:B,verify:M,ProjectivePoint:c,Signature:y,utils:w}}function w_(r){return{hash:r,hmac:(e,...t)=>po(r,e,ph(...t)),randomBytes:rs}}function c6(r,e){let t=n=>a6({...r,...w_(n)});return Object.freeze({...t(e),create:t})}var d6=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),l6=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),E_=BigInt(1),Yh=BigInt(2),u6=(r,e)=>(r+e/Yh)/e;function b_(r){let e=d6,t=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=Me(d,t,e)*d%e,f=Me(u,t,e)*d%e,h=Me(f,Yh,e)*l%e,p=Me(h,o,e)*h%e,g=Me(p,s,e)*p%e,y=Me(g,a,e)*g%e,w=Me(y,c,e)*y%e,b=Me(w,a,e)*g%e,E=Me(b,t,e)*d%e,x=Me(E,i,e)*p%e,T=Me(x,n,e)*l%e,C=Me(T,Yh,e);if(!Xh.eql(Xh.sqr(C),r))throw new Error("Cannot find square root");return C}var Xh=ho(d6,void 0,void 0,{sqrt:b_}),Xr=c6({a:BigInt(0),b:BigInt(7),Fp:Xh,n:l6,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=l6,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-E_*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=t,i=BigInt("0x100000000000000000000000000000000"),a=u6(s*r,e),c=u6(-n*r,e),l=Re(r-a*t-c*o,e),d=Re(-a*n-c*s,e),u=l>i,f=d>i;if(u&&(l=e-l),f&&(d=e-d),l>i||d>i)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}}},_o),ZL=BigInt(0);var jL=Xr.ProjectivePoint;function f6(){return Xr.utils.randomPrivateKey()}function h6(r,e){let t=ke.digest(e instanceof Uint8Array?e:e.subarray());if(Sr(t))return t.then(({digest:n})=>Xr.sign(n,r).toDERRawBytes()).catch(n=>{throw new m(String(n),"ERR_INVALID_INPUT")});try{return Xr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new m(String(n),"ERR_INVALID_INPUT")}}function p6(r,e,t){let n=ke.digest(t instanceof Uint8Array?t:t.subarray());if(Sr(n))return n.then(({digest:o})=>Xr.verify(e,o,r)).catch(o=>{throw new m(String(o),"ERR_INVALID_INPUT")});try{return Xr.verify(e,n.digest,r)}catch(o){throw new m(String(o),"ERR_INVALID_INPUT")}}function m6(r){return Xr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function g6(r){try{Xr.getPublicKey(r,!0)}catch(e){throw new m(String(e),"ERR_INVALID_PRIVATE_KEY")}}function Qh(r){try{Xr.ProjectivePoint.fromHex(r)}catch(e){throw new m(String(e),"ERR_INVALID_PUBLIC_KEY")}}function y6(r){try{return Xr.getPublicKey(r,!0)}catch(e){throw new m(String(e),"ERR_INVALID_PRIVATE_KEY")}}var fs=class{_key;constructor(e){Qh(e),this._key=e}verify(e,t){return p6(this._key,t,e)}marshal(){return m6(this._key)}get bytes(){return Gr.encode({Type:Ue.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}async hash(){let e=ke.digest(this.bytes),t;return Sr(e)?{bytes:t}=await e:t=e.bytes,t}},hs=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t??y6(e),g6(this._key),Qh(this._publicKey)}sign(e){return h6(this._key,e)}get public(){return new fs(this._publicKey)}marshal(){return this._key}get bytes(){return Wr.encode({Type:Ue.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=ke.digest(this.bytes);return Sr(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return U(e,"base58btc")}async export(e,t="libp2p-key"){if(t==="libp2p-key")return Js(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function __(r){return new hs(r)}function v_(r){return new fs(r)}async function S_(){let r=f6();return new hs(r)}var $n={rsa:Wh,ed25519:Lh,secp256k1:Zh};function jh(r){let e=Object.keys($n).join(" / ");return new m(`invalid or unsupported key type ${r}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function Jh(r){if(r=r.toLowerCase(),r==="rsa"||r==="ed25519"||r==="secp256k1")return $n[r];throw jh(r)}async function xa(r,e){return Jh(r).generateKeyPair(e??2048)}async function R_(r,e,t){if(r.toLowerCase()!=="ed25519")throw new m("Seed key derivation is unimplemented for RSA or secp256k1","ERR_UNSUPPORTED_KEY_DERIVATION_TYPE");return Ph(e)}function Qr(r){let e=Gr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ue.RSA:return $n.rsa.unmarshalRsaPublicKey(t);case Ue.Ed25519:return $n.ed25519.unmarshalEd25519PublicKey(t);case Ue.Secp256k1:return $n.secp256k1.unmarshalSecp256k1PublicKey(t);default:throw jh(e.Type??"unknown")}}function e0(r,e){return e=(e??"rsa").toLowerCase(),Jh(e),r.bytes}async function Ir(r){let e=Wr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ue.RSA:return $n.rsa.unmarshalRsaPrivateKey(t);case Ue.Ed25519:return $n.ed25519.unmarshalEd25519PrivateKey(t);case Ue.Secp256k1:return $n.secp256k1.unmarshalSecp256k1PrivateKey(t);default:throw jh(e.Type??"RSA")}}function t0(r,e){return e=(e??"rsa").toLowerCase(),Jh(e),r.bytes}async function ii(r,e){try{let t=await a4(r,e);return await Ir(t)}catch{}if(!r.includes("BEGIN"))throw new m("Encrypted key was not a libp2p-key or a PEM file","ERR_INVALID_IMPORT_FORMAT");return Hh(r,e)}var _a=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),vo=new Uint32Array(80),r0=class extends ao{constructor(){super(64,20,8,!1),this.A=_a[0]|0,this.B=_a[1]|0,this.C=_a[2]|0,this.D=_a[3]|0,this.E=_a[4]|0}get(){let{A:e,B:t,C:n,D:o,E:s}=this;return[e,t,n,o,s]}set(e,t,n,o,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0}process(e,t){for(let c=0;c<16;c++,t+=4)vo[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)vo[c]=$c(vo[c-3]^vo[c-8]^vo[c-14]^vo[c-16],1);let{A:n,B:o,C:s,D:i,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=Hc(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=qc(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=$c(n,5)+l+a+d+vo[c]|0;a=i,i=s,s=$c(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,this.set(n,o,s,i,a)}roundClean(){vo.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},w6=Ys(()=>new r0);var E6={sha1:w6,"sha2-256":_o,"sha2-512":ns};function va(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(E6).join(" / ");throw new m(`Hash '${o}' is unknown or not supported. Must be ${a}`,"ERR_UNSUPPORTED_HASH_TYPE")}let s=E6[o],i=f4(s,r,e,{c:t,dkLen:n});return ot.encode(i).substring(1)}var n0=nt(Wl(),1);var A_=Math.LN2*Math.LN2,zl=class{seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=T_(e.hashes??8),this.bits=e.bits??1024,this.buffer=de(Math.ceil(this.bits/8))}add(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.seeds.length;t++){let o=n0.default.x86.hash32(e,this.seeds[t])%this.bits;this.setbit(o)}}has(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.seeds.length;t++){let o=n0.default.x86.hash32(e,this.seeds[t])%this.bits;if(!this.getbit(o))return!1}return!0}clear(){this.buffer.fill(0)}setbit(e){let t=0,n=e;for(;n>7;)t++,n-=8;let o=this.buffer[t];o|=1<<n,this.buffer[t]=o}getbit(e){let t=0,n=e;for(;n>7;)t++,n-=8;return(this.buffer[t]&1<<n)!==0}};function o0(r,e=.005){let t=I_(r,e);return new zl(t)}function I_(r,e=.005){let t=Math.round(-1*r*Math.log(e)/A_),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function T_(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ae(je(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var s0=64,Zr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>s0)throw new TypeError("Invalid Fingerprint Size");let s=t.hashV(e,n),i=de(o);for(let a=0;a<i.length;a++)i[a]=s[a];i.length===0&&(i[0]=7),this.fp=i,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?J(this.fp,e.fp):!1}};function ps(r,e){return Math.floor(Math.random()*(e-r))+r}var ms=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Zr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Zr))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof Zr))throw new TypeError("Invalid Fingerprint");let t=ps(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Zr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var i0={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},_6={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},v6=new globalThis.TextEncoder;function C_(r,e){let t=i0[e],n=_6[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function k_(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=i0[e],o=_6[e],s=r;for(;s.length>0;){let i=v6.encodeInto(s,t);s=s.slice(i.read);for(let a=0;a<i.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function a0(r,{size:e=32,utf8Buffer:t}={}){if(!i0[e])throw new Error("The `size` option must be one of 32, 64, 128, 256, 512, or 1024");if(typeof r=="string"){if(t)return k_(r,e,t);r=v6.encode(r)}return C_(r,e)}var D_=nt(Wl(),1);var Ra={hash:r=>Number(a0(r,{size:32})),hashV:(r,e)=>N_(Ra.hash(r,e))};function N_(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),L(e,"base16")}var P_=500,Aa=class{bucketSize;filterSize;fingerprintSize;buckets;count;hash;seed;constructor(e){this.filterSize=e.filterSize,this.bucketSize=e.bucketSize??4,this.fingerprintSize=e.fingerprintSize??2,this.count=0,this.buckets=[],this.hash=e.hash??Ra,this.seed=e.seed??ps(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=L(e));let t=new Zr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new ms(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new ms(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let s=[n,o],i=s[ps(0,s.length-1)];this.buckets[i]==null&&(this.buckets[i]=new ms(this.bucketSize));for(let a=0;a<P_;a++){let c=this.buckets[i].swap(t);if(c!=null&&(i=(i^c.hash())%this.filterSize,this.buckets[i]==null&&(this.buckets[i]=new ms(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=L(e));let t=new Zr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let s=(n^t.hash())%this.filterSize;return this.buckets[s]?.has(t)??!1}remove(e){typeof e=="string"&&(e=L(e));let t=new Zr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let s=(n^t.hash())%this.filterSize,i=this.buckets[s]?.remove(t)??!1;return i&&this.count--,i}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},L_={1:.5,2:.84,4:.95,8:.98};function O_(r=.001){return r>.002?2:r>1e-5?4:8}function S6(r,e=.001){let t=O_(e),n=L_[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),s0);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var Yl=class{filterSize;bucketSize;fingerprintSize;scale;filterSeries;hash;seed;constructor(e){this.bucketSize=e.bucketSize??4,this.filterSize=e.filterSize??(1<<18)/this.bucketSize,this.fingerprintSize=e.fingerprintSize??2,this.scale=e.scale??2,this.hash=e.hash??Ra,this.seed=e.seed??ps(0,Math.pow(2,10)),this.filterSeries=[new Aa({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=L(e)),this.has(e))return!0;let t=this.filterSeries.find(n=>n.reliable);if(t==null){let n=this.filterSize*Math.pow(this.scale,this.filterSeries.length);t=new Aa({filterSize:n,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed}),this.filterSeries.push(t)}return t.add(e)}has(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].has(e))return!0;return!1}remove(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].remove(e))return!0;return!1}get count(){return this.filterSeries.reduce((e,t)=>e+t.count,0)}};function Ia(r,e=.001,t){return new Yl({...S6(r,e),...t??{}})}var Xl=class{filter;constructor(e,t){this.filter=Ia(e,t)}has(e){return this.filter.has(e.toBytes())}add(e){this.filter.add(e.toBytes())}remove(e){this.filter.remove?.(e.toBytes())}};function c0(r,e=.001){return new Xl(r,e)}var l0=class extends st{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Ta(r){let{name:e,metrics:t}=r,n;return t!=null?n=new l0({name:e,metrics:t}):n=new st,n}var Hn=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=ot.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=ot.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=ot.encode(e.multihash.bytes);this.blocks.set(n,t)}};function B_(r){let e=new Uint8Array(r.reduce((n,o)=>n+he(o),0)),t=0;for(let n of r)e=Ve(n,e,t),t+=he(n);return e}var R6=B_;function u0(r){return R6([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var Ql=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new Hn,n=new Set;for(let[o,s]of this.wants.entries())try{let i=await this.blockstore.get(s.cid,e);s.wantType===et.WantHave?i.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",s.cid),n.add(o),t.addBlock(s.cid,{data:i,prefix:u0(s.cid)})):(this.log("sending have for %c",s.cid),t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:vr.HaveBlock})):(this.log("sending block for %c",s.cid),n.add(o),t.addBlock(s.cid,{data:i,prefix:u0(s.cid)}))}catch(i){if(i.code!=="ERR_NOT_FOUND")throw i;if(this.log("do not have block for %c",s.cid),!s.sendDontHave||s.sentDontHave===!0)continue;s.sentDontHave=!0,t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:vr.DontHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((o,s)=>o+s.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var Zl=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=Ta({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new Ql({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,s)=>o+s.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let s=le.decode(o.cid),i=U(s.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,s),n.wants.delete(i)):(o.wantType===et.WantHave?this.log("peer %p wanted block presence for %c",e,s):this.log("peer %p wanted block for %c",e,s),n.wants.set(i,{cid:s,priority:o.priority,wantType:o.wantType??et.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=U(e.multihash.bytes,"base64"),o=[];for(let s of this.ledgerMap.values())s.wants.has(n)&&o.push(s);await Promise.all(o.map(async s=>s.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};function M_(r,e){try{if(typeof r=="string"&&r.length>0)return U_(r);if(typeof r=="number"&&isFinite(r))return e?.long?V_(r):F_(r);throw new Error("Value is not a string or number.")}catch(t){let n=K_(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function U_(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var Jl=M_;function F_(r){let e=Math.abs(r);return e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function V_(r){let e=Math.abs(r);return e>=864e5?jl(r,e,864e5,"day"):e>=36e5?jl(r,e,36e5,"hour"):e>=6e4?jl(r,e,6e4,"minute"):e>=1e3?jl(r,e,1e3,"second"):`${r} ms`}function jl(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function K_(r){return typeof r=="object"&&r!==null&&"message"in r}function d0(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=Jl,t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let f=0;f<d.length;f++)u=(u<<5)-u+d.charCodeAt(f),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,f=null,h,p;function g(...y){if(!g.enabled)return;let w=g,b=Number(new Date),E=b-(u||b);w.diff=E,w.prev=u,w.curr=b,u=b,y[0]=t.coerce(y[0]),typeof y[0]!="string"&&y.unshift("%O");let x=0;y[0]=y[0].replace(/%([a-zA-Z%])/g,(C,v)=>{if(C==="%%")return"%";x++;let S=t.formatters[v];if(typeof S=="function"){let I=y[x];C=S.call(w,I),y.splice(x,1),x--}return C}),t.formatArgs.call(w,y),(w.log||t.log).apply(w,y)}return g.namespace=d,g.useColors=t.useColors(),g.color=t.selectColor(d),g.extend=n,g.destroy=t.destroy,Object.defineProperty(g,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(h!==t.namespaces&&(h=t.namespaces,p=t.enabled(d)),p),set:y=>{f=y}}),typeof t.init=="function"&&t.init(g),g}function n(d,u){let f=t(this.namespace+(typeof u>"u"?":":u)+d);return f.log=this.log,f}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,f=(typeof d=="string"?d:"").split(/[\s,]+/),h=f.length;for(u=0;u<h;u++)f[u]&&(d=f[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.substr(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function s(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function i(d){if(d[d.length-1]==="*")return!0;let u,f;for(u=0,f=t.skips.length;u<f;u++)if(t.skips[u].test(d))return!1;for(u=0,f=t.names.length;u<f;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack??d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var eu=Y_(),$_=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function H_(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function q_(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Jl(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}var G_=console.debug??console.log??(()=>{});function W_(r){try{r?eu?.setItem("debug",r):eu?.removeItem("debug")}catch{}}function z_(){let r;try{r=eu?.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function Y_(){try{return localStorage}catch{}}function X_(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var A6=d0({formatArgs:q_,save:W_,load:z_,useColors:H_,setupFormatters:X_,colors:$_,storage:eu,log:G_});var ar=A6;ar.formatters.b=r=>r==null?"undefined":We.baseEncode(r);ar.formatters.t=r=>r==null?"undefined":lt.baseEncode(r);ar.formatters.m=r=>r==null?"undefined":ot.baseEncode(r);ar.formatters.p=r=>r==null?"undefined":r.toString();ar.formatters.c=r=>r==null?"undefined":r.toString();ar.formatters.k=r=>r==null?"undefined":r.toString();ar.formatters.a=r=>r==null?"undefined":r.toString();function Q_(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function So(){return{forComponent(r){return cr(r)}}}function cr(r){let e=Q_(`${r}:trace`);return ar.enabled(`${r}:trace`)&&ar.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=ar(`${r}:trace`)),Object.assign(ar(r),{error:ar(`${r}:error`),trace:e})}var h0=nt(T6(),1);var Ro=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},p0=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},C6=r=>globalThis.DOMException===void 0?new p0(r):new DOMException(r),k6=r=>{let e=r.reason===void 0?C6("This operation was aborted."):r.reason;return e instanceof Error?e:C6(e)};function jr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:s={setTimeout,clearTimeout}}=e,i,c=new Promise((l,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:f}=e;f.aborted&&d(k6(f)),f.addEventListener("abort",()=>{d(k6(f))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new Ro;i=s.setTimeout.call(void 0,()=>{if(n){try{l(n())}catch(f){d(f)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?l():o instanceof Error?d(o):(u.message=o??`Promise timed out after ${t} milliseconds`,d(u))},t),(async()=>{try{l(await r)}catch(f){d(f)}})()}).finally(()=>{c.clear()});return c.clear=()=>{s.clearTimeout.call(void 0,i),i=void 0},c}function m0(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var ka=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,run:e};if(this.size&&this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=m0(this.#e,n,(s,i)=>i.priority-s.priority);this.#e.splice(o,0,n)}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var Tr=class extends h0.default{#e;#t;#r=0;#o;#a;#l=0;#s;#u;#n;#m;#i=0;#d;#c;#g;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:ka,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#o=e.intervalCap,this.#a=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#c=e.autoStart===!1}get#E(){return this.#t||this.#r<this.#o}get#b(){return this.#i<this.#d}#x(){this.#i--,this.#f(),this.emit("next")}#_(){this.#w(),this.#y(),this.#u=void 0}get#v(){let e=Date.now();if(this.#s===void 0){let t=this.#l-e;if(t<0)this.#r=this.#e?this.#i:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#_()},t)),!0}return!1}#f(){if(this.#n.size===0)return this.#s&&clearInterval(this.#s),this.#s=void 0,this.emit("empty"),this.#i===0&&this.emit("idle"),!1;if(!this.#c){let e=!this.#v;if(this.#E&&this.#b){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#s!==void 0||(this.#s=setInterval(()=>{this.#w()},this.#a),this.#l=Date.now()+this.#a)}#w(){this.#r===0&&this.#i===0&&this.#s&&(clearInterval(this.#s),this.#s=void 0),this.#r=this.#e?this.#i:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#d}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#d=e,this.#h()}async#S(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}async add(e,t={}){return t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#i++,this.#r++;try{t.signal?.throwIfAborted();let s=e({signal:t.signal});t.timeout&&(s=jr(Promise.resolve(s),{milliseconds:t.timeout})),t.signal&&(s=Promise.race([s,this.#S(t.signal)]));let i=await s;n(i),this.emit("completed",i)}catch(s){if(s instanceof Ro&&!t.throwOnTimeout){n();return}o(s),this.emit("error",s)}finally{this.#x()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#c?(this.#c=!1,this.#h(),this):this}pause(){this.#c=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#p("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#p("next",()=>this.#n.size<e)}async onIdle(){this.#i===0&&this.#n.size===0||await this.#p("idle")}async#p(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#i}get isPaused(){return this.#c}};function ru(r){let e=[lr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var g0=60;function nu(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:lr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:lr[e.type],TTL:e.TTL??e.ttl??g0,data:e.data instanceof Uint8Array?U(e.data):e.data}))}}var J_=4;function y0(r,e={}){let t=new Tr({concurrency:e.queryConcurrency??J_});return async(n,o={})=>{let s=new URLSearchParams;s.set("name",n),ru(o.types).forEach(a=>{s.append("type",lr[a])}),o.onProgress?.(new H("dns:query",{detail:n}));let i=await t.add(async()=>{let a=await fetch(`${r}?${s}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=nu(await a.json());return o.onProgress?.(new H("dns:response",{detail:c})),c},{signal:o.signal});if(i==null)throw new Error("No DNS response received");return i}}function D6(){return[y0("https://cloudflare-dns.com/dns-query"),y0("https://dns.google/resolve")]}var P6=nt(w0(),1);var E0=class{lru;constructor(e){this.lru=(0,P6.default)(e)}get(e,t){let n=!0,o=[];for(let s of t){let i=this.getAnswers(e,s);if(i.length===0){n=!1;break}o.push(...i)}if(n)return nu({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let s=o.filter(i=>i.expires>Date.now()).map(({expires:i,value:a})=>({...a,TTL:Math.round((i-Date.now())/1e3),type:lr[a.type]}));return s.length===0&&this.lru.remove(n),s}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??g0)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function L6(r){return new E0(r)}var ev=1e3,ou=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=L6(e.cacheSize??ev),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=D6())}async query(e,t={}){let n=ru(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new H("dns:cache",{detail:o})),o;let s=`${e.split(".").pop()}.`,i=(this.resolvers[s]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of i){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new H("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var lr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(lr||(lr={}));function su(r={}){return new ou(r)}var tv=["string","number","bigint","symbol"],rv=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function O6(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(tv.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(nv(r))return"Buffer";let t=ov(r);return t||"Object"}function nv(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function ov(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(rv.includes(e))return e}var _=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};_.uint=new _(0,"uint",!0);_.negint=new _(1,"negint",!0);_.bytes=new _(2,"bytes",!0);_.string=new _(3,"string",!0);_.array=new _(4,"array",!1);_.map=new _(5,"map",!1);_.tag=new _(6,"tag",!1);_.float=new _(7,"float",!0);_.false=new _(7,"false",!0);_.true=new _(7,"true",!0);_.null=new _(7,"null",!0);_.undefined=new _(7,"undefined",!0);_.break=new _(7,"break",!0);var V=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var ai=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",sv=new TextDecoder,iv=new TextEncoder;function iu(r){return ai&&globalThis.Buffer.isBuffer(r)}function Da(r){return r instanceof Uint8Array?iu(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var F6=ai?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):M6(r,e,t):(r,e,t)=>t-e>64?sv.decode(r.subarray(e,t)):M6(r,e,t),au=ai?r=>r.length>64?globalThis.Buffer.from(r):B6(r):r=>r.length>64?iv.encode(r):B6(r),gn=r=>Uint8Array.from(r),ci=ai?(r,e,t)=>iu(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),V6=ai?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Da(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},K6=ai?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function $6(r,e){if(iu(r)&&iu(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function B6(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function M6(r,e,t){let n=[];for(;e<t;){let o=r[e],s=null,i=o>239?4:o>223?3:o>191?2:1;if(e+i<=t){let a,c,l,d;switch(i){case 1:o<128&&(s=o);break;case 2:a=r[e+1],(a&192)===128&&(d=(o&31)<<6|a&63,d>127&&(s=d));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(d=(o&15)<<12|(a&63)<<6|c&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(d=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,d>65535&&d<1114112&&(s=d))}}s===null?(s=65533,i=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),e+=i}return b0(n)}var U6=4096;function b0(r){let e=r.length;if(e<=U6)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=U6));return t}var av=256,Na=class{constructor(e=av){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=K6(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=ci(n,0,this.cursor)}else t=V6(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",li="CBOR encode error:",Pa=[];Pa[23]=1;Pa[24]=2;Pa[25]=3;Pa[26]=5;Pa[27]=9;function qn(r,e,t){if(r.length-e<t)throw new Error(`${Q} not enough data for type`)}var mt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function ur(r,e,t){qn(r,e,1);let n=r[e];if(t.strict===!0&&n<mt[0])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function dr(r,e,t){qn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<mt[1])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function fr(r,e,t){qn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<mt[2])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function hr(r,e,t){qn(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],s=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&s<mt[3])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);if(s<=Number.MAX_SAFE_INTEGER)return Number(s);if(t.allowBigInt===!0)return s;throw new Error(`${Q} integers outside of the safe integer range are not supported`)}function H6(r,e,t,n){return new V(_.uint,ur(r,e+1,n),2)}function q6(r,e,t,n){return new V(_.uint,dr(r,e+1,n),3)}function G6(r,e,t,n){return new V(_.uint,fr(r,e+1,n),5)}function W6(r,e,t,n){return new V(_.uint,hr(r,e+1,n),9)}function Cr(r,e){return Et(r,0,e.value)}function Et(r,e,t){if(t<mt[0]){let n=Number(t);r.push([e|n])}else if(t<mt[1]){let n=Number(t);r.push([e|24,n])}else if(t<mt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<mt[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<mt[4]){let o=[e|27,0,0,0,0,0,0,0],s=Number(n&BigInt(4294967295)),i=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=s&255,s=s>>8,o[7]=s&255,s=s>>8,o[6]=s&255,s=s>>8,o[5]=s&255,o[4]=i&255,i=i>>8,o[3]=i&255,i=i>>8,o[2]=i&255,i=i>>8,o[1]=i&255,r.push(o)}else throw new Error(`${Q} encountered BigInt larger than allowable range`)}}Cr.encodedSize=function(e){return Et.encodedSize(e.value)};Et.encodedSize=function(e){return e<mt[0]?1:e<mt[1]?2:e<mt[2]?3:e<mt[3]?5:9};Cr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function z6(r,e,t,n){return new V(_.negint,-1-ur(r,e+1,n),2)}function Y6(r,e,t,n){return new V(_.negint,-1-dr(r,e+1,n),3)}function X6(r,e,t,n){return new V(_.negint,-1-fr(r,e+1,n),5)}var x0=BigInt(-1),Q6=BigInt(1);function Z6(r,e,t,n){let o=hr(r,e+1,n);if(typeof o!="bigint"){let s=-1-o;if(s>=Number.MIN_SAFE_INTEGER)return new V(_.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${Q} integers outside of the safe integer range are not supported`);return new V(_.negint,x0-BigInt(o),9)}function cu(r,e){let t=e.value,n=typeof t=="bigint"?t*x0-Q6:t*-1-1;Et(r,e.type.majorEncoded,n)}cu.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*x0-Q6:t*-1-1;return n<mt[0]?1:n<mt[1]?2:n<mt[2]?3:n<mt[3]?5:9};cu.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function La(r,e,t,n){qn(r,e,t+n);let o=ci(r,e+t,e+t+n);return new V(_.bytes,o,t+n)}function j6(r,e,t,n){return La(r,e,1,t)}function J6(r,e,t,n){return La(r,e,2,ur(r,e+1,n))}function e8(r,e,t,n){return La(r,e,3,dr(r,e+1,n))}function t8(r,e,t,n){return La(r,e,5,fr(r,e+1,n))}function r8(r,e,t,n){let o=hr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer bytes lengths not supported`);return La(r,e,9,o)}function lu(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===_.string?au(r.value):r.value),r.encodedBytes}function ui(r,e){let t=lu(e);Et(r,e.type.majorEncoded,t.length),r.push(t)}ui.encodedSize=function(e){let t=lu(e);return Et.encodedSize(t.length)+t.length};ui.compareTokens=function(e,t){return lv(lu(e),lu(t))};function lv(r,e){return r.length<e.length?-1:r.length>e.length?1:$6(r,e)}function Oa(r,e,t,n,o){let s=t+n;qn(r,e,s);let i=new V(_.string,F6(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=ci(r,e+t,e+s)),i}function n8(r,e,t,n){return Oa(r,e,1,t,n)}function o8(r,e,t,n){return Oa(r,e,2,ur(r,e+1,n),n)}function s8(r,e,t,n){return Oa(r,e,3,dr(r,e+1,n),n)}function i8(r,e,t,n){return Oa(r,e,5,fr(r,e+1,n),n)}function a8(r,e,t,n){let o=hr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer string lengths not supported`);return Oa(r,e,9,o,n)}var c8=ui;function di(r,e,t,n){return new V(_.array,n,t)}function l8(r,e,t,n){return di(r,e,1,t)}function u8(r,e,t,n){return di(r,e,2,ur(r,e+1,n))}function d8(r,e,t,n){return di(r,e,3,dr(r,e+1,n))}function f8(r,e,t,n){return di(r,e,5,fr(r,e+1,n))}function h8(r,e,t,n){let o=hr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer array lengths not supported`);return di(r,e,9,o)}function p8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return di(r,e,1,1/0)}function uu(r,e){Et(r,_.array.majorEncoded,e.value)}uu.compareTokens=Cr.compareTokens;uu.encodedSize=function(e){return Et.encodedSize(e.value)};function fi(r,e,t,n){return new V(_.map,n,t)}function m8(r,e,t,n){return fi(r,e,1,t)}function g8(r,e,t,n){return fi(r,e,2,ur(r,e+1,n))}function y8(r,e,t,n){return fi(r,e,3,dr(r,e+1,n))}function w8(r,e,t,n){return fi(r,e,5,fr(r,e+1,n))}function E8(r,e,t,n){let o=hr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer map lengths not supported`);return fi(r,e,9,o)}function b8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return fi(r,e,1,1/0)}function du(r,e){Et(r,_.map.majorEncoded,e.value)}du.compareTokens=Cr.compareTokens;du.encodedSize=function(e){return Et.encodedSize(e.value)};function x8(r,e,t,n){return new V(_.tag,t,1)}function _8(r,e,t,n){return new V(_.tag,ur(r,e+1,n),2)}function v8(r,e,t,n){return new V(_.tag,dr(r,e+1,n),3)}function S8(r,e,t,n){return new V(_.tag,fr(r,e+1,n),5)}function R8(r,e,t,n){return new V(_.tag,hr(r,e+1,n),9)}function fu(r,e){Et(r,_.tag.majorEncoded,e.value)}fu.compareTokens=Cr.compareTokens;fu.encodedSize=function(e){return Et.encodedSize(e.value)};var mv=20,gv=21,yv=22,wv=23;function A8(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Q} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new V(_.null,null,1):new V(_.undefined,void 0,1)}function I8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return new V(_.break,void 0,1)}function _0(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Q} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Q} Infinity values are not supported`)}return new V(_.float,r,e)}function T8(r,e,t,n){return _0(v0(r,e+1),3,n)}function C8(r,e,t,n){return _0(S0(r,e+1),5,n)}function k8(r,e,t,n){return _0(L8(r,e+1),9,n)}function hu(r,e,t){let n=e.value;if(n===!1)r.push([_.float.majorEncoded|mv]);else if(n===!0)r.push([_.float.majorEncoded|gv]);else if(n===null)r.push([_.float.majorEncoded|yv]);else if(n===void 0)r.push([_.float.majorEncoded|wv]);else{let o,s=!1;(!t||t.float64!==!0)&&(N8(n),o=v0(Jr,1),n===o||Number.isNaN(n)?(Jr[0]=249,r.push(Jr.slice(0,3)),s=!0):(P8(n),o=S0(Jr,1),n===o&&(Jr[0]=250,r.push(Jr.slice(0,5)),s=!0))),s||(Ev(n),o=L8(Jr,1),Jr[0]=251,r.push(Jr.slice(0,9)))}}hu.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){N8(n);let o=v0(Jr,1);if(n===o||Number.isNaN(n))return 3;if(P8(n),o=S0(Jr,1),n===o)return 5}return 9};var D8=new ArrayBuffer(9),kr=new DataView(D8,1),Jr=new Uint8Array(D8,0);function N8(r){if(r===1/0)kr.setUint16(0,31744,!1);else if(r===-1/0)kr.setUint16(0,64512,!1);else if(Number.isNaN(r))kr.setUint16(0,32256,!1);else{kr.setFloat32(0,r);let e=kr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)kr.setUint16(0,31744,!1);else if(t===0)kr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?kr.setUint16(0,0):o<-14?kr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):kr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function v0(r,e){if(r.length-e<2)throw new Error(`${Q} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,s;return n===0?s=o*2**-24:n!==31?s=(o+1024)*2**(n-25):s=o===0?1/0:NaN,t&32768?-s:s}function P8(r){kr.setFloat32(0,r,!1)}function S0(r,e){if(r.length-e<4)throw new Error(`${Q} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function Ev(r){kr.setFloat64(0,r,!1)}function L8(r,e){if(r.length-e<8)throw new Error(`${Q} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}hu.compareTokens=Cr.compareTokens;function Se(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function pu(r){return()=>{throw new Error(`${Q} ${r}`)}}var $=[];for(let r=0;r<=23;r++)$[r]=Se;$[24]=H6;$[25]=q6;$[26]=G6;$[27]=W6;$[28]=Se;$[29]=Se;$[30]=Se;$[31]=Se;for(let r=32;r<=55;r++)$[r]=Se;$[56]=z6;$[57]=Y6;$[58]=X6;$[59]=Z6;$[60]=Se;$[61]=Se;$[62]=Se;$[63]=Se;for(let r=64;r<=87;r++)$[r]=j6;$[88]=J6;$[89]=e8;$[90]=t8;$[91]=r8;$[92]=Se;$[93]=Se;$[94]=Se;$[95]=pu("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)$[r]=n8;$[120]=o8;$[121]=s8;$[122]=i8;$[123]=a8;$[124]=Se;$[125]=Se;$[126]=Se;$[127]=pu("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)$[r]=l8;$[152]=u8;$[153]=d8;$[154]=f8;$[155]=h8;$[156]=Se;$[157]=Se;$[158]=Se;$[159]=p8;for(let r=160;r<=183;r++)$[r]=m8;$[184]=g8;$[185]=y8;$[186]=w8;$[187]=E8;$[188]=Se;$[189]=Se;$[190]=Se;$[191]=b8;for(let r=192;r<=215;r++)$[r]=x8;$[216]=_8;$[217]=v8;$[218]=S8;$[219]=R8;$[220]=Se;$[221]=Se;$[222]=Se;$[223]=Se;for(let r=224;r<=243;r++)$[r]=pu("simple values are not supported");$[244]=Se;$[245]=Se;$[246]=Se;$[247]=A8;$[248]=pu("simple values are not supported");$[249]=T8;$[250]=C8;$[251]=k8;$[252]=Se;$[253]=Se;$[254]=Se;$[255]=I8;var en=[];for(let r=0;r<24;r++)en[r]=new V(_.uint,r,1);for(let r=-1;r>=-24;r--)en[31-r]=new V(_.negint,r,1);en[64]=new V(_.bytes,new Uint8Array(0),1);en[96]=new V(_.string,"",1);en[128]=new V(_.array,0,1);en[160]=new V(_.map,0,1);en[244]=new V(_.false,!1,1);en[245]=new V(_.true,!0,1);en[246]=new V(_.null,null,1);function O8(r){switch(r.type){case _.false:return gn([244]);case _.true:return gn([245]);case _.null:return gn([246]);case _.bytes:return r.value.length?void 0:gn([64]);case _.string:return r.value===""?gn([96]):void 0;case _.array:return r.value===0?gn([128]):void 0;case _.map:return r.value===0?gn([160]):void 0;case _.uint:return r.value<24?gn([Number(r.value)]):void 0;case _.negint:if(r.value>=-24)return gn([31-Number(r.value)])}}var xv={float64:!1,mapSorter:Sv,quickEncodeToken:O8};function _v(){let r=[];return r[_.uint.major]=Cr,r[_.negint.major]=cu,r[_.bytes.major]=ui,r[_.string.major]=c8,r[_.array.major]=uu,r[_.map.major]=du,r[_.tag.major]=fu,r[_.float.major]=hu,r}var B8=_v(),R0=new Na,gu=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${li} object contains circular references`);return new r(t,e)}},Ao={null:new V(_.null,null),undefined:new V(_.undefined,void 0),true:new V(_.true,!0),false:new V(_.false,!1),emptyArray:new V(_.array,0),emptyMap:new V(_.map,0)},Io={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new V(_.float,r):r>=0?new V(_.uint,r):new V(_.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new V(_.uint,r):new V(_.negint,r)},Uint8Array(r,e,t,n){return new V(_.bytes,r)},string(r,e,t,n){return new V(_.string,r)},boolean(r,e,t,n){return r?Ao.true:Ao.false},null(r,e,t,n){return Ao.null},undefined(r,e,t,n){return Ao.undefined},ArrayBuffer(r,e,t,n){return new V(_.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new V(_.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Ao.emptyArray,new V(_.break)]:Ao.emptyArray;n=gu.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=mu(i,t,n);return t.addBreakTokens?[new V(_.array,r.length),o,new V(_.break)]:[new V(_.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",s=o?r.keys():Object.keys(r),i=o?r.size:s.length;if(!i)return t.addBreakTokens===!0?[Ao.emptyMap,new V(_.break)]:Ao.emptyMap;n=gu.createCheck(n,r);let a=[],c=0;for(let l of s)a[c++]=[mu(l,t,n),mu(o?r.get(l):r[l],t,n)];return vv(a,t),t.addBreakTokens?[new V(_.map,i),a,new V(_.break)]:[new V(_.map,i),a]}};Io.Map=Io.Object;Io.Buffer=Io.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Io[`${r}Array`]=Io.DataView;function mu(r,e={},t){let n=O6(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||Io[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=Io[n];if(!s)throw new Error(`${li} unsupported type: ${n}`);return s(r,n,e,t)}function vv(r,e){e.mapSorter&&r.sort(e.mapSorter)}function Sv(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,s=B8[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function M8(r,e,t,n){if(Array.isArray(e))for(let o of e)M8(r,o,t,n);else t[e.type.major](r,e,n)}function U8(r,e,t){let n=mu(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let s=e[n.type.major];if(s.encodedSize){let i=s.encodedSize(n,t),a=new Na(i);if(s(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return Da(a.chunks[0])}}return R0.reset(),M8(R0,n,e,t),R0.toBytes(!0)}function hi(r,e){return e=Object.assign({},xv,e),U8(r,B8,e)}var Rv={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},yu=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=en[e];if(t===void 0){let n=$[e];if(!n)throw new Error(`${Q} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},Ba=Symbol.for("DONE"),wu=Symbol.for("BREAK");function Av(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=pi(e,t);if(s===wu){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(s===Ba)throw new Error(`${Q} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function Iv(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},s=n?new Map:void 0;for(let i=0;i<r.value;i++){let a=pi(e,t);if(a===wu){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===Ba)throw new Error(`${Q} found map but not enough entries (got ${i} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Q} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&s.has(a)||!n&&a in o))throw new Error(`${Q} found repeat map key "${a}"`);let c=pi(e,t);if(c===Ba)throw new Error(`${Q} found map but not enough entries (got ${i} [no value], expected ${r.value})`);n?s.set(a,c):o[a]=c}return n?s:o}function pi(r,e){if(r.done())return Ba;let t=r.next();if(t.type===_.break)return wu;if(t.type.terminal)return t.value;if(t.type===_.array)return Av(t,r,e);if(t.type===_.map)return Iv(t,r,e);if(t.type===_.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=pi(r,e);return e.tags[t.value](n)}throw new Error(`${Q} tag not supported (${t.value})`)}throw new Error("unsupported")}function A0(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Q} data to decode must be a Uint8Array`);e=Object.assign({},Rv,e);let t=e.tokenizer||new yu(r,e),n=pi(t,e);if(n===Ba)throw new Error(`${Q} did not find any content to decode`);if(n===wu)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function Dr(r,e){let[t,n]=A0(r,e);if(n.length>0)throw new Error(`${Q} too many terminals, data makes no sense`);return t}var Gn="/",F8=new TextEncoder().encode(Gn),bu=F8[0],De=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=L(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==bu)throw new Error("Invalid key")}toString(e="utf8"){return U(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Gn))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=F8),this._buf[0]!==bu){let e=new Uint8Array(this._buf.byteLength+1);e.fill(bu,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===bu;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let s=t[o],i=n[o];if(s<i)return!0;if(s>i)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Gn).slice(1)}type(){return Tv(this.baseNamespace())}name(){return Cv(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Gn)||(e+=Gn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Gn):new r(e.slice(0,-1).join(Gn))}child(e){return this.toString()===Gn?e:e.toString()===Gn?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...kv(e.map(t=>t.namespaces()))])}};function Tv(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function Cv(r){let e=r.split(":");return e[e.length-1]}function kv(r){return[].concat(...r)}var H8="/pin/",V8="/pinned-block/",I0=br,K8=1;function $8(r){return r.version===0&&(r=r.toV1()),new De(`${H8}${r.toString(I0)}`)}var xu=class{datastore;blockstore;dagWalkers;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.dagWalkers=n}async*add(e,t={}){let n=$8(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let s=new or({concurrency:K8});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>J(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,hi(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=this.dagWalkers[e.code];if(o==null)throw new Error(`No dag walker found for cid codec ${e.code}`);let s=await this.blockstore.get(e,n);yield e;for await(let i of o.walk(s))yield*await t.add(async()=>this.#e(i,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new De(`${V8}${I0.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=Dr(await this.datastore.get(o,n))}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,hi(s),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=$8(e),o=await this.datastore.get(n,t),s=Dr(o);await this.datastore.delete(n,t);let i=new or({concurrency:K8});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>J(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:H8+(e.cid!=null?`${e.cid.toString(br)}`:"")},e)){let o=le.parse(t.toString().substring(5),br),s=Dr(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new De(`${V8}${I0.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}};var Dv=5,_u=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??Dv}async start(){await wr(...this.routers)}async stop(){await Er(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new m("No content routers available","ERR_NO_ROUTERS_AVAILABLE");let n=new qt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of Ot(n.toGenerator(),...mi(this.routers,"findProviders").map(s=>s.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let s=await this.findPeer(o.id,t);return s.multiaddrs.length===0?null:s}catch(s){return this.log.error("could not load multiaddrs for peer %p",o.id,s),null}},{peerId:o.id,signal:t.signal}).catch(s=>{this.log.error("could not load multiaddrs for peer %p",o.id,s)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new m("No content routers available","ERR_NO_ROUTERS_AVAILABLE");await Promise.all(mi(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(mi(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(mi(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new m("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");let n=this,o=Ot(...mi(this.routers,"findPeer").map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s;throw new m("Could not find peer in routing","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new m("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");for await(let n of Ot(...mi(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function mi(r,e){return r.filter(t=>t[e]!=null)}var To={},gi=r=>{r.addEventListener("message",e=>{gi.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{gi.dispatchEvent("message",r,e)})};gi.addEventListener=(r,e)=>{To[r]==null&&(To[r]=[]),To[r].push(e)};gi.removeEventListener=(r,e)=>{To[r]!=null&&(To[r]=To[r].filter(t=>t===e))};gi.dispatchEvent=function(r,e,t){To[r]!=null&&To[r].forEach(n=>n(e,t))};var T0=gi;var C0="lock:worker:request-read",k0="lock:worker:release-read",D0="lock:master:grant-read",N0="lock:worker:request-write",P0="lock:worker:release-write",L0="lock:master:grant-write";var q8=(r=21)=>Math.random().toString().substring(2);var G8=(r,e,t,n,o)=>(s,i)=>{if(i.data.type!==t)return;let a={type:i.data.type,name:i.data.name,identifier:i.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{s.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=d=>{if(d==null||d.data==null)return;let u={type:d.data.type,name:d.data.name,identifier:d.data.identifier};u.type===n&&u.identifier===a.identifier&&(s.removeEventListener("message",l),c())};s.addEventListener("message",l)})}}}))},W8=(r,e,t,n)=>async()=>{let o=q8();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(s=>{let i=a=>{if(a==null||a.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",i),s(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",i)})},Nv={singleProcess:!1},z8=r=>{if(r=Object.assign({},Nv,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return T0.addEventListener("message",G8(t,"requestReadLock",C0,k0,D0)),T0.addEventListener("message",G8(t,"requestWriteLock",N0,P0,L0)),t}return{isWorker:!0,readLock:t=>W8(t,C0,D0,k0),writeLock:t=>W8(t,N0,L0,P0)}};var ys={},Co;async function O0(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>jr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var Pv=(r,e)=>{if(Co.isWorker===!0)return{readLock:Co.readLock(r,e),writeLock:Co.writeLock(r,e)};let t=new Tr({concurrency:1}),n;return{async readLock(){if(n!=null)return O0(n,e);n=new Tr({concurrency:e.concurrency,autoStart:!1});let o=n,s=O0(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),s},async writeLock(){return n=null,O0(t,e)}}},Lv={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ma(r){let e=Object.assign({},Lv,r);return Co==null&&(Co=z8(e),Co.isWorker!==!0&&(Co.addEventListener("requestReadLock",t=>{ys[t.data.name]!=null&&ys[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Co.addEventListener("requestWriteLock",async t=>{ys[t.data.name]!=null&&ys[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),ys[e.name]==null&&(ys[e.name]=Pv(e.name,e)),ys[e.name]}var vu=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Ma({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await wr(this.child),this.started=!0}async stop(){await Er(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let s of e){if(await o.pins.isPinned(s))throw new Error("CID was pinned");yield s}}(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var X8=42;function Ov(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=le.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new V(_.tag,X8),new V(_.bytes,t)]}function Bv(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function Mv(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var Y8={float64:!0,typeEncoders:{Object:Ov,undefined:Bv,number:Mv}},nF={...Y8,typeEncoders:{...Y8.typeEncoders}};function Uv(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return le.decode(r.subarray(1))}var B0={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};B0.tags[X8]=Uv;var oF={...B0,tags:B0.tags.slice()};var Q8=113;var Z8=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===_.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===_.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[_.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);e.push(o)}[_.negint.major](e,t){this[_.uint.major](e,t)}[_.bytes.major](e,t){throw new Error(`${li} unsupported type: Uint8Array`)}[_.string.major](e,t){this.prefix(e);let n=au(JSON.stringify(t.value));e.push(n.length>32?Da(n):n)}[_.array.major](e,t){this.prefix(e),this.inRecursive.push({type:_.array,elements:0}),e.push([91])}[_.map.major](e,t){this.prefix(e),this.inRecursive.push({type:_.map,elements:0}),e.push([123])}[_.tag.major](e,t){}[_.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(i.type===_.array)e.push([93]);else if(i.type===_.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${li} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],s=!1;for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i),!s&&(o[i]===46||o[i]===101||o[i]===69)&&(s=!0);s||(o.push(46),o.push(48)),e.push(o)}};var ws=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${Q} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${Q} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new V(_.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${Q} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Q} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let s=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),i=parseFloat(s);return n?new V(_.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new V(i>=0?_.uint:_.negint,i,this._pos-e):new V(i>=0?_.uint:_.negint,BigInt(s),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Q} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let s=this._pos,i=0;s<this.data.length&&i<65536;s++,i++){let a=this.data[s];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,s));return this._pos=s+1,new V(_.string,c,i)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Q} unexpected end of unicode escape sequence at position ${this._pos}`);let s=0;for(let i=0;i<4;i++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${Q} unexpected unicode escape character at position ${this._pos}`);s=s*16+a,this._pos++}return s},o=()=>{let s=this.ch(),i=null,a=s>239?4:s>223?3:s>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Q} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:s<128&&(i=s);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(s&31)<<6|c&63,u>127&&(i=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(s&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(s&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(i=u))}i===null?(i=65533,a=1):i>65535&&(i-=65536,t.push(i>>>10&1023|55296),i=56320|i&1023),t.push(i),this._pos+=a};for(;!this.done();){let s=this.ch(),i;switch(s){case 92:if(this._pos++,this.done())throw new Error(`${Q} unexpected string termination at position ${this._pos}`);switch(i=this.ch(),this._pos++,i){case 34:case 39:case 92:case 47:t.push(i);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${Q} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new V(_.string,b0(t),this._pos-e);default:if(s<32)throw new Error(`${Q} invalid control character at position ${this._pos}`);s<128?(t.push(s),this._pos++):o()}}throw new Error(`${Q} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new V(_.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new V(_.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new V(_.null,null,4);case 102:return this.expect([102,97,108,115,101]),new V(_.false,!1,5);case 116:return this.expect([116,114,117,101]),new V(_.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${Q} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new V(_.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new V(_.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new V(_.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new V(_.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${Q} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function Su(r,e){return e=Object.assign({tokenizer:new ws(r,e)},e),Dr(r,e)}var Kv={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Kv.tags[42]=le.parse;var J8=297;var xF=new TextDecoder;var _F=new TextEncoder;var Hv=new TextDecoder;function M0(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function Ru(r,e){let t;[t,e]=M0(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function e5(r,e){let t;return[t,e]=M0(r,e),[t&7,t>>3,e]}function qv(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=e5(r,n),s===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=Ru(r,n)}else if(s===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let i;[i,n]=Ru(r,n),e.Name=Hv.decode(i)}else if(s===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=M0(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function t5(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=e5(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=Ru(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=Ru(r,t),n.push(qv(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let i={};return s&&(i.Data=s),i.Links=n||[],i}var SF=new TextEncoder,RF=2**32,AF=2**31;var CF=new TextEncoder;function r5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var n5=112;function o5(r){let e=r5(r),t=t5(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=le.decode(o.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(s.Name=o.Name),o.Tsize!==void 0&&(s.Tsize=o.Tsize),s})),n}var Wv={codec:n5,*walk(r){yield*o5(r).Links.map(t=>t.Hash)}},zv={codec:Lc,*walk(){}},s5=42,Yv={codec:Q8,*walk(r){let e=[],t=[];t[s5]=n=>{if(n[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");let o=le.decode(n.subarray(1));return e.push(o),o},Dr(r,{tags:t}),yield*e}},U0=class extends ws{tokenBuffer;constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===_.map){let t=this._next();if(t.type===_.string&&t.value==="/"){let n=this._next();if(n.type===_.string){if(this._next().type!==_.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new V(_.tag,42,0)}if(n.type===_.map){let o=this._next();if(o.type===_.string&&o.value==="bytes"){let s=this._next();if(s.type===_.string){for(let a=0;a<2;a++)if(this._next().type!==_.break)throw new Error("Invalid encoded Bytes form");let i=ot.decode(`m${s.value}`);return new V(_.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Xv={codec:J8,*walk(r){let e=[],t=[];t[s5]=n=>{let o=le.parse(n);return e.push(o),o},Su(r,{tags:t,tokenizer:new U0(r,{tags:t,allowIndefinite:!0,allowUndefined:!0,allowNaN:!0,allowInfinity:!0,allowBigInt:!0,strict:!1,rejectDuplicateMapKeys:!1})}),yield*e}},Qv={codec:lm,*walk(){}};function i5(r=[]){let e={};return[Wv,zv,Yv,Xv,Qv,...r].forEach(t=>{e[t.codec]=t}),e}var F0=new De("/version"),a5=1;async function c5(r){if(!await r.has(F0)){await r.put(F0,L(`${a5}`));return}let e=await r.get(F0),t=U(e);if(parseInt(t,10)!==a5)throw new Error("Unknown datastore version, a datastore migration may be required")}function l5(r=[]){let e={};return[ke,Qf,Mt,...r].forEach(t=>{e[t.code]=t}),e}var Wn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var wi={};Ye(wi,{abortedError:()=>rS,closeFailedError:()=>Jv,deleteFailedError:()=>h5,getFailedError:()=>eS,hasFailedError:()=>tS,notFoundError:()=>Ua,openFailedError:()=>jv,putFailedError:()=>f5});var zn=nt(yi(),1);function jv(r){return r=r??new Error("Open failed"),(0,zn.default)(r,"ERR_OPEN_FAILED")}function Jv(r){return r=r??new Error("Close failed"),(0,zn.default)(r,"ERR_CLOSE_FAILED")}function f5(r){return r=r??new Error("Put failed"),(0,zn.default)(r,"ERR_PUT_FAILED")}function eS(r){return r=r??new Error("Get failed"),(0,zn.default)(r,"ERR_GET_FAILED")}function h5(r){return r=r??new Error("Delete failed"),(0,zn.default)(r,"ERR_DELETE_FAILED")}function tS(r){return r=r??new Error("Has failed"),(0,zn.default)(r,"ERR_HAS_FAILED")}function Ua(r){return r=r??new Error("Not Found"),(0,zn.default)(r,"ERR_NOT_FOUND")}function rS(r){return r=r??new Error("Aborted"),(0,zn.default)(r,"ERR_ABORTED")}var Fa=class extends Wn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(lt.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(lt.encode(e.multihash.bytes));if(t==null)throw Ua();return t}has(e){return this.data.has(lt.encode(e.multihash.bytes))}async delete(e){this.data.delete(lt.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:le.createV1(Lc,Fr(lt.decode(e))),block:t}}};function nS(r){return r[Symbol.asyncIterator]!=null}function oS(r,e){let t=0;if(nS(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Bs(r),{value:o,done:s}=n.next();if(s===!0)return function*(){}();let i=e(o,t++);if(typeof i.then=="function")return async function*(){await i&&(yield o);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){i===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)}()}var tn=oS;var hV=cr("blockstore:core:tiered");var p5={...wi};var Au=0,Iu=class extends Wn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===Au||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===Au)return e.multihash.digest;if(this.child==null)throw p5.notFoundError();return this.child.get(e)}has(e){return e.multihash.code===Au?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==Au&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function sS(r){return r[Symbol.asyncIterator]!=null}function m5(r){return r?.then!=null}function iS(r,e){let t=0;if(sS(r))return async function*(){for await(let c of r){let l=e(c,t++);m5(l)&&await l,yield c}}();let n=Bs(r),{value:o,done:s}=n.next();if(s===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let c of n){let l=e(c,t++);m5(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var Va=iS;var Tu=class{child;hashers;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new Iu(e.blockstore),this.hashers=e.hashers??{}}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new H("blocks:put:duplicate",e)),e):(n.onProgress?.(new H("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new H("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=tn(e,async({cid:s})=>{let i=await this.child.has(s,t);return i&&t.onProgress?.(new H("blocks:put-many:duplicate",s)),!i}),o=Va(n,async({cid:s,block:i})=>{t.onProgress?.(new H("blocks:put-many:providers:notify",s)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(s,i,t)))});t.onProgress?.(new H("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){t.onProgress?.(new H("blocks:get:providers:get",e));let n=await g5(e,this.components.blockBrokers,this.hashers[e.multihash.code],{...t,log:this.log});return t.onProgress?.(new H("blocks:get:blockstore:put",e)),await this.child.put(e,n,t),t.onProgress?.(new H("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,n,t))),n}return t.onProgress?.(new H("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new H("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Va(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){t.onProgress?.(new H("blocks:get-many:providers:get",n));let o=await g5(n,this.components.blockBrokers,this.hashers[n.multihash.code],{...t,log:this.log});t.onProgress?.(new H("blocks:get-many:blockstore:put",n)),await this.child.put(n,o,t),t.onProgress?.(new H("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,o,t)))}}))}async delete(e,t={}){t.onProgress?.(new H("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new H("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new H("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},Cu=class extends Tu{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await wr(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Er(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(o=>o.createSession==null?o:o.createSession(t));return new V0({blockstore:this.child,blockBrokers:n,hashers:this.hashers,logger:this.logger},{root:e})}},V0=class extends Tu{closeController;constructor(e,t){super(e),this.closeController=new AbortController,K(1/0,this.closeController.signal),this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=_e([this.closeController.signal,n.signal]);K(1/0,o);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=_e([this.closeController.signal,t.signal]);K(1/0,n);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=_e([this.closeController.signal,e.signal]);K(1/0,t);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function aS(r){return typeof r.retrieve=="function"}var cS=(r,e)=>{if(e==null)throw new m(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`,"ERR_UNKNOWN_HASH_ALG");return async t=>{let n=await e.digest(t);if(!J(n.digest,r.multihash.digest))throw new m("Hash of downloaded block did not match multihash from passed CID","ERR_HASH_MISMATCH")}};async function g5(r,e,t,n){let o=cS(r,t),s=new AbortController,i=_e([s.signal,n.signal]);K(1/0,s.signal,i);let a=[];for(let c of e)aS(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,d=await c.retrieve(r,{...n,signal:i,validateFn:async u=>{await o(u),l=!0}});return l||await o(d),d}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{s.abort(),i.clear()}}var y5=1,w5=5;var K0=nt(Wl(),1);var lS=Math.LN2*Math.LN2,ku=class r{static create(e,t=.005){let n=uS(e,t);return new r(n)}seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=dS(e.hashes??8),this.bits=e.bits??1024,this.buffer=de(Math.ceil(this.bits/8))}add(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.seeds.length;t++){let o=K0.default.x86.hash32(e,this.seeds[t])%this.bits;this.setbit(o)}}has(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.seeds.length;t++){let o=K0.default.x86.hash32(e,this.seeds[t])%this.bits;if(!this.getbit(o))return!1}return!0}clear(){this.buffer.fill(0)}setbit(e){let t=0,n=e;for(;n>7;)t++,n-=8;let o=this.buffer[t];o|=1<<n,this.buffer[t]=o}getbit(e){let t=0,n=e;for(;n>7;)t++,n-=8;return(this.buffer[t]&1<<n)!==0}};function uS(r,e=.005){let t=Math.round(-1*r*Math.log(e)/lS),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function dS(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ae(je(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var Es=class extends me{intialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),K(1/0,this),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=ku.create(this.maxProviders)}async retrieve(e,t={}){let n=ot.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let s=ee();if(this.requests.set(n,s.promise),this.providers.length===0){let l=!1;this.intialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.intialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.intialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let i=!1,a=new or({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{i=!0,s.resolve(l.detail.result)}),a.addEventListener("idle",()=>{i||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let d=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(d)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),s.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),s.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(d=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,d)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await s.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=ee(),s=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let i of this.findNewProviders(e,n)){if(s===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(i)&&(this.log("found %d/%d new providers",s,this.maxProviders),this.providers.push(i),this.safeDispatchEvent("provider",{detail:i}),s++,s===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",s);break}}if(this.log("found %d/%d new session peers",s,this.maxProviders),s<t)throw new m(`Found ${s} of ${t} ${this.name} providers for ${e}`,"ERR_INSUFFICIENT_PROVIDERS_FOUND")}).catch(i=>{this.log.error("error searching routing for potential session peers for %c",e,i.errors??i),o.reject(i)}),o.promise}};var Du=class{blockstore;datastore;pins;logger;routing;dagWalkers;hashers;dns;metrics;log;constructor(e){this.logger=e.logger??So(),this.log=this.logger.forComponent("helia"),this.hashers=l5(e.hashers),this.dagWalkers=i5(e.dagWalkers),this.dns=e.dns??su(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,hashers:this.hashers,dagWalkers:this.dagWalkers,logger:this.logger,blockBrokers:[],dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new _u(t,{routers:(e.routers??[]).flatMap(o=>{let s=[o];return o[cn]!=null&&s.push(o[cn]),o[ln]!=null&&s.push(o[ln]),s}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new Cu(t);this.pins=new xu(e.datastore,n,this.dagWalkers),this.blockstore=new vu(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await c5(this.datastore),await wr(this.blockstore,this.datastore,this.routing)}async stop(){await Er(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await Gt(o.deleteMany(async function*(){for await(let{cid:s}of o.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new H("helia:gc:deleted",s))}catch(i){n.log.error("Error during gc",i),e.onProgress?.(new H("helia:gc:error",i))}}()))}finally{t()}this.log("gc finished")}};var $0=class extends Es{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toBytes()}equals(e,t){return e.equals(t)}};function E5(r,e){return new $0(r,e)}var Nu=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var H0=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Pu(r){let{name:e,metrics:t}=r,n;return t!=null?n=new H0({name:e,metrics:t}):n=new Map,n}function fS(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Lt(r);e.push(t),r=r.slice(he(t))}return e}var b5=fS;var Lu=class extends me{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),K(1/0,this),this.peers=Ta({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=Pu({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=U(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??et.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===et.WantHave&&t.wantType===et.WantBlock&&(o.wantType=et.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===et.WantBlock?(await nr(this,"block",t?.signal,{filter:a=>J(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await nr(this,"presence",t?.signal,{filter:i=>J(e.multihash.digest,i.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=ee(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Hn;for(let[s,i]of this.wants.entries())t.has(s)||i.cancel||(n.add(s),o.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:i.priority,wantType:i.wantType,cancel:i.cancel,sendDontHave:i.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let s of n)t.add(s)}catch(s){this.log.error("error sending full wantlist to new peer",s)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=U(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Hn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:et.WantHave,priority:1}),await this.network.sendMessage(t,o),(await nr(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&J(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:et.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Hn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:et.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await nr(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&J(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=U(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p with %d blocks",e,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let s=b5(o.prefix),i=s[0],a=s[1],c=s[2],l=c===ke.code?ke:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let d=l.digest(o.data);d.then!=null&&(d=await d);let u=le.create(i===0?0:1,a,d);this.log("received block from %p for %c",e,u),this.safeDispatchEvent("block",{detail:{sender:e,cid:u,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:u,has:!0,block:o.data}});let f=U(u.multihash.bytes,"base64"),h=this.wants.get(f);h!=null&&(h.cancel=!0,n=!0)}for(let{cid:o,type:s}of t.blockPresences){let i=le.decode(o);this.log("received %s from %p for %c",s,e,i),this.safeDispatchEvent("presence",{detail:{sender:e,cid:i,has:s===vr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Hn(!0);for(let[o,s]of this.wants.entries())s.cancel||(t.add(o),n.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:1,wantType:et.WantBlock,cancel:!1,sendDontHave:!1}));if(n.wantlist.size===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var Ou=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new Nu(e),this.network=new Kc(e,t),this.peerWantLists=new Zl({...e,network:this.network},t),this.wantList=new Lu({...e,network:this.network},t)}createSession(e={}){return E5({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=_e([n.signal,t.signal]);K(1/0,n.signal,o),this.network.findAndConnect(e,{...t,signal:o}).catch(s=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,s)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var x5=(r,e={})=>new Ou(r,e);var q0=class{bitswap;started;constructor(e,t={}){let{hashers:n}=e;this.bitswap=x5(e,{hashLoader:{getHasher:async o=>{let s;if(typeof o=="string"?s=Object.values(n).find(i=>i.name===o):s=n[o],s!=null)return s;throw new Error(`Could not load hasher for code/name "${o}"`)}},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,o,s)=>{await this.bitswap.notify(n,o,s)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function G0(r={}){return e=>new q0(e,r)}var Bu=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let f=Number.parseInt(u,e);if(!Number.isNaN(f))return f});if(d===void 0)break;if(s*=e,s+=d,s>l||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&c&&i>1?void 0:s})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];t[o]=s>>8,t[o+1]=s&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var _5=45,hS=15,Ei=new Bu;function W0(r){if(!(r.length>hS))return Ei.new(r).parseWith(()=>Ei.readIPv4Addr())}function z0(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>_5))return Ei.new(r).parseWith(()=>Ei.readIPv6Addr())}function Mu(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>_5))return Ei.new(r).parseWith(()=>Ei.readIPAddr())}function bi(r){return!!W0(r)}function xi(r){return!!z0(r)}function Uu(r){return!!Mu(r)}var S5=nt(v5(),1),pS=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],mS=pS.map(r=>new S5.Netmask(r));function Y0(r){for(let e of mS)if(e.contains(r))return!0;return!1}function gS(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function yS(r){let e=r.split(":");if(e.length<2)return!1;let t=e[e.length-1].padStart(4,"0"),n=e[e.length-2].padStart(4,"0"),o=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return Y0(o)}function wS(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function ES(r){let e=r.split(":"),t=e[e.length-1];return Y0(t)}function bS(r){return/^::$/.test(r)||/^::1$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function Zt(r){return bi(r)?Y0(r):gS(r)?yS(r):wS(r)?ES(r):xi(r)?bS(r):void 0}var JK=parseInt("0xFFFF",16),e$=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var I5=bi,RS=xi,X0=function(r){let e=0;if(r=r.toString().trim(),I5(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(RS(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=I5(t[n]),i;s&&(i=X0(t[n]),t[n]=U(i.slice(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,U(i.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let s=parseInt(t[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},T5=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let s=0;s<t;s++)o.push(r[e+s]);return o.join(".")}if(t===16){let o=[];for(let s=0;s<t;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var _i={},Q0={},IS=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];IS.forEach(r=>{let e=TS(...r);Q0[e.code]=e,_i[e.name]=e});function TS(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function te(r){if(typeof r=="number"){if(Q0[r]!=null)return Q0[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(_i[r]!=null)return _i[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var O$=te("ip4"),B$=te("ip6"),M$=te("ipcidr");function e2(r,e){switch(te(r).code){case 4:case 41:return kS(e);case 42:return J0(e);case 6:case 273:case 33:case 132:return D5(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return J0(e);case 421:return LS(e);case 444:return k5(e);case 445:return k5(e);case 466:return PS(e);case 481:return globalThis.encodeURIComponent(J0(e));default:return U(e,"base16")}}function t2(r,e){switch(te(r).code){case 4:return C5(e);case 41:return C5(e);case 42:return j0(e);case 6:case 273:case 33:case 132:return r2(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return j0(e);case 421:return DS(e);case 444:return OS(e);case 445:return BS(e);case 466:return NS(e);case 481:return j0(globalThis.decodeURIComponent(e));default:return L(e,"base16")}}var Z0=Object.values(xr).map(r=>r.decoder),CS=function(){let r=Z0[0].or(Z0[1]);return Z0.slice(2).forEach(e=>r=r.or(e)),r}();function C5(r){if(!Uu(r))throw new Error("invalid ip address");return X0(r)}function kS(r){let e=T5(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!Uu(e))throw new Error("invalid ip address");return e}function r2(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function D5(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function j0(r){let e=L(r),t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function J0(r){let e=Lt(r);if(r=r.slice(he(e)),r.length!==e)throw new Error("inconsistent lengths");return U(r)}function DS(r){let e;r[0]==="Q"||r[0]==="1"?e=Fr(We.decode(`z${r}`)).bytes:e=le.parse(r).multihash.bytes;let t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function NS(r){let e=CS.decode(r),t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function PS(r){let e=Lt(r),t=r.slice(he(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+U(t,"base64url")}function LS(r){let e=Lt(r),t=r.slice(he(e));if(t.length!==e)throw new Error("inconsistent lengths");return U(t,"base58btc")}function OS(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=lt.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=r2(n);return ve([t,o],t.length+o.length)}function BS(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=lt.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=r2(n);return ve([t,o],t.length+o.length)}function k5(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=U(e,"base32"),o=D5(t);return`${n}:${o}`}function N5(r){r=n2(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let s=0;s<o.length;s++){let i=o[s],a=te(i);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw L5("invalid address: "+r);if(a.path===!0){n=n2(o.slice(s).join("/")),e.push([a.code,t2(a.code,n)]),t.push([a.code,n]);break}let c=t2(a.code,o[s]);e.push([a.code,c]),t.push([a.code,e2(a.code,c)])}return{string:P5(t),bytes:s2(e),tuples:e,stringTuples:t,path:n}}function o2(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=Lt(r,o),i=he(s),a=te(s),c=MS(a,r.slice(o+i));if(c===0){e.push([s]),t.push([s]),o+=i;continue}let l=r.slice(o+i,o+i+c);if(o+=c+i,o>r.length)throw L5("Invalid address Uint8Array: "+U(r,"base16"));e.push([s,l]);let d=e2(s,l);if(t.push([s,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:P5(t),tuples:e,stringTuples:t,path:n}}function P5(r){let e=[];return r.map(t=>{let n=te(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),n2(e.join("/"))}function s2(r){return ve(r.map(e=>{let t=te(e[0]),n=Uint8Array.from(Ve(t.code));return e.length>1&&e[1]!=null&&(n=ve([n,e[1]])),n}))}function MS(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Lt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+he(t)}}function n2(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function L5(r){return new Error("Error parsing address: "+r)}var US=Symbol.for("nodejs.util.inspect.custom"),a2=Symbol.for("@multiformats/js-multiaddr/multiaddr"),FS=[te("dns").code,te("dns4").code,te("dns6").code,te("dnsaddr").code],i2=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Fu=class r{bytes;#e;#t;#r;#o;[a2]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=o2(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=N5(e)}else if(ko(e))t=o2(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,s="",i=te("tcp"),a=te("udp"),c=te("ip4"),l=te("ip6"),d=te("dns6"),u=te("ip6zone");for(let[h,p]of this.stringTuples())h===u.code&&(s=`%${p??""}`),FS.includes(h)&&(t=i.name,o=443,n=`${p??""}${s}`,e=h===d.code?6:4),(h===i.code||h===a.code)&&(t=te(h).name,o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=te(h).name,n=`${p??""}${s}`,e=h===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},te(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>te(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(s2(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===_i.p2p.code&&e.push([n,o]),n===_i["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?U(We.decode(`z${n}`),"base58btc"):U(le.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return J(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(s=>s.resolvable);if(t==null)return[this];let n=vi.get(t.name);if(n==null)throw new i2(`no available resolver for ${t.name}`);return(await n(this,e)).map(s=>Z(s))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[US](){return`Multiaddr(${this.#e})`}};var vi=new Map;function ko(r){return!!r?.[a2]}function Z(r){return new Fu(r)}var VS=r=>r.toString().split("/").slice(1),$a=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Ae=r=>({match:e=>$a(t=>t===r).match(e),pattern:r}),$u=()=>({match:r=>$a(e=>typeof e=="string").match(r),pattern:"{string}"}),Hu=()=>({match:r=>$a(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),bt=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{We.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),Vu=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{Vf.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),ft=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Nr=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),Ne=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function tt(...r){function e(o){let s=VS(o);for(let i of r){let a=i.match(s);if(a===!1)return!1;s=a}return s}function t(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matches:t,exactMatch:n}}var l2=Ne(Ae("dns4"),$u()),u2=Ne(Ae("dns6"),$u()),d2=Ne(Ae("dnsaddr"),$u()),O5=Ne(Ae("dns"),$u()),dH=tt(l2),fH=tt(u2),hH=tt(d2),qu=tt(Nr(O5,d2,l2,u2)),B5=Ne(Ae("ip4"),$a(bi)),M5=Ne(Ae("ip6"),$a(xi)),U5=Nr(B5,M5),yn=Nr(U5,O5,l2,u2,d2),F5=tt(yn),pH=tt(B5),mH=tt(M5),V5=tt(U5),f2=Ne(yn,Ae("tcp"),Hu()),Ha=Ne(yn,Ae("udp"),Hu()),gH=tt(f2),yH=tt(Ha),h2=Ne(Ha,Ae("quic")),Gu=Ne(Ha,Ae("quic-v1")),KS=Nr(h2,Gu),wH=tt(h2),EH=tt(Gu),c2=Nr(yn,f2,Ha,h2,Gu),K5=Nr(Ne(c2,Ae("ws"),ft(bt()))),bH=tt(K5),$5=Nr(Ne(c2,Ae("wss"),ft(bt())),Ne(c2,Ae("tls"),Ae("ws"),ft(bt()))),xH=tt($5),H5=Ne(Ha,Ae("webrtc-direct"),ft(Vu()),ft(Vu()),ft(bt())),q5=tt(H5),G5=Ne(Gu,Ae("webtransport"),ft(Vu()),ft(Vu()),ft(bt())),Wu=tt(G5),Ku=Nr(K5,$5,Ne(f2,ft(bt())),Ne(KS,ft(bt())),Ne(yn,ft(bt())),H5,G5,bt()),_H=tt(Ku),$S=Ne(Ku,Ae("p2p-circuit"),bt()),bs=tt($S),HS=Nr(Ne(Ku,Ae("p2p-circuit"),Ae("webrtc"),ft(bt())),Ne(Ku,Ae("webrtc"),ft(bt())),Ae("webrtc")),W5=tt(HS),qS=Nr(Ne(yn,Ae("tcp"),Hu(),Ae("http"),ft(bt())),Ne(yn,Ae("http"),ft(bt()))),z5=tt(qS),GS=Nr(Ne(yn,Ae("tcp"),Nr(Ne(Ae("443"),Ae("http")),Ne(Hu(),Ae("https"))),ft(bt())),Ne(yn,Ae("tls"),Ae("http"),ft(bt())),Ne(yn,Ae("https"),ft(bt()))),Y5=tt(GS);var WS=[te("tcp").code,te("dns").code,te("dnsaddr").code,te("dns4").code,te("dns6").code];function X5(r){let e;try{e=te("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function Q5(r){return r.some(([e,t])=>e===te("tls").code)}function jt(r,e,t){let n=Z5[te(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${te(r).name}`);let o=n(e,t);return r===te("ip6").code?`[${o}]`:o}var Z5={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${jt(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${jt(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${jt(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${jt(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=Q5(e),n=X5(e);if(t&&n!==null)return`https://${n}`;let o=t?"https://":"http://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=jt(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},"http-path":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=jt(t[0],t[1]??"",e),o=decodeURIComponent(r);return`${n}/${o}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return jt(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return jt(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=jt(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=Q5(e),n=X5(e);if(t&&n!==null)return`wss://${n}`;let o=t?"wss://":"ws://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=jt(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=jt(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${jt(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${jt(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${jt(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function zu(r,e){let n=Z(r).stringTuples(),o=n.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let s=te(o[0]),i=Z5[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&WS.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var Yu=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;constructor(e,t){this.url=e instanceof URL?e:new URL(e),this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return ot.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let o=this.#l(e),s=new AbortController,i=()=>{s.abort()};t?.addEventListener("abort",i);try{let a=this.#a.get(o);return a==null&&(this.#e++,a=fetch(n.toString(),{signal:s.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"}).then(async c=>{if(this.log("GET %s %d",n,c.status),!c.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await c.arrayBuffer())}),this.#a.set(o,a)),await a}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`unable to fetch raw block for CID ${e}`))}finally{t?.removeEventListener("abort",i),this.#a.delete(o)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#o/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#o,pendingResponses:this.#a.size}}};function zS(r,e,t){return r.filter(n=>{if(Y5.matches(n)||e&&z5.matches(n))return t||qu.matches(n)?!0:Zt(n.toOptions().host)===!1;if(!e&&t){let{host:o}=n.toOptions();if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*Xu(r,e,t,n,o,s){for await(let i of e.findProviders(r,s)){let a=zS(i.multiaddrs,n,o);if(a.length===0)continue;let c=zu(a[0]);yield new Yu(c,t)}}var p2=class extends Es{routing;allowInsecure;allowLocal;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Qu,this.allowLocal=t.allowLocal??Zu}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*Xu(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function j5(r,e){return new p2(r,e)}var ju=class{allowInsecure;allowLocal;routing;log;logger;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.logger=e.logger,this.routing=e.routing,this.allowInsecure=t.allowInsecure??Qu,this.allowLocal=t.allowLocal??Zu}async retrieve(e,t={}){let n=[];for await(let o of Xu(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)){this.log("getting block for %c from %s",e,o.url);try{let s=await o.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(s)}catch(i){this.log.error("failed to validate block for %c from %s",e,o.url,i);continue}return s}catch(s){if(this.log.error("failed to get block for %c from %s",e,o.url,s),s instanceof Error?n.push(s):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${o.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,o.url);break}}}throw n.length>0?new AggregateError(n,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}createSession(e={}){return j5({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure})}};var Qu=!1,Zu=!1;function m2(r={}){return e=>new ju(e,r)}async function*Ju(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var ZS=nt(yi(),1);var jS=nt(e1(),1);var J5="ERR_IPNS_EXPIRED_RECORD",t1="ERR_UNRECOGNIZED_VALIDITY";var Yn="ERR_SIGNATURE_VERIFICATION";var y2="ERR_UNDEFINED_PARAMETER",eg="ERR_INVALID_RECORD_DATA",tg="ERR_INVALID_VALUE",rg="ERR_INVALID_EMBEDDED_KEY";var ng="ERR_RECORD_TOO_LARGE";var Jt;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.value!=null&&(s.uint32(10),s.bytes(o.value)),o.signatureV1!=null&&(s.uint32(18),s.bytes(o.signatureV1)),o.validityType!=null&&(s.uint32(24),r.ValidityType.codec().encode(o.validityType,s)),o.validity!=null&&(s.uint32(34),s.bytes(o.validity)),o.sequence!=null&&(s.uint32(40),s.uint64(o.sequence)),o.ttl!=null&&(s.uint32(48),s.uint64(o.ttl)),o.pubKey!=null&&(s.uint32(58),s.bytes(o.pubKey)),o.signatureV2!=null&&(s.uint32(66),s.bytes(o.signatureV2)),o.data!=null&&(s.uint32(74),s.bytes(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.value=o.bytes();break;case 2:i.signatureV1=o.bytes();break;case 3:i.validityType=r.ValidityType.codec().decode(o);break;case 4:i.validity=o.bytes();break;case 5:i.sequence=o.uint64();break;case 6:i.ttl=o.uint64();break;case 7:i.pubKey=o.bytes();break;case 8:i.signatureV2=o.bytes();break;case 9:i.data=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ne(o,r.codec()),r.decode=o=>re(o,r.codec())})(Jt||(Jt={}));var pr=nt(yi(),1);var sg=cr("ipns:utils"),ig=L("/ipns/"),YS=114,ag=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw sg.error(n),(0,pr.default)(n,y2)}let t;if(e.pubKey!=null){try{t=Qr(e.pubKey)}catch(o){throw sg.error(o),o}if(!(await ut(e.pubKey)).equals(r))throw(0,pr.default)(new Error("Embedded public key did not match PeerID"),rg)}else r.publicKey!=null&&(t=Qr(r.publicKey));if(t!=null)return t;throw(0,pr.default)(new Error("no public key is available"),y2)};var cg=r=>{let e=L("ipns-signature:");return ve([e,r])},qa=r=>"signatureV1"in r?Jt.encode({value:L(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:L(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):Jt.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data});function wn(r){let e=Jt.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw(0,pr.default)(new Error("missing data or signatureV2"),Yn);let t=ug(e.data),n=XS(t.Value),o=U(t.Validity);if(e.value!=null&&e.signatureV1!=null)return QS(e),{value:n,validityType:Jt.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:Jt.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}var w2=r=>ve([ig,r.toBytes()]),lg=r=>Ze(r.slice(ig.length));var ug=r=>{let e=Dr(r);if(e.ValidityType===0)e.ValidityType=Jt.ValidityType.EOL;else throw(0,pr.default)(new Error("Unknown validity type"),t1);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e},XS=r=>{if(r!=null){if(to(r))return`/ipns/${r.toCID().toString(br)}`;if(r instanceof Uint8Array){let n=U(r);n.startsWith("/")&&(r=n)}let e=r.toString().trim();if(e.startsWith("/")&&e.length>1)return e;let t=le.asCID(r);if(t!=null)return t.code===YS?`/ipns/${t.toString(br)}`:`/ipfs/${t.toV1().toString()}`;try{return r instanceof Uint8Array?`/ipfs/${le.decode(r).toV1().toString()}`:`/ipfs/${le.parse(e).toV1().toString()}`}catch{}}throw(0,pr.default)(new Error("Value must be a valid content path starting with /"),tg)},QS=r=>{if(r.data==null)throw(0,pr.default)(new Error("Record data is missing"),eg);let e=ug(r.data);if(!J(e.Value,r.value??new Uint8Array(0)))throw(0,pr.default)(new Error('Field "value" did not match between protobuf and CBOR'),Yn);if(!J(e.Validity,r.validity??new Uint8Array(0)))throw(0,pr.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Yn);if(e.ValidityType!==r.validityType)throw(0,pr.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Yn);if(e.Sequence!==r.sequence)throw(0,pr.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Yn);if(e.TTL!==r.ttl)throw(0,pr.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Yn)};var mq=cr("ipns"),gq=Mt.code,yq=60*60*1e9,JS="/ipns/",wq=JS.length;var Ga=nt(yi(),1),dg=nt(e1(),1);var r1=cr("ipns:validator"),eR=1024*10,tR=async(r,e)=>{let t=wn(e),n;try{let o=cg(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw r1.error("record signature verification failed"),(0,Ga.default)(new Error("record signature verification failed"),Yn);if(t.validityType===Jt.ValidityType.EOL){if(dg.default.fromString(t.validity).toDate().getTime()<Date.now())throw r1.error("record has expired"),(0,Ga.default)(new Error("record has expired"),J5)}else if(t.validityType!=null)throw r1.error("unrecognized validity type"),(0,Ga.default)(new Error("unrecognized validity type"),t1);r1("ipns record for %s is valid",t.value)};async function n1(r,e){if(e.byteLength>eR)throw(0,Ga.default)(new Error("record too large"),ng);let t=lg(r),n=wn(e),o=await ag(t,n);await tR(o,e)}async function*Wa(r){let e=/\r?\n/,t=new TextDecoder("utf8"),n="";for await(let o of r){typeof o=="string"&&(o=new TextEncoder().encode(o)),n+=t.decode(o,{stream:!0});let s=n.split(e);n=s.pop()??"";for(let i=0;i<s.length;i++)yield JSON.parse(s[i])}n+=t.decode(),n!==""&&(yield JSON.parse(n))}function rR(r){return r[Symbol.asyncIterator]!=null}function nR(r){if(rR(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var xs=nR;var E2=L("/ipns/");function fg(r){return J(r.subarray(0,E2.byteLength),E2)}var hg=r=>Ze(r.slice(E2.length)),o1=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Yt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async put(e,t,n){if(!fg(e))return;let o=hg(e),s=wn(t);await this.client.putIPNS(o,s,n)}async get(e,t){if(!fg(e))throw new m("Not found","ERR_NOT_FOUND");let n=hg(e);try{let o=await this.client.getIPNS(n,t);return qa(o)}catch(o){throw o.code==="ERR_BAD_RESPONSE"?new m("Not found","ERR_NOT_FOUND"):o}}},s1=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await xs(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new m("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){}};var Vt=cr("delegated-routing-v1-http-api-client"),pg={concurrentRequests:4,timeout:3e4},i1=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal),this.httpQueue=new Tr({concurrency:t.concurrentRequests??pg.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??pg.timeout,this.contentRouting=new o1(this),this.peerRouting=new s1(this)}get[cn](){return this.contentRouting}get[ln](){return this.peerRouting}isStarted(){return this.started}start(){this.started=!0}stop(){this.httpQueue.clear(),this.shutDownController.abort(),this.started=!1}async*getProviders(e,t={}){Vt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=_e([this.shutDownController.signal,n,t.signal]);K(1/0,n,o);let s=ee(),i=ee();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=`${this.clientUrl}routing/v1/providers/${e.toString()}`,l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new m("Routing response had no body","ERR_BAD_RESPONSE");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let f of u.Providers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let u of Wa(Ju(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){Vt.error("getProviders errored:",a)}finally{o.clear(),i.resolve(),Vt("getProviders finished: %c",e)}}async*getPeers(e,t={}){Vt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=_e([this.shutDownController.signal,n,t.signal]);K(1/0,n,o);let s=ee(),i=ee();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`,l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new m("Routing response had no body","ERR_BAD_RESPONSE");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let f of u.Peers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let u of Wa(Ju(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){Vt.error("getPeers errored:",a)}finally{o.clear(),i.resolve(),Vt("getPeers finished: %c",e)}}async getIPNS(e,t={}){Vt("getIPNS starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=_e([this.shutDownController.signal,n,t.signal]);K(1/0,n,o);let s=ee(),i=ee();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await s.promise;let l=await fetch(a,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o});if(Vt("getIPNS GET %s %d",a,l.status),l.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new m("GET ipns response had no body","ERR_BAD_RESPONSE");let d=await l.arrayBuffer(),u=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await n1(w2(e),u),wn(u)}catch(c){throw Vt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),i.resolve(),Vt("getIPNS finished: %c",e)}}async putIPNS(e,t,n={}){Vt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=_e([this.shutDownController.signal,o,n.signal]);K(1/0,o,s);let i=ee(),a=ee();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await i.promise;let l=qa(t),u=await fetch(c,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s});if(Vt("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new m("PUT ipns response had status other than 200","ERR_BAD_RESPONSE")}catch(l){throw Vt.error("putIPNS PUT %s error:",c,l.stack),l}finally{s.clear(),a.resolve(),Vt("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(Z)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:pe(e.ID),Addrs:n,Protocols:t}}catch(t){Vt.error("could not conform record to peer schema",t)}}};function mg(r,e={}){return new i1(new URL(r),e)}var gg="[a-fA-F\\d:]",Do=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${gg})|(?<=${gg})(?=\\s|$))`:"",rn="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",at="[a-fA-F\\d]{1,4}",a1=`
9
9
  (?:
10
- (?:${ct}:){7}(?:${ct}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
11
- (?:${ct}:){6}(?:${tn}|:${ct}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
12
- (?:${ct}:){5}(?::${tn}|(?::${ct}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
13
- (?:${ct}:){4}(?:(?::${ct}){0,1}:${tn}|(?::${ct}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
14
- (?:${ct}:){3}(?:(?::${ct}){0,2}:${tn}|(?::${ct}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
15
- (?:${ct}:){2}(?:(?::${ct}){0,3}:${tn}|(?::${ct}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
16
- (?:${ct}:){1}(?:(?::${ct}){0,4}:${tn}|(?::${ct}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
17
- (?::(?:(?::${ct}){0,5}:${tn}|(?::${ct}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
10
+ (?:${at}:){7}(?:${at}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
11
+ (?:${at}:){6}(?:${rn}|:${at}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
12
+ (?:${at}:){5}(?::${rn}|(?::${at}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
13
+ (?:${at}:){4}(?:(?::${at}){0,1}:${rn}|(?::${at}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
14
+ (?:${at}:){3}(?:(?::${at}){0,2}:${rn}|(?::${at}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
15
+ (?:${at}:){2}(?:(?::${at}){0,3}:${rn}|(?::${at}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
16
+ (?:${at}:){1}(?:(?::${at}){0,4}:${rn}|(?::${at}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
17
+ (?::(?:(?::${at}){0,5}:${rn}|(?::${at}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
18
18
  )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
19
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),HS=new RegExp(`(?:^${tn}$)|(?:^${t1}$)`),qS=new RegExp(`^${tn}$`),GS=new RegExp(`^${t1}$`),o2=r=>r&&r.exact?HS:new RegExp(`(?:${Ao(r)}${tn}${Ao(r)})|(?:${Ao(r)}${t1}${Ao(r)})`,"g");o2.v4=r=>r&&r.exact?qS:new RegExp(`${Ao(r)}${tn}${Ao(r)}`,"g");o2.v6=r=>r&&r.exact?GS:new RegExp(`${Ao(r)}${t1}${Ao(r)}`,"g");var s2=o2;function i2(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function og(){return!1}var{toString:WS}=Object.prototype;function a2(r){return WS.call(r)==="[object RegExp]"}var sg={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function c2(r,e={}){if(!a2(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(sg).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?sg[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function l2(r,e,{timeout:t}={}){try{return i2(()=>c2(r).test(e),{timeout:t})()}catch(n){if(og(n))return!1;throw n}}var zS=15,YS=45,ig={timeout:400};function u2(r){return r.length>YS?!1:l2(s2.v6({exact:!0}),r,ig)}function ag(r){return r.length>zS?!1:l2(s2.v4({exact:!0}),r,ig)}var cg={http:"80",https:"443",ws:"80",wss:"443"},XS=["http","https","ws","wss"];function lg(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:s}=QS(r),a="/"+[ZS(o,t),jS(s,n),JS(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return j(a)}function QS(r){let[e]=r.split(":");XS.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let s=eR(e);s!=null&&(o=s),s==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function ZS(r,e){if(!(r==null||r==="")){if(ag(r))return["ip4",r];if(u2(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(u2(t))return["ip6",t]}return[e,r]}}function jS(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function JS(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function eR(r){if(!(r==null||r===""||cg[r]==null))return cg[r]}var tR=["https://trustless-gateway.link","https://4everland.io"],rR=2336,nR=Symbol.for("nodejs.util.inspect.custom"),d2=class{type="url";multihash;privateKey;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Mt.digest(L(this.url))}[nR](){return`PeerId(${this.url})`}[Ds]=!0;toString(){return this.toCID().toString()}toCID(){return ue.createV1(rR,this.multihash)}toBytes(){return this.toCID().bytes}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=B(e)),e.toString()===this.toString())}};function oR(r){return r=r.toString(),{id:new d2(new URL(r)),multiaddrs:[lg(r)]}}var f2=class{gateways;constructor(e={}){this.gateways=(e.gateways??tR).map(t=>oR(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function h2(r={}){return new f2(r)}var p2=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function m2(r){return new p2(r)}var ug=Xe($o(),1);function r1(r){return r=r??new Error("Not Found"),(0,ug.default)(r,"ERR_NOT_FOUND")}var dg="SHARDING";function iR(r){return r[Symbol.asyncIterator]!=null}function aR(r){if(iR(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var Ga=aR;function cR(r){return r[Symbol.asyncIterator]!=null}function lR(r,e){return cR(r)?async function*(){yield*(await Ga(r)).sort(e)}():function*(){yield*Ga(r).sort(e)}()}var n1=lR;var Wn=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await $t(this.putMany(e,n)),e=[],await $t(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=en(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>en(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>n1(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=en(n,()=>o++>=s)}return e.limit!=null&&(n=jn(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=en(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>en(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>n1(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=en(n,()=>s++>=o)}return e.limit!=null&&(n=jn(n,e.limit)),n}};var Es=class extends Wn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw r1();return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new Ne(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Ne(e)}};var IG=new Ne(dg);var FG=cr("datastore:core:tiered");var o1=class extends Ru{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};var g2=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=ee(),this.haveNext=ee()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=ee(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=ee(),await ke(this.readNext.promise,t?.signal,t)}};function hg(){return new g2}var s1=class extends Error{code;constructor(e,t){super(e),this.code=t}},y2=class extends s1{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted"}};function pg(r,e){let t=hg();r.sink(t).catch(async i=>{await t.end(i)}),r.sink=async i=>{for await(let a of i)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new ce;return{read:async(i,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((d,u)=>{c=()=>{u(new y2("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(i==null){let{done:u,value:h}=await Promise.race([n.next(),l]);return u===!0?new ce:h}for(;o.byteLength<i;){let{value:u,done:h}=await Promise.race([n.next(),l]);if(h===!0)throw new s1("unexpected end of input","ERR_UNEXPECTED_EOF");o.append(u)}let d=o.sublist(0,i);return o.consume(i),d}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(i,a)=>{a?.signal?.throwIfAborted(),i instanceof Uint8Array?await t.push(i,a):await t.push(i.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let i=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*i}()}return r}}}var i1=class extends Error{code;constructor(e,t){super(e),this.code=t}};function yn(r,e={}){let t=pg(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Se(e.maxDataLength));let n=e?.lengthDecoder??Lt,o=e?.lengthEncoder??Ve;return{read:async i=>{let a=-1,c=new ce;for(;;){c.append(await t.read(1,i));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new i1("message length length too long","ERR_MSG_LENGTH_TOO_LONG");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new i1("message length too long","ERR_MSG_DATA_TOO_LONG");return t.read(a,i)},write:async(i,a)=>{await t.write(new ce(o(i.byteLength),i),a)},writeV:async(i,a)=>{let c=new ce(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function w2(){let r=ee(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function mg(){let r=w2(),e=w2();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Si=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function a1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function E2(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function b2(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Zt(r,...e){if(!b2(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function x2(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function gg(r,e){Zt(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var zn=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),yg=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),fR=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!fR)throw new Error("Non little-endian hardware is not supported");function hR(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function c1(r){if(typeof r=="string")r=hR(r);else if(b2(r))r=r.slice();else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function wg(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Eg(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var _2=(r,e)=>(Object.assign(e,r),e);function v2(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}var xt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,S2=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=c1(e),Zt(e,32);let t=xt(e,0),n=xt(e,2),o=xt(e,4),s=xt(e,6),i=xt(e,8),a=xt(e,10),c=xt(e,12),l=xt(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let d=0;d<8;d++)this.pad[d]=xt(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],h=i[5],f=i[6],p=i[7],m=i[8],y=i[9],w=xt(e,t+0),b=xt(e,t+2),E=xt(e,t+4),x=xt(e,t+6),_=xt(e,t+8),I=xt(e,t+10),A=xt(e,t+12),R=xt(e,t+14),k=s[0]+(w&8191),O=s[1]+((w>>>13|b<<3)&8191),N=s[2]+((b>>>10|E<<6)&8191),M=s[3]+((E>>>7|x<<9)&8191),C=s[4]+((x>>>4|_<<12)&8191),Q=s[5]+(_>>>1&8191),T=s[6]+((_>>>14|I<<2)&8191),P=s[7]+((I>>>11|A<<5)&8191),H=s[8]+((A>>>8|R<<8)&8191),D=s[9]+(R>>>5|o),S=0,U=S+k*a+O*(5*y)+N*(5*m)+M*(5*p)+C*(5*f);S=U>>>13,U&=8191,U+=Q*(5*h)+T*(5*u)+P*(5*d)+H*(5*l)+D*(5*c),S+=U>>>13,U&=8191;let V=S+k*c+O*a+N*(5*y)+M*(5*m)+C*(5*p);S=V>>>13,V&=8191,V+=Q*(5*f)+T*(5*h)+P*(5*u)+H*(5*d)+D*(5*l),S+=V>>>13,V&=8191;let G=S+k*l+O*c+N*a+M*(5*y)+C*(5*m);S=G>>>13,G&=8191,G+=Q*(5*p)+T*(5*f)+P*(5*h)+H*(5*u)+D*(5*d),S+=G>>>13,G&=8191;let ie=S+k*d+O*l+N*c+M*a+C*(5*y);S=ie>>>13,ie&=8191,ie+=Q*(5*m)+T*(5*p)+P*(5*f)+H*(5*h)+D*(5*u),S+=ie>>>13,ie&=8191;let ae=S+k*u+O*d+N*l+M*c+C*a;S=ae>>>13,ae&=8191,ae+=Q*(5*y)+T*(5*m)+P*(5*p)+H*(5*f)+D*(5*h),S+=ae>>>13,ae&=8191;let fe=S+k*h+O*u+N*d+M*l+C*c;S=fe>>>13,fe&=8191,fe+=Q*a+T*(5*y)+P*(5*m)+H*(5*p)+D*(5*f),S+=fe>>>13,fe&=8191;let le=S+k*f+O*h+N*u+M*d+C*l;S=le>>>13,le&=8191,le+=Q*c+T*a+P*(5*y)+H*(5*m)+D*(5*p),S+=le>>>13,le&=8191;let de=S+k*p+O*f+N*h+M*u+C*d;S=de>>>13,de&=8191,de+=Q*l+T*c+P*a+H*(5*y)+D*(5*m),S+=de>>>13,de&=8191;let Oe=S+k*m+O*p+N*f+M*h+C*u;S=Oe>>>13,Oe&=8191,Oe+=Q*d+T*l+P*c+H*a+D*(5*y),S+=Oe>>>13,Oe&=8191;let Ce=S+k*y+O*m+N*p+M*f+C*h;S=Ce>>>13,Ce&=8191,Ce+=Q*u+T*d+P*l+H*c+D*a,S+=Ce>>>13,Ce&=8191,S=(S<<2)+S|0,S=S+U|0,U=S&8191,S=S>>>13,V+=S,s[0]=U,s[1]=V,s[2]=G,s[3]=ie,s[4]=ae,s[5]=fe,s[6]=le,s[7]=de,s[8]=Oe,s[9]=Ce}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let s=(o^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let i=e[0]+t[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+t[a]|0)+(i>>>16)|0,e[a]=i&65535}update(e){x2(this);let{buffer:t,blockLen:n}=this;e=c1(e);let o=e.length;for(let s=0;s<o;){let i=Math.min(n-this.pos,o-s);if(i===n){for(;n<=o-s;s+=n)this.process(e,s);continue}t.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){this.h.fill(0),this.r.fill(0),this.buffer.fill(0),this.pad.fill(0)}digestInto(e){x2(this),gg(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let s=0;for(let i=0;i<8;i++)e[s++]=n[i]>>>0,e[s++]=n[i]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function pR(r){let e=(n,o)=>r(o).update(c1(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var bg=pR(r=>new S2(r));var _g=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),mR=_g("expand 16-byte k"),gR=_g("expand 32-byte k"),yR=zn(mR),vg=zn(gR),IW=vg.slice();function X(r,e){return r<<e|r>>>32-e}function R2(r){return r.byteOffset%4===0}var l1=64,wR=16,Sg=2**32-1,xg=new Uint32Array;function ER(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(l1),d=zn(l),u=R2(o)&&R2(s),h=u?zn(o):xg,f=u?zn(s):xg;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=Sg)throw new Error("arx: counter overflow");let m=Math.min(l1,c-p);if(u&&m===l1){let y=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let w=0,b;w<wR;w++)b=y+w,f[b]=h[b]^d[w];p+=l1;continue}for(let y=0,w;y<m;y++)w=p+y,s[w]=o[w]^l[y];p+=m}}function A2(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=wg({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return a1(o),a1(i),E2(s),E2(t),(a,c,l,d,u=0)=>{Zt(a),Zt(c),Zt(l);let h=l.length;if(d||(d=new Uint8Array(h)),Zt(d),a1(u),u<0||u>=Sg)throw new Error("arx: counter overflow");if(d.length<h)throw new Error(`arx: output (${d.length}) is shorter than data (${h})`);let f=[],p=a.length,m,y;if(p===32)m=a.slice(),f.push(m),y=vg;else if(p===16&&t)m=new Uint8Array(32),m.set(a),m.set(a,16),y=yR,f.push(m);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);R2(c)||(c=c.slice(),f.push(c));let w=zn(m);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,w,zn(c.subarray(0,16)),w),c=c.subarray(16)}let b=16-o;if(b!==c.length)throw new Error(`arx: nonce must be ${b} or 16 bytes`);if(b!==12){let x=new Uint8Array(12);x.set(c,s?0:12-c.length),c=x,f.push(c)}let E=zn(c);for(ER(r,y,w,E,l,d,u,i);f.length>0;)f.pop().fill(0);return d}}function Ig(r,e,t,n,o,s=20){let i=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],h=e[2],f=e[3],p=e[4],m=e[5],y=e[6],w=e[7],b=o,E=t[0],x=t[1],_=t[2],I=i,A=a,R=c,k=l,O=d,N=u,M=h,C=f,Q=p,T=m,P=y,H=w,D=b,S=E,U=x,V=_;for(let ie=0;ie<s;ie+=2)I=I+O|0,D=X(D^I,16),Q=Q+D|0,O=X(O^Q,12),I=I+O|0,D=X(D^I,8),Q=Q+D|0,O=X(O^Q,7),A=A+N|0,S=X(S^A,16),T=T+S|0,N=X(N^T,12),A=A+N|0,S=X(S^A,8),T=T+S|0,N=X(N^T,7),R=R+M|0,U=X(U^R,16),P=P+U|0,M=X(M^P,12),R=R+M|0,U=X(U^R,8),P=P+U|0,M=X(M^P,7),k=k+C|0,V=X(V^k,16),H=H+V|0,C=X(C^H,12),k=k+C|0,V=X(V^k,8),H=H+V|0,C=X(C^H,7),I=I+N|0,V=X(V^I,16),P=P+V|0,N=X(N^P,12),I=I+N|0,V=X(V^I,8),P=P+V|0,N=X(N^P,7),A=A+M|0,D=X(D^A,16),H=H+D|0,M=X(M^H,12),A=A+M|0,D=X(D^A,8),H=H+D|0,M=X(M^H,7),R=R+C|0,S=X(S^R,16),Q=Q+S|0,C=X(C^Q,12),R=R+C|0,S=X(S^R,8),Q=Q+S|0,C=X(C^Q,7),k=k+O|0,U=X(U^k,16),T=T+U|0,O=X(O^T,12),k=k+O|0,U=X(U^k,8),T=T+U|0,O=X(O^T,7);let G=0;n[G++]=i+I|0,n[G++]=a+A|0,n[G++]=c+R|0,n[G++]=l+k|0,n[G++]=d+O|0,n[G++]=u+N|0,n[G++]=h+M|0,n[G++]=f+C|0,n[G++]=p+Q|0,n[G++]=m+T|0,n[G++]=y+P|0,n[G++]=w+H|0,n[G++]=b+D|0,n[G++]=E+S|0,n[G++]=x+U|0,n[G++]=_+V|0}function bR(r,e,t,n){let o=r[0],s=r[1],i=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],h=e[4],f=e[5],p=e[6],m=e[7],y=t[0],w=t[1],b=t[2],E=t[3];for(let _=0;_<20;_+=2)o=o+c|0,y=X(y^o,16),h=h+y|0,c=X(c^h,12),o=o+c|0,y=X(y^o,8),h=h+y|0,c=X(c^h,7),s=s+l|0,w=X(w^s,16),f=f+w|0,l=X(l^f,12),s=s+l|0,w=X(w^s,8),f=f+w|0,l=X(l^f,7),i=i+d|0,b=X(b^i,16),p=p+b|0,d=X(d^p,12),i=i+d|0,b=X(b^i,8),p=p+b|0,d=X(d^p,7),a=a+u|0,E=X(E^a,16),m=m+E|0,u=X(u^m,12),a=a+u|0,E=X(E^a,8),m=m+E|0,u=X(u^m,7),o=o+l|0,E=X(E^o,16),p=p+E|0,l=X(l^p,12),o=o+l|0,E=X(E^o,8),p=p+E|0,l=X(l^p,7),s=s+d|0,y=X(y^s,16),m=m+y|0,d=X(d^m,12),s=s+d|0,y=X(y^s,8),m=m+y|0,d=X(d^m,7),i=i+u|0,w=X(w^i,16),h=h+w|0,u=X(u^h,12),i=i+u|0,w=X(w^i,8),h=h+w|0,u=X(u^h,7),a=a+c|0,b=X(b^a,16),f=f+b|0,c=X(c^f,12),a=a+c|0,b=X(b^a,8),f=f+b|0,c=X(c^f,7);let x=0;n[x++]=o,n[x++]=s,n[x++]=i,n[x++]=a,n[x++]=y,n[x++]=w,n[x++]=b,n[x++]=E}var xR=A2(Ig,{counterRight:!1,counterLength:4,allowShortKeys:!1}),_R=A2(Ig,{counterRight:!1,counterLength:8,extendNonceFn:bR,allowShortKeys:!1});var vR=new Uint8Array(16),Rg=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(vR.subarray(t))},SR=new Uint8Array(32);function Ag(r,e,t,n,o){let s=r(e,t,SR),i=bg.create(s);o&&Rg(i,o),Rg(i,n);let a=new Uint8Array(16),c=yg(a);v2(c,0,BigInt(o?o.length:0),!0),v2(c,8,BigInt(n.length),!0),i.update(a);let l=i.digest();return s.fill(0),l}var Tg=r=>(e,t,n)=>(Zt(e,32),Zt(t),{encrypt:(s,i)=>{let a=s.length,c=a+16;i?Zt(i,c):i=new Uint8Array(c),r(e,t,s,i,1);let l=Ag(r,e,t,i.subarray(0,-16),n);return i.set(l,a),i},decrypt:(s,i)=>{let a=s.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");i?Zt(i,c):i=new Uint8Array(c);let l=s.subarray(0,-16),d=s.subarray(-16),u=Ag(r,e,t,l,n);if(!Eg(d,u))throw new Error("invalid tag");return r(e,t,l,i,1),i}}),I2=_2({blockSize:64,nonceLength:12,tagLength:16},Tg(xR)),PW=_2({blockSize:64,nonceLength:24,tagLength:16},Tg(_R));function kg(r,e,t){return Zo(r),t===void 0&&(t=new Uint8Array(r.outputLen)),co(r,Kr(t),Kr(e))}var T2=new Uint8Array([0]),Cg=new Uint8Array;function Dg(r,e,t,n=32){if(Zo(r),ro(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=Cg);let s=new Uint8Array(o*r.outputLen),i=co.create(r,e),a=i._cloneInto(),c=new Uint8Array(i.outputLen);for(let l=0;l<o;l++)T2[0]=l+1,a.update(l===0?Cg:c).update(t).update(T2).digestInto(c),s.set(c,r.outputLen*l),i._cloneInto(a);return i.destroy(),a.destroy(),c.fill(0),T2.fill(0),s.slice(0,n)}var C2={hashSHA256(r){return yo(r.subarray())},getHKDF(r,e){let t=kg(yo,e,r),o=Dg(yo,t,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){let r=ca.utils.randomPrivateKey();return{publicKey:ca.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:ca.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return ca.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return I2(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return I2(n,e,t).decrypt(r.subarray(),o)}};var Ng=C2;function Pg(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var Ri=r=>{let e=Ge(2);return e[0]=r>>8,e[1]=r,e};Ri.bytes=2;var Wa=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};Wa.bytes=2;function Lg(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function k2(r,e){!e.enabled||!Si||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${B(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${B(r.privateKey,"hex")}`)):e("Missing local static keys."))}function D2(r,e){!e.enabled||!Si||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${B(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${B(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function Og(r,e){!e.enabled||!Si||e(r?`REMOTE_STATIC_PUBLIC_KEY ${B(r.subarray(),"hex")}`:"Missing remote static public key.")}function N2(r,e){!e.enabled||!Si||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${B(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function P2(r,e,t){!t.enabled||!Si||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&B(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&B(e.k,"hex")}`))}function rn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ge(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var u1=class r extends Error{code;constructor(e="Unexpected Peer"){super(e),this.code=r.code}static code="ERR_UNEXPECTED_PEER"},Ai=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var RR=0,AR=4294967295,IR="Cipherstate has reached maximum n, a new handshake must be performed",d1=class{n;bytes;view;constructor(e=RR){this.n=e,this.bytes=pe(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>AR)throw new Error(IR)}};var bs=pe(0),Ii=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new d1(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},L2=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=L(t,"utf-8");this.h=TR(e,n),this.ck=this.h,this.cs=new Ii(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Ii(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ce(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,bs);return[new Ii(this.crypto,e),new Ii(this.crypto,t)]}},O2=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new L2(t,n),this.ss.mixHash(o),this.initiator=s,this.s=i,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},za=class extends O2{writeMessageA(e){return new ce(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ce(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ce(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Ai(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new Ai(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new Ai(`handshake stage 2 validation fail: ${t.message}`)}}};function TR(r,e){if(e.length<=32){let t=pe(32);return t.set(e),t}else return r.hash(e)}var f1;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let s of t.webtransportCerthashes)n.uint32(10),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(f1||(f1={}));var Ya;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),f1.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:pe(0),identitySig:pe(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=f1.codec().decode(t,t.uint32());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Ya||(Ya={}));async function B2(r,e,t){let n=await r.sign(Bg(e));return Ya.encode({identityKey:r.public.bytes,identitySig:n,extensions:t})}async function M2(r,e,t){try{let n=Ya.decode(r);if(t){let i=t.subarray();if(!J(i,n.identityKey))throw new Error(`Payload identity key ${B(n.identityKey,"hex")} does not match expected remote identity key ${B(i,"hex")}`)}if(!e)throw new Error("Remote static does not exist");let o=Bg(e);if(!await Xr(n.identityKey).verify(o,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new u1(n.message)}}function Bg(r){let e=L("noise-libp2p-static-key:");return r instanceof Uint8Array?ve([e,r],e.length+r.length):(r.prepend(e),r)}async function Mg(r){let{log:e,connection:t,crypto:n,privateKey:o,prologue:s,s:i,remoteIdentityKey:a,extensions:c}=r,l=await B2(o,i.publicKey,c),d=new za({crypto:n,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:i});k2(d.s,e),e.trace("Stage 0 - Initiator starting to send first message."),await t.write(d.writeMessageA(bs)),e.trace("Stage 0 - Initiator finished sending first message."),D2(d.e,e),e.trace("Stage 1 - Initiator waiting to receive first message from responder...");let u=d.readMessageB(await t.read());e.trace("Stage 1 - Initiator received the message."),N2(d.re,e),Og(d.rs,e),e.trace("Initiator going to check remote's signature...");let h=await M2(u,d.rs,a);e.trace("All good with the signature!"),e.trace("Stage 2 - Initiator sending third handshake message."),await t.write(d.writeMessageC(l)),e.trace("Stage 2 - Initiator sent message with signed payload.");let[f,p]=d.ss.split();return P2(f,p,e),{payload:h,encrypt:m=>f.encryptWithAd(bs,m),decrypt:(m,y)=>p.decryptWithAd(bs,m,y)}}async function Ug(r){let{log:e,connection:t,crypto:n,privateKey:o,prologue:s,s:i,remoteIdentityKey:a,extensions:c}=r,l=await B2(o,i.publicKey,c),d=new za({crypto:n,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:i});k2(d.s,e),e.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await t.read()),e.trace("Stage 0 - Responder received first message."),N2(d.re,e),e.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await t.write(d.writeMessageB(l)),e.trace("Stage 1 - Responder sent the second handshake message with signed payload."),D2(d.e,e),e.trace("Stage 2 - Responder waiting for third handshake message...");let u=d.readMessageC(await t.read());e.trace("Stage 2 - Responder received the message, finished handshake.");let h=await M2(u,d.rs,a),[f,p]=d.ss.split();return P2(f,p,e),{payload:h,encrypt:m=>p.encryptWithAd(bs,m),decrypt:(m,y)=>f.decryptWithAd(bs,m,y)}}var Vg=16;function Kg(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let s=o+65519;s>n.length&&(s=n.length);let i;n instanceof Uint8Array?i=r.encrypt(n.subarray(o,s)):i=r.encrypt(n.sublist(o,s)),e?.encryptedPackets.increment(),yield new ce(Ri(i.byteLength),i)}}}function $g(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let s=o+65535;if(s>n.length&&(s=n.length),s-Vg<o)throw new Error("Invalid chunk");let i=n.sublist(o,s),a=n.subarray(o,s-Vg);try{let c=r.decrypt(i,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var h1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:s,prologueBytes:i}=t,{metrics:a}=e;this.components=e;let c=s??Ng;this.crypto=Pg(c),this.extensions=o,this.metrics=a?Lg(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??pe(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Be]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t,n){let o=yn(t,{lengthEncoder:Ri,lengthDecoder:Wa,maxDataLength:65535});if(!e.privateKey)throw new g("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let s=await Ir(e.privateKey),i=n?.publicKey,a=await this.performHandshakeInitiator(o,s,i),c=await this.createSecureConnection(o,a);return t.source=c.source,t.sink=c.sink,{conn:t,remoteExtensions:a.payload.extensions,remotePeer:await dt(a.payload.identityKey)}}async secureInbound(e,t,n){let o=yn(t,{lengthEncoder:Ri,lengthDecoder:Wa,maxDataLength:65535});if(!e.privateKey)throw new g("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let s=await Ir(e.privateKey),i=n?.publicKey,a=await this.performHandshakeResponder(o,s,i),c=await this.createSecureConnection(o,a);return t.source=c.source,t.sink=c.sink,{conn:t,remoteExtensions:a.payload.extensions,remotePeer:await dt(a.payload.identityKey)}}async performHandshakeInitiator(e,t,n){let o;try{o=await Mg({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions}),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async performHandshakeResponder(e,t,n){let o;try{o=await Ug({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions}),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async createSecureConnection(e,t){let[n,o]=mg(),s=e.unwrap();return await Qe(n,Kg(t,this.metrics),s,i=>qt(i,{lengthDecoder:Wa}),$g(t,this.metrics),n),o}};function Ti(r={}){return e=>new h1(e,r)}function p1(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var Ci="ERR_INVALID_FRAME",U2="ERR_UNREQUESTED_PING",F2="ERR_NOT_MATCHING_PING",V2="ERR_STREAM_ALREADY_EXISTS",K2="ERR_DECODE_INVALID_VERSION",$2="ERR_BOTH_CLIENTS",H2="ERR_RECV_WINDOW_EXCEEDED",Hg=new Set([Ci,U2,F2,V2,K2,$2,H2]),Io="ERR_INVALID_CONFIG",m1="ERR_MUXER_LOCAL_CLOSED",q2="ERR_MUXER_REMOTE_CLOSED";var qg="ERR_STREAM_ABORT",Gg="ERROR_MAX_OUTBOUND_STREAMS_EXCEEDED",Wg="ERR_DECODE_IN_PROGRESS",Qa=256*1024,zg=16*1024*1024;var Yg={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Qa,maxStreamWindowSize:zg,maxMessageSize:64*1024};function Xg(r){if(r.keepAliveInterval<=0)throw new g("keep-alive interval must be positive",Io);if(r.maxInboundStreams<0)throw new g("max inbound streams must be larger or equal 0",Io);if(r.maxOutboundStreams<0)throw new g("max outbound streams must be larger or equal 0",Io);if(r.initialStreamWindowSize<Qa)throw new g("InitialStreamWindowSize must be larger or equal 256 kB",Io);if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new g("MaxStreamWindowSize must be larger than the InitialStreamWindowSize",Io);if(r.maxStreamWindowSize>2**32-1)throw new g("MaxStreamWindowSize must be less than equal MAX_UINT32",Io);if(r.maxMessageSize<1024)throw new g("MaxMessageSize must be greater than a kilobyte",Io)}var Je;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Je||(Je={}));var qe;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(qe||(qe={}));var uY=Object.values(qe).filter(r=>typeof r!="string"),Qg=0,Pr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Pr||(Pr={}));var To=12;var Zg=2**24;function CR(r){if(r[0]!==Qg)throw new g("Invalid frame version",K2);return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*Zg+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*Zg+(r[9]<<16)+(r[10]<<8)+r[11]}}var g1=class{source;buffer;frameInProgress;constructor(e){this.source=kR(e),this.buffer=new ce,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Je.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new g("decoding frame already in progress",Wg);if(this.buffer.length<To)return;let e=CR(this.buffer.subarray(0,To));return this.buffer.consume(To),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function kR(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function G2(r){let e=new Uint8Array(To);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function jg(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function y1(r,e){let t=p1(r).return?.();jg(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var DR="ERR_STREAM_RESET",NR="ERR_SINK_INVALID_STATE",PR=5e3;function W2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var wn=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=ee(),this.closed=ee(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??PR,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=It({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new g(`writable end state is "${this.writeStatus}" not "ready"`,NR);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);W2(o)&&await o}let n=()=>{y1(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new ce(o):o;let s=this.sendData(o,t);W2(s)&&(this.sendingData=ee(),await s,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.log.trace("closing gracefully"),this.status="closing",await ke(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully")}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await ke(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await ke(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await ke(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();W2(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new g("stream reset",DR);this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Lr;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished"})(Lr||(Lr={}));var w1=class extends wn{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Lr.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Qa,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=Ma(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-To,e.length),o=this.getSendFlags();this.sendFrame({type:Je.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Je.WindowUpdate,flag:qe.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|qe.FIN;this.sendFrame({type:Je.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new g("stream aborted",qg)):t()};e.signal?.addEventListener("abort",o);try{await new Promise((s,i)=>{this.sendWindowCapacityUpdate=()=>{s()},n=i,t=s})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new g("receive window exceeded",H2,{available:this.recvWindowCapacity,recv:e.length});let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&qe.ACK)===qe.ACK&&this.state===Lr.SYNSent&&(this.state=Lr.Established),(e&qe.FIN)===qe.FIN&&this.remoteCloseWrite(),(e&qe.RST)===qe.RST&&this.reset()}getSendFlags(){switch(this.state){case Lr.Init:return this.state=Lr.SYNSent,qe.SYN;case Lr.SYNReceived:return this.state=Lr.Established,qe.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Je.WindowUpdate,flag:e,streamID:this._id,length:o})}};var Jg="/yamux/1.0.0",LR=500,E1=class{protocol=Jg;_components;_init;constructor(e,t={}){this._components=e,this._init=t}createStreamMuxer(e){return new z2(this._components,{...this._init,...e})}},z2=class{protocol=Jg;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...Yg,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),Xg(this.config),this.closeController=new AbortController,K(1/0,this.closeController.signal),this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=It({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=p1(n);if(a.return!=null){let c=a.return();OR(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},s,i;try{let a=new g1(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}s=Pr.NormalTermination}catch(a){let c=a.code;Hg.has(c)?(this.log?.error("protocol error in sink",a),s=Pr.ProtocolError):(this.log?.error("internal error in sink",a),s=Pr.InternalError),i=a}this.log?.trace("muxer sink ended"),i!=null?this.abort(i,s):await this.close({reason:s})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new g("muxer closed remotely",q2);if(this.localGoAway!==void 0)throw new g("muxer closed locally",m1);let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new g("max outbound streams exceeded",Gg);this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Lr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new g("muxer closed remotely",q2);if(this.localGoAway!==void 0)throw new g("muxer closed locally",m1);if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,s)=>{let i=()=>{s(new g("muxer closed locally",m1))};this.closeController.signal.addEventListener("abort",i,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",i),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Pr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(LR);K(1/0,n),e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Pr.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new g("Stream already exists",V2,{id:e});let s=new w1({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(s)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return s}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:s}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Je.Ping:{this.handlePing(e);return}case Je.GoAway:{this.handleGoAway(s);return}default:throw new g("Invalid frame type",Ci,{header:e})}else switch(e.type){case Je.Data:case Je.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new g("Invalid frame type",Ci,{header:e})}}handlePing(e){if(e.flag===qe.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,qe.ACK);else if(e.flag===qe.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new g("Invalid frame flag",Ci,{header:e})}handlePingResponse(e){if(this.activePing===void 0)throw new g("ping not requested",U2);if(this.activePing.id!==e)throw new g("ping doesn't match our id",F2);this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Pr[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:s}=e;(o&qe.SYN)===qe.SYN&&this.incomingStream(n);let i=this._streams.get(n);if(i===void 0){if(s===Je.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.("frame for missing stream id=%s",n);return}switch(s){case Je.WindowUpdate:{i.handleWindowUpdate(e);return}case Je.Data:{if(t===void 0)throw new Error("unreachable");await i.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new g("both endpoints are clients",$2);if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Je.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Je.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Lr.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===Je.Data){if(t===void 0)throw new g("invalid frame",Ci);this.source.push(new ce(G2(e),t))}else this.source.push(G2(e))}sendPing(e,t=qe.SYN){t===qe.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Je.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Pr.NormalTermination){this.log?.("sending GoAway reason=%s",Pr[e]),this.localGoAway=e,this.sendFrame({type:Je.GoAway,flag:0,streamID:0,length:e})}};function OR(r){return r!=null&&typeof r.then=="function"}function e7(r={}){return e=>new E1(e,r)}var b1=globalThis.CustomEvent??Event;async function*nn(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,s=[],i=ee(),a=ee(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(s.length===t&&(i=ee(),await i.promise),d)break;let m={done:!1};s.push(m),p().then(y=>{m.done=!0,m.ok=!0,m.value=y,o.dispatchEvent(new b1("task-complete"))},y=>{m.done=!0,m.err=y,o.dispatchEvent(new b1("task-complete"))})}c=!0,o.dispatchEvent(new b1("task-complete"))}catch(p){l=p,o.dispatchEvent(new b1("task-complete"))}});function u(){return n?s[0]?.done:!!s.find(p=>p.done)}function*h(){for(;s.length>0&&s[0].done;){let p=s[0];if(s.shift(),p.ok)yield p.value;else throw d=!0,i.resolve(),p.err;i.resolve()}}function*f(){for(;u();)for(let p=0;p<s.length;p++)if(s[p].done){let m=s[p];if(s.splice(p,1),p--,m.ok)yield m.value;else throw d=!0,i.resolve(),m.err;i.resolve()}}for(;;){if(u()||(a=ee(),await a.promise),l!=null)throw l;if(n?yield*h():yield*f(),c&&s.length===0)break}}var t7="libp2p",r7="autonat",n7="1.0.0";var Ee;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>Ke(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),function(l){l.codec=()=>Ke(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=oe((u,h,f={})=>{if(f.lengthDelimited!==!1&&h.fork(),u.id!=null&&(h.uint32(10),h.bytes(u.id)),u.addrs!=null)for(let p of u.addrs)h.uint32(18),h.bytes(p);f.lengthDelimited!==!1&&h.ldelim()},(u,h)=>{let f={addrs:[]},p=h==null?u.len:u.pos+h;for(;u.pos<p;){let m=u.uint32();switch(m>>>3){case 1:f.id=u.bytes();break;case 2:f.addrs.push(u.bytes());break;default:u.skipType(m&7);break}}return f})),d),l.encode=u=>ne(u,l.codec()),l.decode=u=>re(u,l.codec())})(s=r.PeerInfo||(r.PeerInfo={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=oe((u,h,f={})=>{f.lengthDelimited!==!1&&h.fork(),u.peer!=null&&(h.uint32(10),r.PeerInfo.codec().encode(u.peer,h)),f.lengthDelimited!==!1&&h.ldelim()},(u,h)=>{let f={},p=h==null?u.len:u.pos+h;for(;u.pos<p;){let m=u.uint32();switch(m>>>3){case 1:f.peer=r.PeerInfo.codec().decode(u,u.uint32());break;default:u.skipType(m&7);break}}return f})),d),l.encode=u=>ne(u,l.codec()),l.decode=u=>re(u,l.codec())})(i=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=oe((u,h,f={})=>{f.lengthDelimited!==!1&&h.fork(),u.status!=null&&(h.uint32(8),r.ResponseStatus.codec().encode(u.status,h)),u.statusText!=null&&(h.uint32(18),h.string(u.statusText)),u.addr!=null&&(h.uint32(26),h.bytes(u.addr)),f.lengthDelimited!==!1&&h.ldelim()},(u,h)=>{let f={},p=h==null?u.len:u.pos+h;for(;u.pos<p;){let m=u.uint32();switch(m>>>3){case 1:f.status=r.ResponseStatus.codec().decode(u);break;case 2:f.statusText=u.string();break;case 3:f.addr=u.bytes();break;default:u.skipType(m&7);break}}return f})),d),l.encode=u=>ne(u,l.codec()),l.decode=u=>re(u,l.codec())})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=oe((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d)=>{let u={},h=d==null?l.len:l.pos+d;for(;l.pos<h;){let f=l.uint32();switch(f>>>3){case 1:u.type=r.MessageType.codec().decode(l);break;case 2:u.dial=r.Dial.codec().decode(l,l.uint32());break;case 3:u.dialResponse=r.DialResponse.codec().decode(l,l.uint32());break;default:l.skipType(f&7);break}}return u})),c),r.encode=l=>ne(l,r.codec()),r.decode=l=>re(l,r.codec())})(Ee||(Ee={}));var Y2=4,x1=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;log;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:autonat"),this.started=!1,this.protocol=`/${t.protocolPrefix??t7}/${r7}/${n7}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}[Symbol.toStringTag]="@libp2p/autonat";isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout),n=()=>{e.stream.abort(new g("handleIncomingAutonatStream timeout",_n))};t.addEventListener("abort",n,{once:!0}),K(1/0,t);try{let o=this;await Qe(e.stream,s=>qt(s),async function*(s){let i=await ws(s);if(i==null){o.log("no message received"),yield Ee.encode({type:Ee.MessageType.DIAL_RESPONSE,dialResponse:{status:Ee.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let a;try{a=Ee.decode(i)}catch(c){o.log.error("could not decode message",c),yield Ee.encode({type:Ee.MessageType.DIAL_RESPONSE,dialResponse:{status:Ee.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}yield Ee.encode(await o.handleAutonatMessage(a,e.connection,{signal:t}))},s=>Ht(s),e.stream)}catch(o){this.log.error("error handling incoming autonat stream",o)}finally{t.removeEventListener("abort",n)}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{this.log.error("error verifying external address",e)})}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(u=>u.toOptions().host),s=e.dial;if(s==null)return this.log.error("dial was missing from message"),{type:Ee.MessageType.DIAL_RESPONSE,dialResponse:{status:Ee.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let i,a=s.peer;if(a==null||a.id==null)return this.log.error("PeerId missing from message"),{type:Ee.MessageType.DIAL_RESPONSE,dialResponse:{status:Ee.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{i=je(a.id)}catch(u){return this.log.error("invalid PeerId",u),{type:Ee.MessageType.DIAL_RESPONSE,dialResponse:{status:Ee.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",i),!t.remotePeer.equals(i))return this.log("target peer %p did not equal sending peer %p",i,t.remotePeer),{type:Ee.MessageType.DIAL_RESPONSE,dialResponse:{status:Ee.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>j(u)).filter(u=>{let h=u.toOptions().host===t.remoteAddr.toOptions().host;return this.log.trace("request to dial %a was sent from %a is same host %s",u,t.remoteAddr,h),h}).filter(u=>{let h=u.toOptions().host,f=!(zt(h)??!1);return this.log.trace("host %s was public %s",h,f),f}).filter(u=>{let h=u.toOptions().host,f=!o.includes(h);return this.log.trace("host %s was not our host %s",h,f),f}).filter(u=>{let h=!!this.components.transportManager.dialTransportForMultiaddr(u);return this.log.trace("transport for %a is supported %s",u,h),h}).map(u=>(u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${i.toString()}`)),u));if(c.length===0)return this.log("no valid multiaddrs for %p in message",i),{type:Ee.MessageType.DIAL_RESPONSE,dialResponse:{status:Ee.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(u=>u.toString()).join(", "),i);let l="",d=c[0];for await(let u of c){let h;d=u;try{if(h=await this.components.connectionManager.openConnection(u,n),!h.remoteAddr.equals(u))throw this.log.error("tried to dial %a but dialed %a",u,h.remoteAddr),new Error("Unexpected remote address");return this.log("Success %p",i),{type:Ee.MessageType.DIAL_RESPONSE,dialResponse:{status:Ee.ResponseStatus.OK,addr:h.remoteAddr.decapsulateCode(te("p2p").code).bytes}}}catch(f){this.log("could not dial %p",i,f),l=f.message}finally{h!=null&&await h.close()}}return{type:Ee.MessageType.DIAL_RESPONSE,dialResponse:{status:Ee.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:d.bytes}}}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(s=>{let i=s.toOptions();return!(zt(i.host)??!1)});if(t.length===0){this.log("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);K(1/0,n);let o=this;try{this.log("verify multiaddrs %s",t.map(l=>l.toString()).join(", "));let s=Ee.encode({type:Ee.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:t.map(l=>l.bytes)}}}),i={},a=[],c=async l=>{let d=()=>{};try{this.log("asking %p to verify multiaddr",l.id);let u=await o.components.connectionManager.openConnection(l.id,{signal:n}),h=await u.newStream(this.protocol,{signal:n});d=()=>{h.abort(new g("verifyAddress timeout",_n))},n.addEventListener("abort",d,{once:!0});let f=await Qe([s],m=>Ht(m),h,m=>qt(m),async m=>ws(m));if(f==null){this.log("no response received from %p",u.remotePeer);return}let p=Ee.decode(f);if(p.type!==Ee.MessageType.DIAL_RESPONSE||p.dialResponse==null){this.log("invalid autonat response from %p",u.remotePeer);return}if(p.dialResponse.status===Ee.ResponseStatus.OK){let m=u.remoteAddr.toOptions(),y;if(m.family===4)y=m.host.split(".")[0];else if(m.family===6)y=m.host.split(":")[0];else{this.log('remote address "%s" was not IP4 or IP6?',m.host);return}if(a.includes(y)){this.log("already have response from network segment %d - %s",y,m.host);return}a.push(y)}return p.dialResponse}catch(u){this.log.error("error asking remote to verify multiaddr",u)}finally{n.removeEventListener("abort",d)}};for await(let l of nn(Gt(this.components.randomWalk.walk({signal:n}),d=>async()=>c(d)),{concurrency:Y2}))try{if(l==null)continue;let d=l.addr==null?t[0]:j(l.addr);if(this.log("autonat response for %a is %s",d,l.status),l.status===Ee.ResponseStatus.E_BAD_REQUEST||l.status===Ee.ResponseStatus.E_DIAL_REFUSED||l.addr==null&&t.length>1)continue;if(!t.some(h=>h.equals(d))){this.log("peer reported %a as %s but it was not in our observed address list",d,l.status);continue}let u=d.toString();if(i[u]==null&&(i[u]={success:0,failure:0}),l.status===Ee.ResponseStatus.OK?i[u].success++:l.status===Ee.ResponseStatus.E_DIAL_ERROR&&i[u].failure++,i[u].success===Y2){this.log("%a is externally dialable",d),e.confirmObservedAddr(d);return}if(i[u].failure===Y2){this.log("%a is not externally dialable",d),e.removeObservedAddr(d);return}}catch(d){this.log.error("could not verify external address",d)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function o7(r={}){return e=>new x1(e,r)}var KR=W("dns4"),$R=W("dns6"),HR=W("dnsaddr"),ko=rt(W("dns"),HR,KR,$R),_1=rt(W("ip4"),W("ip6")),ki=rt(se(_1,W("tcp")),se(ko,W("tcp"))),v1=se(_1,W("udp")),qR=se(v1,W("utp")),GR=se(v1,W("quic")),WR=se(v1,W("quic-v1")),X2=rt(se(ki,W("ws")),se(ko,W("ws"))),Di=rt(se(X2,W("p2p")),X2),Q2=rt(se(ki,W("wss")),se(ko,W("wss")),se(ki,W("tls"),W("ws")),se(ko,W("tls"),W("ws"))),xs=rt(se(Q2,W("p2p")),Q2),Z2=rt(se(ki,W("http")),se(_1,W("http")),se(ko,W("http"))),j2=rt(se(ki,W("https")),se(_1,W("https")),se(ko,W("https"))),s7=se(v1,W("webrtc-direct"),W("certhash")),c7=rt(se(s7,W("p2p")),s7),i7=se(WR,W("webtransport"),W("certhash"),W("certhash")),l7=rt(se(i7,W("p2p")),i7),u7=rt(se(Di,W("p2p-webrtc-star"),W("p2p")),se(xs,W("p2p-webrtc-star"),W("p2p")),se(Di,W("p2p-webrtc-star")),se(xs,W("p2p-webrtc-star"))),gX=rt(se(Di,W("p2p-websocket-star"),W("p2p")),se(xs,W("p2p-websocket-star"),W("p2p")),se(Di,W("p2p-websocket-star")),se(xs,W("p2p-websocket-star"))),d7=rt(se(Z2,W("p2p-webrtc-direct"),W("p2p")),se(j2,W("p2p-webrtc-direct"),W("p2p")),se(Z2,W("p2p-webrtc-direct")),se(j2,W("p2p-webrtc-direct"))),_s=rt(X2,Q2,Z2,j2,u7,d7,ki,qR,GR,ko,c7,l7),yX=rt(se(_s,W("p2p-stardust"),W("p2p")),se(_s,W("p2p-stardust"))),Co=rt(se(_s,W("p2p")),u7,d7,c7,l7,W("p2p")),a7=rt(se(Co,W("p2p-circuit"),Co),se(Co,W("p2p-circuit")),se(W("p2p-circuit"),Co),se(_s,W("p2p-circuit")),se(W("p2p-circuit"),_s),W("p2p-circuit")),f7=()=>rt(se(a7,f7),a7),on=f7(),h7=rt(se(on,Co,on),se(Co,on),se(on,Co),on,Co);var wX=rt(se(on,W("webrtc"),W("p2p")),se(on,W("webrtc")),se(_s,W("webrtc"),W("p2p")),se(_s,W("webrtc")),W("webrtc"));function p7(r){function e(t){let n;try{n=j(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function se(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:p7(e),partialMatch:e}}function rt(...r){function e(n){let o=null;return r.some(s=>{let i=typeof s=="function"?s().partialMatch(n):s.partialMatch(n);return i!=null?(o=i,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:p7(e),partialMatch:e}}function W(r){let e=r;function t(o){let s;try{s=j(o)}catch{return!1}let i=s.protoNames();return i.length===1&&i[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var zR="bootstrap",YR=50,XR=12e4,QR=1e3,J2=class extends ge{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??QR,this.list=[];for(let n of t.list){if(!h7.matches(n)){this.log.error("Invalid multiaddr");continue}let o=j(n),s=o.getPeerId();if(s==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let i={id:me(s),multiaddrs:[o]};this.list.push(i)}this._init=t}[Vo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Be]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??zR]:{value:this._init.tagValue??YR,ttl:this._init.tagTTL??XR}}}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function g7(r){return e=>new J2(e,r)}var y7={ERR_SIGNATURE_NOT_VALID:"ERR_SIGNATURE_NOT_VALID"};var Za;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={publicKey:new Uint8Array(0),payloadType:new Uint8Array(0),payload:new Uint8Array(0),signature:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.publicKey=t.bytes();break;case 2:o.payloadType=t.bytes();break;case 3:o.payload=t.bytes();break;case 5:o.signature=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Za||(Za={}));var mr=class r{static createFromProtobuf=async e=>{let t=Za.decode(e),n=await dt(t.publicKey);return new r({peerId:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t.privateKey==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,s=e.marshal(),i=w7(n,o,s),c=await(await Ir(t.privateKey)).sign(i.subarray());return new r({peerId:t,payloadType:o,payload:s,signature:c})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new g("envelope signature is not valid for the given domain",y7.ERR_SIGNATURE_NOT_VALID);return n};peerId;payloadType;payload;signature;marshaled;constructor(e){let{peerId:t,payloadType:n,payload:o,signature:s}=e;this.peerId=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){if(this.peerId.publicKey==null)throw new Error("Missing public key");return this.marshaled==null&&(this.marshaled=Za.encode({publicKey:this.peerId.publicKey,payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return J(this.marshal(),e.marshal())}async validate(e){let t=w7(e,this.payloadType,this.payload);if(this.peerId.publicKey==null)throw new Error("Missing public key");return Xr(this.peerId.publicKey).verify(t.subarray(),this.signature)}},w7=(r,e,t)=>{let n=L(r),o=Ve(n.byteLength),s=Ve(e.length),i=Ve(t.length);return new ce(o,n,s,e,i,t)};function E7(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var b7="libp2p-peer-record",x7=Uint8Array.from([3,1]);var ja;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=oe((s,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),s.multiaddr!=null&&s.multiaddr.byteLength>0&&(i.uint32(10),i.bytes(s.multiaddr)),a.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let a={multiaddr:new Uint8Array(0)},c=i==null?s.len:s.pos+i;for(;s.pos<c;){let l=s.uint32();switch(l>>>3){case 1:a.multiaddr=s.bytes();break;default:s.skipType(l&7);break}}return a})),o),n.encode=s=>ne(s,n.codec()),n.decode=s=>re(s,n.codec())})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=oe((n,o,s={})=>{if(s.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let i of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(i,o);s.lengthDelimited!==!1&&o.ldelim()},(n,o)=>{let s={peerId:new Uint8Array(0),seq:0n,addresses:[]},i=o==null?n.len:n.pos+o;for(;n.pos<i;){let a=n.uint32();switch(a>>>3){case 1:s.peerId=n.bytes();break;case 2:s.seq=n.uint64();break;case 3:s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32()));break;default:n.skipType(a&7);break}}return s})),t),r.encode=n=>ne(n,r.codec()),r.decode=n=>re(n,r.codec())})(ja||(ja={}));var Vt=class r{static createFromProtobuf=e=>{let t=ja.decode(e),n=je(t.peerId),o=(t.addresses??[]).map(i=>j(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=b7;static CODEC=x7;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=ja.encode({peerId:this.peerId.toBytes(),seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!E7(this.multiaddrs,e.multiaddrs))}};function ze(r,e){let t=yn(r,e),n={read:async(o,s)=>{let i=await t.read(s);return o.decode(i)},write:async(o,s,i)=>{await t.write(s.encode(o),i)},writeV:async(o,s,i)=>{await t.writeV(o.map(a=>s.encode(a)),i)},pb:o=>({read:async s=>n.read(o,s),write:async(s,i)=>n.write(s,o,i),writeV:async(s,i)=>n.writeV(s,o,i),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var _7="circuit-relay-relay";var ZX=BigInt(131072),vs="/libp2p/circuit/relay/0.2.0/hop",ep="/libp2p/circuit/relay/0.2.0/stop",jX=30*1e3,JX=30*1e3,tp=300;var rp="ERR_RELAYED_DIAL",v7="ERR_HOP_REQUEST_FAILED";var S7=4096,R7=.001;var Do;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ni.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),S1.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Pi.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),_t.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Ni.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=S1.codec().decode(o,o.uint32(),{limits:i.limits?.reservation});break}case 4:{a.limit=Pi.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 5:{a.status=_t.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>re(o,r.codec(),s)})(Do||(Do={}));var En;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ni.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Pi.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),_t.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Ni.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.limit=Pi.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 4:{a.status=_t.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>re(o,r.codec(),s)})(En||(En={}));var Ni;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let s of t.addrs)n.uint32(18),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:pe(0),addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&s.addrs.length===o.limits.addrs)throw new xr('decode error - map field "addrs" had too many elements',"ERR_MAX_LENGTH");s.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Ni||(Ni={}));var S1;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let s of t.addrs)n.uint32(18),n.bytes(s);t.voucher!=null&&(n.uint32(26),n.bytes(t.voucher)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={expire:0n,addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&s.addrs.length===o.limits.addrs)throw new xr('decode error - map field "addrs" had too many elements',"ERR_MAX_LENGTH");s.addrs.push(t.bytes());break}case 3:{s.voucher=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(S1||(S1={}));var Pi;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.duration=t.uint32();break}case 2:{s.data=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Pi||(Pi={}));var _t;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(_t||(_t={}));var np;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(np||(np={}));(function(r){r.codec=()=>Ke(np)})(_t||(_t={}));var A7;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={relay:pe(0),peer:pe(0),expiration:0n},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.relay=t.bytes();break}case 2:{s.peer=t.bytes();break}case 3:{s.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(A7||(A7={}));function op(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}function sp(r){let{stream:e,remoteAddr:t,logger:n}=r,o=n.forComponent("libp2p:stream:converter"),s=!1,i=!1,a=e.close.bind(e);e.close=async h=>{await a(h),u(!0)};let c=e.abort.bind(e);e.abort=h=>{c(h),u(!0)};let l=e.sink.bind(e);e.sink=async h=>{try{await l(h)}catch(f){f.type!=="aborted"&&o.error("%s error in sink",t,f)}finally{i=!0,u()}};let d={log:o,sink:e.sink,source:async function*(){try{for await(let h of e.source)h instanceof Uint8Array?yield h:yield*h}finally{s=!0,u()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function u(h){h===!0&&(s=!0,i=!0),s&&i&&d.timeline.close==null&&(d.timeline.close=Date.now())}return d}var R1=class extends ge{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,K(1/0,this.discoveryController.signal)}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(vs,{filter:this.filter,onConnect:e=>{this.log("discovered relay %p",e),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,K(1/0,this.discoveryController.signal),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(vs)],orders:[()=>Math.random()<.5?1:-1]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=new Kt({concurrency:5});this.log("start random walk");for await(let n of this.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}this.log.trace("wait for space in queue for %p",n.id),await ke(t.onSizeLessThan(10),this.discoveryController.signal),this.log("adding random peer %p to dial queue (length: %d)",n.id,t.size),t.add(async()=>{let o=_e([this.discoveryController.signal,AbortSignal.timeout(5e3)]);K(1/0,o);try{await this.connectionManager.openConnection(n.id,{signal:o})}finally{o.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p",n.id,o)})}await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};var ip=class extends ge{connectionManager;relayStore;listeningAddrs;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.relayStore=e.relayStore,this.listeningAddrs=new st,this.relayStore.addEventListener("relay:removed",this._onRemoveRelayPeer)}_onRemoveRelayPeer=e=>{this.#e(e.detail)};async listen(e){this.log("listen on %a",e);let t=e.decapsulate("/p2p-circuit"),n=await this.connectionManager.openConnection(t);if(!this.relayStore.hasReservation(n.remotePeer)){this.log("making reservation on peer %p",n.remotePeer),await this.relayStore.addRelay(n.remotePeer,"configured");return}let o=this.relayStore.getReservation(n.remotePeer);if(o==null)throw new g("Did not have reservation after making reservation","ERR_NO_RESERVATION");if(this.listeningAddrs.has(n.remotePeer)){this.log("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,o.addrs.map(s=>j(s).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening",{})}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){}#e(e){let t=this.listeningAddrs.has(e);this.log("relay peer removed %p - had reservation",e,t),this.listeningAddrs.delete(e),t&&(this.log.trace("removing relay event listener for peer %p",e),this.relayStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),this.safeDispatchEvent("close",{}))}};function I7(r){return new ip(r)}var eA=60*1e3*10,tA=60*1e3*5,rA=30*1e3,A1=class extends ge{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;reservationCompletionTimeout;started;log;relayFilter;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new st,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e3,this.started=!1,this.relayFilter=qh(100),this.reserveQueue=new Kt({concurrency:t?.reservationConcurrency??1,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("peer:disconnect",n=>{this.#t(n.detail)})}isStarted(){return this.started}start(){this.started=!0}afterStart(){this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{}))}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}async addRelay(e,t){if(this.peerId.equals(e)){this.log("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){this.log("not adding potential relay peer %p as the queue is full",e);return}if(this.reserveQueue.has(e)){this.log("potential relay peer %p is already in the reservation queue",e);return}if(this.relayFilter.has(e.toBytes())){this.log("potential relay peer %p has failed previously, not trying again",e);return}this.log("try to reserve relay slot with %p",e),await this.reserveQueue.add(async()=>{let n=Date.now();try{let o=this.reservations.get(e);if(o!=null){if(op(o.reservation.expire)>eA){this.log("already have reservation on relay peer %p and it expires in more than 10 minutes",e);return}clearTimeout(o.timeout),this.reservations.delete(e)}if(t==="discovered"&&[...this.reservations.values()].reduce((u,h)=>(h.type==="discovered"&&u++,u),0)>=this.maxDiscoveredRelays){this.log("already have enough discovered relays");return}let s=AbortSignal.timeout(this.reservationCompletionTimeout);K(1/0,s);let i=await this.connectionManager.openConnection(e,{signal:s});if(i.remoteAddr.protoNames().includes("p2p-circuit")){this.log("not creating reservation over relayed connection");return}let a=await this.#e(i,{signal:s});this.log("created reservation on relay peer %p",e);let c=op(a.expire),l=Math.min(Math.max(c-tA,rA),Math.pow(2,31)-1),d=setTimeout(()=>{this.addRelay(e,t).catch(u=>{this.log.error("could not refresh reservation to relay %p",e,u)})},l);this.reservations.set(e,{timeout:d,reservation:a,type:t}),await this.peerStore.merge(e,{tags:{[_7]:{value:1,ttl:c}}}),await this.transportManager.listen([j(`/p2p/${e.toString()}/p2p-circuit`)]),this.safeDispatchEvent("relay:created-reservation",{detail:e})}catch(o){this.log.error("could not reserve slot on %p after %dms",e,Date.now()-n,o);let s=this.reservations.get(e);s!=null&&clearTimeout(s.timeout),this.reservations.delete(e),this.relayFilter.add(e.toBytes())}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(){return this.reservations.size}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(vs,t),s=ze(n).pb(Do);await s.write({type:Do.Type.RESERVE},t);let i;try{i=await s.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(i.status===_t.OK&&i.reservation!=null){let c=!1,l=e.remoteAddr.bytes;for(let d of i.reservation.addrs)if(J(l,d)){c=!0;break}return c||i.reservation.addrs.push(l),i.reservation}let a=`reservation failed with status ${i.status??"undefined"}`;throw this.log.error(a),new Error(a)}#t(e){let t=this.reservations.get(e);t!=null&&(this.log("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};var oA=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(j)}catch{return!1}return!0},ap={maxInboundStopStreams:tp,maxOutboundStopStreams:tp,stopTimeout:3e4},I1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??ap.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??ap.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??ap.stopTimeout;let n=t.discoverRelays??0;n>0&&(this.discovery=new R1(e,{filter:t.discoveryFilter??Yh(S7,R7)}),this.discovery.addEventListener("relay:discover",o=>{this.reservationStore.addRelay(o.detail,"discovered").catch(s=>{this.log.error("could not add discovered relay %p",o.detail,s)})})),this.reservationStore=new A1(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:created-reservation",()=>{this.reservationStore.reservationCount()>=n&&this.discovery?.stopDiscovery()}),this.started=!1}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Be]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[Mr](){return this.discovery!=null?["@libp2p/identify"]:[]}[ln]=!0;isStarted(){return this.started}async start(){await this.registrar.handle(ep,e=>{this.onStop(e).catch(t=>{this.log.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnTransientConnection:!0}),await wr(this.discovery,this.reservationStore),this.started=!0}async stop(){await Er(this.discovery,this.reservationStore),await this.registrar.unhandle(ep),this.started=!1}async dial(e,t){if(e.protoCodes().filter(p=>p===290).length!==1){let p="Invalid circuit relay address";throw this.log.error(p,e),new g(p,rp)}let n=e.toString().split("/p2p-circuit"),o=j(n[0]),s=j(n[n.length-1]),i=o.getPeerId(),a=s.getPeerId();if(i==null||a==null){let p=`Circuit relay dial to ${e.toString()} failed as address did not have peer ids`;throw this.log.error(p),new g(p,rp)}let c=me(i),l=me(a),d=!1,h=this.connectionManager.getConnections(c)[0];h==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new q("circuit-relay:open-connection")),h=await this.connectionManager.openConnection(c,t),d=!0):t.onProgress?.(new q("circuit-relay:reuse-connection"));let f;try{return t.onProgress?.(new q("circuit-relay:open-hop-stream")),f=await h.newStream(vs),await this.connectV2({stream:f,connection:h,destinationPeer:l,destinationAddr:s,relayAddr:o,ma:e,disconnectOnFailure:d,onProgress:t.onProgress})}catch(p){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,p),f?.abort(p),d&&await h.close(),p}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:o,relayAddr:s,ma:i,disconnectOnFailure:a,onProgress:c}){try{let l=ze(e),d=l.pb(Do);c?.(new q("circuit-relay:write-connect-message")),await d.write({type:Do.Type.CONNECT,peer:{id:n.toBytes(),addrs:[j(o).bytes]}}),c?.(new q("circuit-relay:read-connect-response"));let u=await d.read();if(u.status!==_t.OK)throw new g(`failed to connect via relay with status ${u?.status?.toString()??"undefined"}`,v7);let h=sp({stream:l.unwrap(),remoteAddr:i,localAddr:s.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger});return this.log("new outbound relayed connection %a",h.remoteAddr),await this.upgrader.upgradeOutbound(h,{transient:u.limit!=null,onProgress:c})}catch(l){throw this.log.error(`Circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,l),a&&await t.close(),l}}createListener(e){return I7({connectionManager:this.connectionManager,relayStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>on.matches(t))}dialFilter(e){return this.listenFilter(e)}async onStop({connection:e,stream:t}){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let n=AbortSignal.timeout(this.stopTimeout),o=ze(t).pb(En),s=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,s.type),s?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:En.Type.STATUS,status:_t.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(s.type!==En.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:En.Type.STATUS,status:_t.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!oA(s)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:En.Type.STATUS,status:_t.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let i=je(s.peer.id);if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,i)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:En.Type.STATUS,status:_t.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:En.Type.STATUS,status:_t.OK},{signal:n});let a=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),c=this.addressManager.getAddresses()[0],l=sp({stream:o.unwrap().unwrap(),remoteAddr:a,localAddr:c,logger:this.logger});this.log("new inbound relayed connection %a",l.remoteAddr),await this.upgrader.upgradeInbound(l,{transient:s.limit!=null}),this.log("%s connection %a upgraded","inbound",l.remoteAddr)}};function cp(r={}){return e=>new I1(e,r)}var T7=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},sA=new WeakMap;function iA({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(T7());let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(T7())},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((h,f)=>{i=()=>{d(),h(n)},a=f,s=(e??setTimeout)(i,t)});return o&&o.addEventListener("abort",l,{once:!0}),sA.set(u,()=>{c(s),s=null,i()}),u}}var aA=iA(),T1=aA;var sn;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.observedAddresses!=null)for(let a of o.observedAddresses)s.uint32(18),s.bytes(a);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={observedAddresses:[]},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.observedAddresses.push(o.bytes());break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ne(o,r.codec()),r.decode=o=>re(o,r.codec())})(sn||(sn={}));function lp(r,e){return ys.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:Uu.matches(r)?!0:I5.matches(r)?zt(r.toOptions().host)===!1:!1}var C7=1024*4,k7=100,C1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},k1=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??C1.timeout,this.retries=t.retries??C1.retries,this.maxInboundStreams=t.maxInboundStreams??C1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??C1.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[Mr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Ja,{notifyOnTransient:!0,onConnect:(e,t)=>{t.transient&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Ja,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Ja),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([Ja],{signal:o.signal,runOnTransientConnection:!0});let s=ze(t,{maxDataLength:C7}).pb(sn);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:sn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await s.read(o);if(a.type!==sn.Type.CONNECT)throw this.log("A sent wrong message type"),new g("DCUtR message type was incorrect",Ko);let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new g("DCUtR connect message had no multiaddrs",Ko);let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:sn.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await T1(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:k7});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(s){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,s),t?.abort(s),n===this.retries)throw s}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let s=o.multiaddr;return s.getPeerId()==null?s.encapsulate(`/p2p/${e.remotePeer}`):s}).filter(o=>lp(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let s=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(s.transient)throw new Error("Could not open a new, non-transient, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,s.remoteAddr),await e.close({signal:o}),!0}catch(s){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,s)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let o=ze(e,{maxDataLength:C7}).pb(sn);this.log("A receiving connect");let s=await o.read(n);if(s.type!==sn.Type.CONNECT)throw this.log("B sent wrong message type"),new g("DCUtR message type was incorrect",Ko);if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new g("DCUtR connect message had no multiaddrs",Ko);let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs"),new g("DCUtR connect message had no dialable multiaddrs",Ko);if(this.log("A sending connect"),await o.write({type:sn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==sn.Type.SYNC)throw new g("DCUtR message type was incorrect",Ko);this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:k7,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=j(n);if(!lp(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Ja="/libp2p/dcutr";function D7(r={}){return e=>new k1(e,r)}var N7="0.1.0",P7="id",L7="id/push",O7="1.0.0",B7="1.0.0";var No;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let s of t.listenAddrs)n.uint32(18),n.bytes(s);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let s of t.protocols)n.uint32(26),n.string(s);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 5:o.protocolVersion=t.string();break;case 6:o.agentVersion=t.string();break;case 1:o.publicKey=t.bytes();break;case 2:o.listenAddrs.push(t.bytes());break;case 4:o.observedAddr=t.bytes();break;case 3:o.protocols.push(t.string());break;case 8:o.signedPeerRecord=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(No||(No={}));var F7=Xe(U7(),1),up=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,D1=(0,F7.default)(),N1=up&&!D1,V7=D1&&!up,K7=D1&&up,$7=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!D1,P1=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,pZ=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",H7=typeof navigator<"u"&&navigator.product==="ReactNative";var jt={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnTransientConnection:!0,concurrency:32};function q7(r){if(r!=null&&r.length>0)try{return j(r)}catch{}}function dA(r,e){return e!=null||(e=`${r.name}/${r.version}`,$7||V7?e+=` UserAgent=${globalThis.process.version}`:(N1||P1||K7||H7)&&(e+=` UserAgent=${globalThis.navigator.userAgent}`)),e}async function L1(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new g("message was null or undefined","ERR_INVALID_MESSAGE");let s={};if(o.listenAddrs.length>0&&(s.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:j(c)}))),o.protocols.length>0&&(s.protocols=o.protocols),o.publicKey!=null&&(s.publicKey=o.publicKey,!(await dt(o.publicKey)).equals(n.remotePeer)))throw new g("public key did not match remote PeerId","ERR_INVALID_PUBLIC_KEY");let i;if(o.signedPeerRecord!=null){t("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await mr.openAndCertify(c,Vt.DOMAIN),d=Vt.createFromProtobuf(l.payload);if(!d.peerId.equals(l.peerId))throw new g("signing key does not match PeerId in the PeerRecord","ERR_INVALID_SIGNING_KEY");if(!n.remotePeer.equals(d.peerId))throw new g("signing key does not match remote PeerId","ERR_INVALID_PEER_RECORD_KEY");let u;try{u=await r.get(d.peerId)}catch(h){if(h.code!=="ERR_NOT_FOUND")throw h}if(u!=null&&(s.metadata=u.metadata,u.peerRecordEnvelope!=null)){let h=await mr.createFromProtobuf(u.peerRecordEnvelope),f=Vt.createFromProtobuf(h.payload);f.seqNumber>=d.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",f.seqNumber,d.seqNumber),d=f,c=u.peerRecordEnvelope)}s.peerRecordEnvelope=c,s.addresses=d.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),i={seq:d.seqNumber,addresses:d.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t("patching %p with",n.remotePeer,s),await r.patch(n.remotePeer,s),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=L(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=L(o.protocolVersion)),t("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:o.protocolVersion,agentVersion:o.agentVersion,publicKey:o.publicKey,listenAddrs:o.listenAddrs.map(c=>j(c)),observedAddr:o.observedAddr==null?void 0:j(o.observedAddr),protocols:o.protocols,signedPeerRecord:i,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var Li=class{host;protocol;started;timeout;peerId;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnTransientConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??jt.timeout,this.maxInboundStreams=t.maxInboundStreams??jt.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??jt.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??jt.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??jt.maxObservedAddresses,this.runOnTransientConnection=t.runOnTransientConnection??jt.runOnTransientConnection,this.host={protocolVersion:`${t.protocolPrefix??jt.protocolPrefix}/${N7}`,agentVersion:dA(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:L(this.host.agentVersion),ProtocolVersion:L(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var O1=class extends Li{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??jt.protocolPrefix}/${L7}/${B7}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??jt.concurrency,(t.runOnSelfUpdate??jt.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Be]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(d=>d.decapsulateCode(te("p2p").code)),t=new Vt({peerId:this.peerId,multiaddrs:e}),n=await mr.seal(t,this.peerId),o=this.registrar.getProtocols(),s=await this.peerStore.get(this.peerId),i=B(s.metadata.get("AgentVersion")??L(this.host.agentVersion)),a=B(s.metadata.get("ProtocolVersion")??L(this.host.protocolVersion)),c=this;async function*l(){for(let d of c.connectionManager.getConnections())(await c.peerStore.get(d.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let h,f=AbortSignal.timeout(c.timeout);K(1/0,f);try{h=await d.newStream(c.protocol,{signal:f,runOnTransientConnection:c.runOnTransientConnection}),await ze(h,{maxDataLength:c.maxMessageSize}).pb(No).write({listenAddrs:e.map(m=>m.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:i,protocolVersion:a},{signal:f}),await h.close({signal:f})}catch(p){c.log.error("could not push identify update to peer",p),h?.abort(p)}})}await $t(nn(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},i=await ze(n,{maxDataLength:this.maxMessageSize}).pb(No).read(o);await n.close(o),await L1(this.peerStore,this.events,this.log,t,i)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log("handled push from %p",t.remotePeer)}};var B1=class extends Li{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??jt.protocolPrefix}/${P7}/${O7}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??jt.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(s=>{this.log.error("error during identify trigged by connection:open",s)})})}[Be]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);K(1/0,o),t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnTransientConnection:this.runOnTransientConnection});let s=await ze(n,{maxDataLength:this.maxMessageSize}).pb(No).read(t);return await n.close(t),s}catch(o){throw this.log.error("error while reading identify message",o),n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:s,observedAddr:i}=n;if(o==null)throw new g("public key was missing from identify message","ERR_MISSING_PUBLIC_KEY");let a=await dt(o);if(!e.remotePeer.equals(a))throw new g("identified peer does not match the expected peer","ERR_INVALID_PEER");if(this.peerId.equals(a))throw new g("identified peer is our own peer id?","ERR_INVALID_PEER");let c=q7(i);return this.log("identify completed for peer %p and protocols %o",a,s),this.log("our observed address is %a",c),c!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(this.log("storing our observed address %a",c),this.addressManager.addObservedAddr(c)),L1(this.peerStore,this.events,this.log,e,n)}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);K(1/0,o);try{let s=this.peerId.publicKey??new Uint8Array(0),i=await this.peerStore.get(this.peerId),a=this.addressManager.getAddresses().map(u=>u.decapsulateCode(te("p2p").code)),c=i.peerRecordEnvelope;if(a.length>0&&c==null){let u=new Vt({peerId:this.peerId,multiaddrs:a});c=(await mr.seal(u,this.peerId)).marshal().subarray()}let l=t.remoteAddr.bytes;A5.matches(t.remoteAddr)||(l=void 0),await ze(n).pb(No).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:s,listenAddrs:a.map(u=>u.bytes),signedPeerRecord:c,observedAddr:l,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(s){this.log.error("could not respond to identify request",s),n.abort(s)}}};function G7(r={}){return e=>new B1(e,r)}function W7(r={}){return e=>new O1(e,r)}var z7="/ipfs/kad/1.0.0",Y7="/dht/record",dp="/dht/provider";var ec;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={key:pe(0),value:pe(0),timeReceived:""},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(ec||(ec={}));function X7(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),s=String(r.getUTCMinutes()).padStart(2,"0"),i=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${s}:${i}.${c}Z`}function Q7(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,s=parseInt(t[3],10),i=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,s,i,a,c,l))}var vt=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return ec.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:X7(this.timeReceived)}}static deserialize(e){let t=ec.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Q7(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};var Z7;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.key=t.bytes();break}case 2:{o.value=t.bytes();break}case 3:{o.author=t.bytes();break}case 4:{o.signature=t.bytes();break}case 5:{o.timeReceived=t.string();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Z7||(Z7={}));var be;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(be||(be={}));var M1;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(M1||(M1={}));(function(r){r.codec=()=>Ke(M1)})(be||(be={}));var Bi;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Bi||(Bi={}));var fp;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(fp||(fp={}));(function(r){r.codec=()=>Ke(fp)})(Bi||(Bi={}));var Oi;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let s of t.multiaddrs)n.uint32(18),n.bytes(s);t.connection!=null&&(n.uint32(24),Bi.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={id:pe(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.id=t.bytes();break}case 2:{o.multiaddrs.push(t.bytes());break}case 3:{o.connection=Bi.codec().decode(t);break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Oi||(Oi={}));var Or;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&M1[t.type]!==0&&(n.uint32(8),be.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let s of t.closer)n.uint32(66),Oi.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Oi.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={type:be.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.type=be.codec().decode(t);break}case 10:{o.clusterLevel=t.int32();break}case 2:{o.key=t.bytes();break}case 3:{o.record=t.bytes();break}case 8:{o.closer.push(Oi.codec().decode(t,t.uint32()));break}case 9:{o.providers.push(Oi.codec().decode(t,t.uint32()));break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Or||(Or={}));function hp(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new Pt("kad-dht:query:send-query",{detail:t})),t}function tc(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer!=null?r.closer:[],providers:r.providers!=null?r.providers:[]};return e.onProgress?.(new Pt("kad-dht:query:peer-response",{detail:t})),t}function U1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new Pt("kad-dht:query:final-peer",{detail:t})),t}function gr(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new Pt("kad-dht:query:query-error",{detail:t})),t}function pp(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new Pt("kad-dht:query:provider",{detail:t})),t}function rc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new Pt("kad-dht:query:value",{detail:t})),t}function mp(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new Pt("kad-dht:query:dial-peer",{detail:t})),t}function j7(r,e,t){if(t.length===0){let i="No records given";throw new g(i,"ERR_NO_RECORDS_RECEIVED")}let o=B(e).split("/");if(o.length<3){let i="Record key does not have a selector function";throw new g(i,"ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")}let s=r[o[1].toString()];if(s==null){let i=`No selector function configured for key type "${o[1]}"`;throw new g(i,"ERR_UNRECOGNIZED_KEY_PREFIX")}return t.length===1?0:s(e,t)}function hA(r,e){return 0}var J7={pk:hA};async function Mi(r,e){let t=e.key,o=B(t).split("/");if(o.length<3)return;let s=r[o[1].toString()];if(s==null){let i=`No validator available for key type "${o[1]}"`;throw new g(i,"ERR_INVALID_RECORD_KEY_TYPE")}await s(t,e.value)}var pA=async(r,e)=>{if(!(r instanceof Uint8Array))throw new g('"key" must be a Uint8Array',"ERR_INVALID_RECORD_KEY_NOT_BUFFER");if(r.byteLength<5)throw new g("invalid public key record","ERR_INVALID_RECORD_KEY_TOO_SHORT");if(B(r.subarray(0,4))!=="/pk/")throw new g("key was not prefixed with /pk/","ERR_INVALID_RECORD_KEY_BAD_PREFIX");let n=r.slice(4),o=await De.digest(e);if(!J(n,o.bytes))throw new g("public key does not match passed in key","ERR_INVALID_RECORD_HASH_MISMATCH")},e9={pk:pA};var mA=L("/pk/");function t9(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=zt(n);return o==null?!0:!o})}}async function Po(r){return(await De.digest(r)).digest}async function Br(r){return Po(r.toBytes())}function Lo(r){return new Ne(`${Y7}/${B(r,"base32")}`,!1)}function r9(r){return ve([mA,r.toBytes()])}function n9(r){return B(r.subarray(0,4))==="/pk/"}function o9(r){return je(r.subarray(4))}function gp(r,e){let t=new Date;return new vt(r,e,t).serialize()}function s9(r,e=100){let t;return()=>{clearTimeout(t),t=setTimeout(()=>{r()},e)}}var gA=290,yA=54,wA=55,EA=56,bA=4,xA=41;function i9(r){let e=r.stringTuples();for(let t of e)if(t[0]===gA)return!1;if(e[0][0]===yA||e[0][0]===wA||e[0][0]===EA)return!0;if(e[0][0]===bA||e[0][0]===xA){let t=zt(`${e[0][1]}`);return t==null||!t}return!1}var F1=class{log;components;validators;selectors;peerRouting;queryManager;network;constructor(e,t){let{validators:n,selectors:o,peerRouting:s,queryManager:i,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.validators=n,this.selectors=o,this.peerRouting=s,this.queryManager=i,this.network=a}async getLocal(e){this.log("getLocal %b",e);let t=Lo(e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=vt.deserialize(n);return await Mi(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let s=gp(e,n);for(let{value:i,from:a}of t){if(J(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=Lo(e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray())}catch(d){this.log.error("Failed error correcting self",d)}continue}let c=!1,l={type:be.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&J(d.record.value,vt.deserialize(s).value)&&(c=!0),yield d;c||(yield gr({from:a,error:new g("value not put correctly","ERR_PUT_VALUE_INVALID")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=gp(e,t),s=Lo(e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray()),yield*Qe(this.peerRouting.getClosestPeers(e,{signal:n.signal}),i=>Gt(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:be.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,n))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&J(d.record.value,vt.deserialize(o).value)||c.push(gr({from:a.peer.id,error:new g("value not put correctly","ERR_PUT_VALUE_INVALID")},n)));return c}),i=>nn(i,{ordered:!1,concurrency:3}),async function*(i){for await(let a of i)yield*a})}async*get(e,t={}){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),s=0;try{s=j7(this.selectors,e,o)}catch(a){if(a.code!=="ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new g("best value was not found","ERR_NOT_FOUND");yield*this.sendCorrectionRecord(e,n,i,t),yield n[s]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let s=await this.getLocal(e);yield rc({value:s.value,from:this.components.peerId},t)}catch(s){this.log("error getting local value for %b",e,s)}let n=this,o=async function*({peer:s,signal:i}){for await(let a of n.peerRouting.getValueOrPeers(s,e,{signal:i}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield rc({from:s,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function c9(r,e){return{id:r.id.toBytes(),multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function nc(r){if(r.id==null)throw new Error("Invalid peer in message");return{id:je(r.id),multiaddrs:(r.multiaddrs??[]).map(e=>j(e))}}var V1=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:s,routingTable:i,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=s,this.routingTable=i,this.providers=a}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let s={type:be.ADD_PROVIDER,key:o,providers:[c9({id:this.components.peerId,multiaddrs:t})]},i=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let d of this.network.sendMessage(c.peer.id,s,n))d.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),i++),l.push(d)}catch(d){this.log.error("error sending provide record to peer %p",c.peer.id,d),l.push(gr({from:c.peer.id,error:d},n))}return l};yield*Qe(this.peerRouting.getClosestPeers(o,n),c=>Gt(c,l=>a(l)),c=>nn(c,{ordered:!1,concurrency:3}),async function*(c){for await(let l of c)yield*l}),this.log("sent provider records to %d peers",i)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,s=e.multihash.bytes,i=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let h=await this.components.peerStore.get(u);d.push({id:u,multiaddrs:h.addresses.map(({multiaddr:f})=>f)})}catch(h){if(h.code!=="ERR_NOT_FOUND")throw h;this.log("no peer store entry for %p",u)}if(yield tc({from:this.components.peerId,messageType:be.GET_PROVIDERS,providers:d},t),yield pp({from:this.components.peerId,providers:d},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u}){let h={type:be.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d,h,{...t,signal:u})},l=new kt(a);for await(let d of this.queryManager.run(s,c,t))if(yield d,d.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",d.providers.length,e,d.closer.length);let u=[];for(let h of d.providers)l.has(h.id)||(l.add(h.id),u.push(h));if(u.length>0&&(yield pp({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var Ui=class{movingAverage;variance;deviation;forecast;timespan;previousTime;constructor(e){this.timespan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timespan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,s=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*s),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var _A=1.2,vA=2,SA=2e3,K1=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Ui(e.interval??5e3),this.failure=new Ui(e.interval??5e3),this.next=new Ui(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??vA,this.timeoutMultiplier=e.timeoutMultiplier??_A,this.minTimeout=e.minTimeout??SA,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=_e([e.signal,n]);return K(1/0,o,n),o.start=Date.now(),o.timeout=t,o}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var $1=class extends ge{log;protocol;running;components;timeout;constructor(e,t){super();let{protocol:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=n,this.timeout=new K1({...t.timeout??{},metrics:e.metrics,metricName:`${t.logPrefix.replaceAll(":","_")}_network_message_send_times_milliseconds`})}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new xr("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield mp({peer:e},n),yield hp({to:e,type:o},n);let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{s=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(s,t,n);s.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),s?.abort(l)}),yield tc({from:e,messageType:c.type,closer:c.closer.map(nc),providers:c.providers.map(nc),record:c.record==null?void 0:vt.deserialize(c.record)},n)}catch(a){s?.abort(a),this.log.error("could not send %s to %p",t.type,e,a),yield gr({from:e,error:a},n)}finally{this.timeout.cleanUp(i)}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new xr("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield mp({peer:e},n),yield hp({to:e,type:o},n);let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{s=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(s,t,n),s.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),s?.abort(c)}),yield tc({from:e,messageType:o},n)}catch(a){s?.abort(a),yield gr({from:e,error:a},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){let o=ze(e);await o.write(t,Or,n),await o.unwrap().close(n)}async _writeReadMessage(e,t,n){let o=ze(e);await o.write(t,Or,n);let s=await o.read(Or,n);return await o.unwrap().close(n),s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:nc(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:nc(i)})}),s}};function Fi(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var Vi=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await Br(e.id);this.addWitKadId(e,t)}addWitKadId(e,t){if(this.peerDistances.find(o=>o.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:rn(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,s)=>Fi(o.distance,s.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await Br(e),n=rn(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Fi(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var H1=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){let{routingTable:n,network:o,validators:s,queryManager:i,logPrefix:a}=t;this.routingTable=n,this.network=o,this.validators=s,this.queryManager=i,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${a}:peer-routing`)}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:be.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=r9(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let s=await dt(Fl.marshalPublicKey({bytes:o.record.value}));if(!s.equals(e))throw new g("public key does not match id","ERR_PUBLIC_KEY_DOES_NOT_MATCH_ID");if(s.publicKey==null)throw new g("public key missing","ERR_PUBLIC_KEY_MISSING");yield rc({from:e,value:s.publicKey},t)}throw new g(`Node not responding with its public key: ${e.toString()}`,"ERR_INVALID_RECORD")}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield U1({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,s=async function*({peer:i,signal:a}){let c={type:be.FIND_NODE,key:e.toBytes()};for await(let l of o.network.sendRequest(i,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let d=l.closer.find(u=>u.id.equals(e));d!=null&&(yield U1({from:l.from,peer:d},t))}};for await(let i of this.queryManager.run(e.toBytes(),s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}n||(yield gr({from:this.peerId,error:new g("Not found","ERR_NOT_FOUND")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Po(e),o=this.routingTable.closestPeers(n),s=this,i=new Vi(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await i.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){s.log("closerPeersSingle %s from %p",B(e,"base32"),c);let d={type:be.FIND_NODE,key:e};yield*s.network.sendRequest(c,d,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await i.add(l)})),yield c;this.log("found %d peers close to %b",i.length,e);for(let c of i.peers)yield U1({from:this.peerId,peer:c},t)}async*getValueOrPeers(e,t,n={}){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let i="invalid record received, discarded";this.log(i),yield gr({from:o.from,error:new g(i,"ERR_INVALID_RECORD")},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new g("invalid record received","ERR_INVALID_RECORD");await Mi(this.validators,new vt(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await Po(e),o=this.routingTable.closestPeers(n),s=[];for(let i of o)if(!i.equals(t))try{let a=await this.peerStore.get(i);s.push({id:i,multiaddrs:a.addresses.map(({multiaddr:c})=>c)})}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}return s.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",s.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),s}};var l9=Xe(n0(),1);var q1=class{log;datastore;cache;cleanupInterval;provideValidity;syncQueue;started;cleaner;constructor(e,t={}){let{cacheSize:n,cleanupInterval:o,provideValidity:s}=t;this.log=e.logger.forComponent("libp2p:kad-dht:providers"),this.datastore=e.datastore,this.cleanupInterval=o??36e5,this.provideValidity=s??864e5,this.cache=(0,l9.default)(n??256),this.syncQueue=new Tr({concurrency:1}),this.started=!1}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cleaner=setInterval(()=>{this._cleanup().catch(e=>{this.log.error(e)})},this.cleanupInterval))}async stop(){this.started=!1,this.cleaner!=null&&(clearInterval(this.cleaner),this.cleaner=void 0)}async _cleanup(){await this.syncQueue.add(async()=>{let e=Date.now(),t=0,n=0,o=new Map,s=this.datastore.batch(),i=this.datastore.query({prefix:dp});for await(let a of i)try{let{cid:c,peerId:l}=u9(a.key),d=d9(a.value).getTime(),u=Date.now(),h=u-d,f=h>this.provideValidity;if(this.log("comparing: %d - %d = %d > %d %s",u,d,h,this.provideValidity,f?"(expired)":""),f){n++,s.delete(a.key);let p=o.get(c)??new Set;p.add(l),o.set(c,p)}t++}catch(c){this.log.error(c.message)}o.size>0?(this.log("deleting %d / %d entries",n,t),await s.commit()):this.log("nothing to delete");for(let[a,c]of o){let l=oc(a),d=this.cache.get(l);if(d!=null){for(let u of c)d.delete(u);d.size===0?this.cache.remove(l):this.cache.set(l,d)}}this.log("Cleanup successful (%dms)",Date.now()-e)})}async _getProvidersMap(e){let t=oc(e),n=this.cache.get(t);return n==null&&(n=await CA(this.datastore,e),this.cache.set(t,n)),n}async addProvider(e,t){await this.syncQueue.add(async()=>{this.log("%p provides %s",t,e);let n=await this._getProvidersMap(e);this.log("loaded %s provs",n.size);let o=new Date;n.set(t.toString(),o);let s=oc(e);this.cache.set(s,n),await TA(this.datastore,e,t,o)})}async getProviders(e){return this.syncQueue.add(async()=>(this.log("get providers for %s",e),[...(await this._getProvidersMap(e)).keys()].map(n=>me(n))),{throwOnTimeout:!0})}};function oc(r){let e=typeof r=="string"?r:B(r.multihash.bytes,"base32");return`${dp}/${e}`}async function TA(r,e,t,n){let o=[oc(e),"/",t.toString()].join(""),s=new Ne(o),i=Ve(n.getTime());await r.put(s,i)}function u9(r){let e=r.toString().split("/");if(e.length!==5)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:e[3],peerId:e[4]}}async function CA(r,e){let t=new Map,n=r.query({prefix:oc(e)});for await(let o of n){let{peerId:s}=u9(o.key);t.set(s,d9(o.value))}return t}function d9(r){return new Date(Lt(r))}async function*f9(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:s,alpha:i,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:d,peersSeen:u,connectionManager:h}=r,f=new rr({concurrency:i,sort:(y,w)=>Fi(y.options.distance,w.options.distance)}),p=await Po(e);function m(y,w){if(y==null)return;u.add(y);let b=rn(w,p);f.add(async()=>{let E=[o];l!=null&&E.push(AbortSignal.timeout(l));let x=_e(E);K(1/0,x);try{for await(let _ of s({key:e,peer:y,signal:x,pathIndex:a,numPaths:c})){if(x.aborted)return;if(_.name==="PEER_RESPONSE")for(let I of _.closer){if(u.has(I.id)){d("already seen %p in query",I.id);continue}if(n.equals(I.id)){d("not querying ourselves");continue}if(!await h.isDialable(I.multiaddrs)){d("not querying undialable peer");continue}let A=await Br(I.id),R=rn(A,p);if(Fi(R,b)!==-1){d("skipping %p as they are not closer to %b than %p",I.id,e,y);continue}d("querying closer peer %p",I.id),m(I.id,A)}f.safeDispatchEvent("completed",{detail:_})}}catch(_){if(!o.aborted)return gr({from:y,error:_},r)}finally{x.clear()}},{distance:b}).catch(E=>{d.error(E)})}m(t,await Br(t));try{for await(let y of f.toGenerator({signal:o}))y!=null&&(yield y)}catch(y){throw o.aborted?new g("Query aborted","ERR_QUERY_ABORTED"):y}}var G1=class{disjointPaths;alpha;shutDownController;running;queries;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;metrics;constructor(e,t){let{disjointPaths:n=20,alpha:o=3,logPrefix:s}=t;this.logPrefix=s,this.disjointPaths=n??20,this.running=!1,this.alpha=o??3,this.queries=0,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,e.metrics!=null&&(this.metrics={runningQueries:e.metrics.registerMetric(`${s.replaceAll(":","_")}_running_queries`),queryTime:e.metrics.registerMetric(`${s.replaceAll(":","_")}_query_time_seconds`)}),this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal)}isStarted(){return this.running}async start(){this.running=!0,this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");let o=this.metrics?.queryTime.timer();if(n.signal==null){let d=AbortSignal.timeout(18e4);K(1/0,d),n={...n,signal:d}}let s=new AbortController,i=_e([this.shutDownController.signal,s.signal,n.signal]);K(1/0,i,s.signal);let a=this.logger.forComponent(`${this.logPrefix}:query:`+B(e,"base58btc")),c=Date.now(),l=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(a("waiting for initial query-self query before continuing"),await ke(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),a("query:start"),this.queries++,this.metrics?.runningQueries.update(this.queries);let d=await Po(e),u=this.routingTable.closestPeers(d),h=u.slice(0,Math.min(this.disjointPaths,u.length));if(u.length===0){a.error("Running query with no peers");return}let f=new kt,p=h.map((m,y)=>f9({key:e,startingPeer:m,ourPeerId:this.peerId,signal:i,query:t,pathIndex:y,numPaths:h.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:a,peersSeen:f,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let m of Ot(...p)){if(m.name==="QUERY_ERROR"&&a.error("query error",m.error),m.name==="PEER_RESPONSE")for(let y of[...m.closer,...m.providers])await this.connectionManager.isDialable(y.multiaddrs)&&await this.routingTable.add(y.id);yield m}l=!0}catch(d){if(!(!this.running&&d.code==="ERR_QUERY_ABORTED"))throw d}finally{l||(a("query exited early"),s.abort()),i.clear(),this.queries--,this.metrics?.runningQueries.update(this.queries),o?.(),a("query:done in %dms",Date.now()-c)}}};function kA(r){return r[Symbol.asyncIterator]!=null}function DA(r){if(kA(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var W1=DA;var NA=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function PA(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=NA(r),u=(...f)=>{let p=t.multiArgs?f:f[0];t.filter&&!t.filter(p)||(c.push(p),t.count===c.length&&(n(),s(c)))},h=f=>{n(),i(f)};n=()=>{for(let f of a)d(f,u);for(let f of t.rejectionEvents)d(f,h)};for(let f of a)l(f,u);for(let f of t.rejectionEvents)l(f,h);t.signal&&t.signal.addEventListener("abort",()=>{h(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=Zr(o,{milliseconds:t.timeout});return s.cancel=n,s}return o}function sc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=PA(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var z1=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;started;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){let{peerRouting:n,logPrefix:o,count:s,interval:i,queryTimeout:a,routingTable:c}=t;this.peerId=e.peerId,this.log=e.logger.forComponent(`${o}:query-self`),this.started=!1,this.peerRouting=n,this.routingTable=c,this.count=s??20,this.interval=i??3e5,this.initialInterval=t.initialInterval??1e3,this.queryTimeout=a??5e3,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun}isStarted(){return this.started}start(){this.started||(this.started=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.started=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.started){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=ee(),this.started){this.controller=new AbortController;let e=AbortSignal.timeout(this.queryTimeout),t=_e([this.controller.signal,e]);K(1/0,t,this.controller.signal,e);try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await sc(this.routingTable,"peer:add",{signal:t})),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Qe(this.peerRouting.getClosestPeers(this.peerId.toBytes(),{signal:t,isSelfQuery:!0}),s=>jn(s,this.count),async s=>W1(s));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.started&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};function LA(r,e){if(r===e)return!0;if(r.length!==e.length)return!1;for(let t=0,n=r.length;t<n;++t)if(r[t]!==e[t])return!1;return!0}function p9(r,e){if(!(e instanceof Uint8Array))throw new TypeError(r+" is not a Uint8Array");if(e.byteLength!==32)throw new TypeError(r+" had incorrect length")}function ic(r){return Array.isArray(r?.peers)}var Y1=class extends ge{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;constructor(e){super(),this.localPeer=e.localPeer,this.prefixLength=e.prefixLength,this.kBucketSize=e.kBucketSize??ac,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfNodesToPing??3,p9("options.localPeer.kadId",e.localPeer.kadId),this.root={prefix:"",depth:0,peers:[]}}add(e){p9("peer.kadId",e?.kadId);let t=this._determineBucket(e.kadId);if(!(this._indexOf(t,e.kadId)>-1)){if(t.peers.length===this.splitThreshold&&t.depth<this.prefixLength){this._split(t),this.add(e);return}if(t.peers.length<this.kBucketSize){t.peers.push(e),this.safeDispatchEvent("added",{detail:e});return}this.safeDispatchEvent("ping",{detail:{oldContacts:t.peers.slice(0,this.numberOfNodesToPing),newContact:e}})}}*closest(e,t=this.kBucketSize){let n=new Vi(e,t);for(let o of this.toIterable())n.addWitKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Gt(n.peers,o=>o.id)}count(){function e(t){if(ic(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];this.safeDispatchEvent("removed",{detail:o})}}*toIterable(){function*e(t){if(ic(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+B(rn(e,t),"base16"))}_determineBucket(e){let n=B(e,"base2").substring(0,this.prefixLength);function o(s,i=0){return ic(s)?s:n[i]==="0"?o(s.left,i+1):o(s.right,i+1)}return o(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>LA(n.kadId,t))}_split(e){let t=e.depth+1,n={prefix:"0",depth:t,peers:[]},o={prefix:"1",depth:t,peers:[]};for(let s of e.peers)B(s.kadId,"base2")[t]==="0"?n.peers.push(s):o.peers.push(s);delete e.peers,e.left=n,e.right=o}};var OA="kad-close",BA=50,ac=20,MA=32,UA=1e4,FA=10,X1=class extends ge{kBucketSize;kb;pingQueue;log;components;prefixLength;splitThreshold;pingTimeout;pingConcurrency;running;protocol;tagName;tagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??ac,this.pingTimeout=t.pingTimeout??UA,this.pingConcurrency=t.pingConcurrency??FA,this.running=!1,this.protocol=t.protocol,this.tagName=t.tagName??OA,this.tagValue=t.tagValue??BA,this.prefixLength=t.prefixLength??MA,this.splitThreshold=t.splitThreshold??ac,this.pingQueue=new Kt({concurrency:this.pingConcurrency,metricName:`${t.logPrefix.replaceAll(":","_")}_ping_queue`,metrics:this.components.metrics}),this.pingQueue.addEventListener("error",n=>{this.log.error("error pinging peer",n.detail)}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_max_depth`)})}isStarted(){return this.running}async start(){this.running=!0;let e=new Y1({localPeer:{kadId:await Br(this.components.peerId),peerId:this.components.peerId},kBucketSize:this.kBucketSize,prefixLength:this.prefixLength,splitThreshold:this.splitThreshold,numberOfNodesToPing:1});this.kb=e,e.addEventListener("ping",n=>{this._onPing(n).catch(o=>{this.log.error("could not process k-bucket ping event",o)})});let t=0;for(let n of await this.components.peerStore.all())if(n.protocols.includes(this.protocol)){let o=await Br(n.id);this.kb.add({kadId:o,peerId:n.id}),t++}this.log("added %d peer store peers to the routing table",t),this._tagPeers(e)}async stop(){this.running=!1,this.pingQueue.clear(),this.kb=void 0}_tagPeers(e){let t=new kt,n=s9(()=>{let o=new kt(e.closest(e.localPeer.kadId,ac)),s=o.difference(t),i=t.difference(o);Promise.resolve().then(async()=>{for(let a of s)await this.components.peerStore.merge(a,{tags:{[this.tagName]:{value:this.tagValue}}});for(let a of i)await this.components.peerStore.merge(a,{tags:{[this.tagName]:void 0}})}).catch(a=>{this.log.error("Could not update peer tags",a)}),t=o});e.addEventListener("added",o=>{n(),this.safeDispatchEvent("peer:add",{detail:o.detail.peerId})}),e.addEventListener("removed",o=>{n(),this.safeDispatchEvent("peer:remove",{detail:o.detail.peerId})})}async _onPing(e){if(!this.running)return;let{oldContacts:t,newContact:n}=e.detail,s=(await Promise.all(t.map(async i=>{let a=this.pingQueue.find(i.peerId);return a!=null?a.join():this.pingQueue.add(async()=>{let c;try{let l={signal:AbortSignal.timeout(this.pingTimeout)};this.log("pinging old contact %p",i.peerId),c=await(await this.components.connectionManager.openConnection(i.peerId,l)).newStream(this.protocol,l);let u=ze(c);await u.write({type:be.PING},Or,l);let h=await u.read(Or,l);if(await u.unwrap().close(),h.type!==be.PING)throw new g(`Incorrect message type received, expected PING got ${h.type}`,"ERR_BAD_PING_RESPONSE");return!0}catch(l){return this.running&&this.kb!=null&&(this.log.error("could not ping peer %p",i.peerId,l),this.log("evicting old contact after ping failed %p",i.peerId),this.kb.remove(i.kadId)),c?.abort(l),!1}finally{this.metrics?.routingTableSize.update(this.size)}},{peerId:i.peerId})}))).filter(i=>i).length;this.running&&s<t.length&&this.kb!=null&&(this.log("adding new contact %p",n.peerId),this.kb.add(n))}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await Br(e);return this.kb?.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await Br(e);this.kb.add({kadId:t,peerId:e}),this.log("added %p with kad id %b",e,t),this.updateMetrics()}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await Br(e);this.kb.remove(t),this.updateMetrics()}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0;function o(s){if(ic(s)){s.depth>n&&(n=s.depth),t++,e+=s.peers.length;return}o(s.left),o(s.right)}o(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var m9=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var Q1=15,Z1=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:s,refreshQueryTimeout:i,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=s??3e5,this.refreshQueryTimeout=i??3e4,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,s)=>{try{if(await this._refreshCommonPrefixLength(s,o,e),this._numPeersForCpl(t)===0){let i=Math.min(2*(s+1),n.length-1);for(let a=s+1;a<i+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(i){this.log.error(i)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let s=AbortSignal.timeout(this.refreshQueryTimeout);K(1/0,s);let i=await W1(this.peerRouting.getClosestPeers(o.toBytes(),{signal:s}));this.log(`found ${i} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>Q1&&(e=Q1);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");let t=it(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e);return je(o)}async _makePeerId(e,t,n){if(n>Q1)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Q1}`);let i=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=i&a|t&~a,l=m9[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,De.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=rn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var j1=class{providers;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.providers=t.providers}async handle(e,t){if(this.log("start"),t.key==null||t.key.length===0)throw new g("Missing key","ERR_MISSING_KEY");let n;try{n=ue.decode(t.key)}catch{throw new g("Invalid CID","ERR_INVALID_CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),await Promise.all(t.providers.map(async o=>{if(!e.equals(o.id)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log("received provider %p for %s (addrs %s)",e,n,o.multiaddrs.map(s=>j(s).toString())),await this.providers.addProvider(n,je(o.id))}))}};var J1=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new g("Invalid FIND_NODE message received - key was missing","ERR_INVALID_MESSAGE");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);J(this.peerId.toBytes(),t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(te("p2p").code))});let o={type:be.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:s})=>s.length).map(s=>({id:s.id.toBytes(),multiaddrs:s.multiaddrs.map(i=>i.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var ed=class{peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:s}=t;this.log=e.logger.forComponent(`${s}:rpc:handlers:get-providers`),this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new g("Invalid GET_PROVIDERS message received - key was missing","ERR_INVALID_MESSAGE");let n;try{n=ue.decode(t.key)}catch{throw new g("Invalid CID","ERR_INVALID_CID")}this.log("%p asking for providers for %s",e,n);let[o,s]=await Promise.all([this.providers.getProviders(n),this.peerRouting.getCloserPeersOffline(t.key,e)]),i=await this._getPeers(o),a=await this._getPeers(s.map(({id:l})=>l)),c={type:be.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:a.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)})),providers:i.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)}))};return this.log("got %s providers %s closerPeers",c.providers.length,c.closer.length),c}async _getAddresses(e){return[]}async _getPeers(e){let t=[];for(let n of e)try{let o=await this.peerStore.get(n),s=this.peerInfoMapper({id:n,multiaddrs:o.addresses.map(({multiaddr:i})=>i)});s.multiaddrs.length>0&&t.push(s)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}return t}};var td=class{peerStore;datastore;peerRouting;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new g("Invalid key","ERR_INVALID_KEY");let o={type:be.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(n9(n)){this.log("is public key");let a=o9(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new g("No public key found in key book","ERR_NOT_FOUND");c=l.id.publicKey}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}if(c!=null)return this.log("returning found public key"),o.record=new vt(n,c,new Date).serialize(),o}let[s,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return s!=null&&(this.log("had record for %b in local datastore",n),o.record=s.serialize()),i.length>0&&(this.log("had %s closer peers in routing table",i.length),o.closer=i.map(a=>({id:a.id.toBytes(),multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Lo(e),n;try{n=await this.datastore.get(t)}catch(s){if(s.code==="ERR_NOT_FOUND")return;throw s}let o=vt.deserialize(n);if(o==null)throw new g("Invalid record","ERR_INVALID_RECORD");if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>1296e5){await this.datastore.delete(t);return}return o}};var rd=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var nd=class{components;validators;log;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new g(o,"ERR_EMPTY_RECORD")}try{let o=vt.deserialize(t.record);await Mi(this.validators,o),o.timeReceived=new Date;let s=Lo(o.key);await this.components.datastore.put(s,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,s)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var od=class{handlers;routingTable;log;constructor(e,t){let{providers:n,peerRouting:o,validators:s,logPrefix:i,peerInfoMapper:a}=t;this.log=e.logger.forComponent(`${i}:rpc`),this.routingTable=t.routingTable,this.handlers={[be.GET_VALUE.toString()]:new td(e,{peerRouting:o,logPrefix:i}),[be.PUT_VALUE.toString()]:new nd(e,{validators:s,logPrefix:i}),[be.FIND_NODE.toString()]:new J1(e,{peerRouting:o,logPrefix:i,peerInfoMapper:a}),[be.ADD_PROVIDER.toString()]:new j1(e,{providers:n,logPrefix:i}),[be.GET_PROVIDERS.toString()]:new ed(e,{peerRouting:o,providers:n,logPrefix:i,peerInfoMapper:a}),[be.PING.toString()]:new rd(e,{logPrefix:i})}}async handleMessage(e,t){try{await this.routingTable.add(e)}catch(o){this.log.error("Failed to update the kbucket store",o)}let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}return n.handle(e,t)}onIncomingStream(e){Promise.resolve().then(async()=>{let{stream:t,connection:n}=e,o=n.remotePeer;try{await this.routingTable.add(o)}catch(i){this.log.error(i)}let s=this;await Qe(t,i=>qt(i),async function*(i){for await(let a of i){let c=Or.decode(a);s.log("incoming %s from %p",c.type,o);let l=await s.handleMessage(o,c);l!=null&&(yield Or.encode(l))}},i=>Ht(i),t)}).catch(t=>{this.log.error(t)})}};var sd=class extends ge{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new Pt("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var wp=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await $t(this.dht.provide(e,t))}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await $t(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new g("Not found","ERR_NOT_FOUND")}},Ep=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new g("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},VA=32,KA=64,id=class extends ge{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;constructor(e,t={}){super();let{kBucketSize:n,clientMode:o,validators:s,selectors:i,querySelfInterval:a,protocol:c,logPrefix:l,pingTimeout:d,pingConcurrency:u,maxInboundStreams:h,maxOutboundStreams:f,providers:p}=t,m=l??"libp2p:kad-dht";this.running=!1,this.components=e,this.log=e.logger.forComponent(m),this.protocol=c??z7,this.kBucketSize=n??20,this.clientMode=o??!0,this.maxInboundStreams=h??VA,this.maxOutboundStreams=f??KA,this.peerInfoMapper=t.peerInfoMapper??t9,this.routingTable=new X1(e,{kBucketSize:n,pingTimeout:d,pingConcurrency:u,protocol:this.protocol,logPrefix:m}),this.providers=new q1(e,p??{}),this.validators={...e9,...s},this.selectors={...J7,...i},this.network=new $1(e,{protocol:this.protocol,logPrefix:m});let y=ee();t.allowQueryWithZeroPeers===!0&&y.resolve(),this.queryManager=new G1(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:m,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.peerRouting=new H1(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:m}),this.contentFetching=new F1(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:m}),this.contentRouting=new V1(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:m}),this.routingTableRefresh=new Z1(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:m}),this.rpc=new od(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:m,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new sd(e,{protocol:this.protocol,logPrefix:m}),this.querySelf=new z1(e,{peerRouting:this.peerRouting,interval:a,initialInterval:t.initialQuerySelfInterval,logPrefix:m,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.network.addEventListener("peer",w=>{let b=w.detail;this.onPeerConnect(b).catch(E=>{this.log.error("could not add %p to routing table",b.id,E)}),this.dispatchEvent(new Pt("peer",{detail:b}))}),this.topologyListener.addEventListener("peer",w=>{let b=w.detail;Promise.resolve().then(async()=>{let E=await this.components.peerStore.get(b),x={id:b,multiaddrs:E.addresses.map(({multiaddr:_})=>_),protocols:E.protocols};await this.onPeerConnect(x)}).catch(E=>{this.log.error("could not add %p to routing table",b,E)})}),this.dhtPeerRouting=new Ep(this),this.dhtContentRouting=new wp(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",w=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let b=w.detail.peer.addresses.some(({multiaddr:x})=>i9(x)),E=this.getMode();b&&E==="client"?await this.setMode("server"):E==="server"&&!b&&await this.setMode("client")}).catch(b=>{this.log.error("error setting dht server mode",b)})})}[Symbol.toStringTag]="@libp2p/kad-dht";[Be]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[Mr]=["@libp2p/identify"];get[an](){return this.dhtContentRouting}get[cn](){return this.dhtPeerRouting}get[Vo](){return this}async onPeerConnect(e){if(this.log("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e){await this.components.registrar.unhandle(this.protocol),e==="client"?(this.log("enabling client mode"),this.clientMode=!0):(this.log("enabling server mode"),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running=!0,await this.setMode(this.clientMode?"client":"server"),await wr(this.querySelf,this.providers,this.queryManager,this.network,this.routingTable,this.topologyListener,this.routingTableRefresh)}async stop(){this.running=!1,await Er(this.querySelf,this.providers,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var g9;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER"})(g9||(g9={}));function y9(r={}){return e=>new id(e,r)}var A9=Xe(R9(),1),Hi=A9.default;var B9=Xe(O9(),1);var xe;(function(r){r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH"})(xe||(xe={}));var sI="/pkcs8/",M9="/info/",Ss=new WeakMap,Rs={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},xp={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function Yn(r){return r==null||typeof r!="string"?!1:r===(0,B9.default)(r.trim())&&r.length>0}async function Le(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function bn(r){return new Ne(sI+r)}function Oo(r){return new Ne(M9+r)}var ld=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=Hi(xp,t),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Rs.minKeyLength)throw new Error(`dek.keyLength must be least ${Rs.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Rs.minSaltLength)throw new Error(`dek.saltLength must be least ${Rs.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Rs.minIterationCount)throw new Error(`dek.iterationCount must be least ${Rs.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?ba(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Ss.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Be]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},xp),t=Math.ceil(Rs.minSaltLength/3)*3;return e.dek.salt=B(it(t),"base64"),e}static get options(){return xp}async createKey(e,t,n=2048){if(!Yn(e)||e==="self")throw await Le(),new g("Invalid key name",xe.ERR_INVALID_KEY_NAME);if(typeof t!="string")throw await Le(),new g("Invalid key type",xe.ERR_INVALID_KEY_TYPE);let o=bn(e);if(await this.components.datastore.has(o))throw await Le(),new g("Key name already exists",xe.ERR_KEY_ALREADY_EXISTS);switch(t.toLowerCase()){case"rsa":if(!Number.isSafeInteger(n)||n<2048)throw await Le(),new g("Invalid RSA key size",xe.ERR_INVALID_KEY_SIZE);break;default:break}let i;try{let a=await wa(t,n),c=await a.id(),l=Ss.get(this);if(l==null)throw new g("dek missing",xe.ERR_INVALID_PARAMETERS);let d=l.dek,u=await a.export(d);i={name:e,id:c};let h=this.components.datastore.batch();h.put(o,L(u)),h.put(Oo(e),L(JSON.stringify(i))),await h.commit()}catch(a){throw await Le(),a}return i}async listKeys(){let e={prefix:M9},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(B(n.value)));return t}async findKeyById(e){try{let n=(await this.listKeys()).find(o=>o.id===e);if(n==null)throw new g(`Key with id '${e}' does not exist.`,xe.ERR_KEY_NOT_FOUND);return n}catch(t){throw await Le(),t}}async findKeyByName(e){if(!Yn(e))throw await Le(),new g(`Invalid key name '${e}'`,xe.ERR_INVALID_KEY_NAME);let t=Oo(e);try{let n=await this.components.datastore.get(t);return JSON.parse(B(n))}catch(n){throw await Le(),this.log.error(n),new g(`Key '${e}' does not exist.`,xe.ERR_KEY_NOT_FOUND)}}async removeKey(e){if(!Yn(e)||e==="self")throw await Le(),new g(`Invalid key name '${e}'`,xe.ERR_INVALID_KEY_NAME);let t=bn(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Oo(e)),await o.commit(),n}async renameKey(e,t){if(!Yn(e)||e==="self")throw await Le(),new g(`Invalid old key name '${e}'`,xe.ERR_OLD_KEY_NAME_INVALID);if(!Yn(t)||t==="self")throw await Le(),new g(`Invalid new key name '${t}'`,xe.ERR_NEW_KEY_NAME_INVALID);let n=bn(e),o=bn(t),s=Oo(e),i=Oo(t);if(await this.components.datastore.has(o))throw await Le(),new g(`Key '${t}' already exists`,xe.ERR_KEY_ALREADY_EXISTS);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(B(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,L(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await Le(),c}}async exportKey(e,t){if(!Yn(e))throw await Le(),new g(`Invalid key name '${e}'`,xe.ERR_INVALID_KEY_NAME);if(t==null)throw await Le(),new g("Password is required",xe.ERR_PASSWORD_REQUIRED);let n=bn(e);try{let o=await this.components.datastore.get(n),s=B(o),i=Ss.get(this);if(i==null)throw new g("dek missing",xe.ERR_INVALID_PARAMETERS);let a=i.dek;return await(await oi(s,a)).export(t)}catch(o){throw await Le(),o}}async exportPeerId(e){let t="temporary-password",n=await this.exportKey(e,t),o=await oi(n,t);return dt(o.public.bytes,o.bytes)}async importKey(e,t,n){if(!Yn(e)||e==="self")throw await Le(),new g(`Invalid key name '${e}'`,xe.ERR_INVALID_KEY_NAME);if(t==null)throw await Le(),new g("PEM encoded key is required",xe.ERR_PEM_REQUIRED);let o=bn(e);if(await this.components.datastore.has(o))throw await Le(),new g(`Key '${e}' already exists`,xe.ERR_KEY_ALREADY_EXISTS);let i;try{i=await oi(t,n)}catch{throw await Le(),new g("Cannot read the key, most likely the password is wrong",xe.ERR_CANNOT_READ_KEY)}let a;try{a=await i.id();let d=Ss.get(this);if(d==null)throw new g("dek missing",xe.ERR_INVALID_PARAMETERS);let u=d.dek;t=await i.export(u)}catch(d){throw await Le(),d}let c={name:e,id:a},l=this.components.datastore.batch();return l.put(o,L(t)),l.put(Oo(e),L(JSON.stringify(c))),await l.commit(),c}async importPeer(e,t){try{if(!Yn(e))throw new g(`Invalid key name '${e}'`,xe.ERR_INVALID_KEY_NAME);if(t==null)throw new g("PeerId is required",xe.ERR_MISSING_PRIVATE_KEY);if(t.privateKey==null)throw new g("PeerId.privKey is required",xe.ERR_MISSING_PRIVATE_KEY);let n=await Ir(t.privateKey),o=bn(e);if(await this.components.datastore.has(o))throw await Le(),new g(`Key '${e}' already exists`,xe.ERR_KEY_ALREADY_EXISTS);let i=Ss.get(this);if(i==null)throw new g("dek missing",xe.ERR_INVALID_PARAMETERS);let a=i.dek,c=await n.export(a),l={name:e,id:t.toString()},d=this.components.datastore.batch();return d.put(o,L(c)),d.put(Oo(e),L(JSON.stringify(l))),await d.commit(),l}catch(n){throw await Le(),n}}async getPrivateKey(e){if(!Yn(e))throw await Le(),new g(`Invalid key name '${e}'`,xe.ERR_INVALID_KEY_NAME);try{let t=bn(e),n=await this.components.datastore.get(t);return B(n)}catch(t){throw await Le(),this.log.error(t),new g(`Key '${e}' does not exist.`,xe.ERR_KEY_NOT_FOUND)}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await Le(),new g(`Invalid old pass type '${typeof e}'`,xe.ERR_INVALID_OLD_PASS_TYPE);if(typeof t!="string")throw await Le(),new g(`Invalid new pass type '${typeof t}'`,xe.ERR_INVALID_NEW_PASS_TYPE);if(t.length<20)throw await Le(),new g(`Invalid pass length ${t.length}`,xe.ERR_INVALID_PASS_LENGTH);this.log("recreating keychain");let n=Ss.get(this);if(n==null)throw new g("dek missing",xe.ERR_INVALID_PARAMETERS);let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?ba(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Ss.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(bn(a.name)),l=B(c),d=await oi(l,o),u=s.toString(),h=await d.export(u),f=this.components.datastore.batch(),p={name:a.name,id:a.id};f.put(bn(a.name),L(h)),f.put(Oo(a.name),L(JSON.stringify(p))),await f.commit()}this.log("keychain reconstructed")}};function ud(r={}){return e=>new ld(e,r)}var qi=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new _p}async consume(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);if(i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i.consumedPoints>this.points)throw this.blockDuration>0&&i.consumedPoints<=this.points+t&&(i=this.memoryStorage.set(o,i.consumedPoints,this.blockDuration)),new g("Rate limit exceeded","ERR_RATE_LIMIT_EXCEEDED",i);if(this.execEvenly&&i.msBeforeNext>0&&!i.isFirstInDuration){let a=Math.ceil(i.msBeforeNext/(i.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=i.consumedPoints*this.execEvenlyMinDelayMs),await T1(a)}return i}penalty(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}reward(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,-t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},_p=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let s=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||s>0?(o.value+=t,{remainingPoints:0,msBeforeNext:s,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,s=this.storage.get(e);s!=null&&clearTimeout(s.timeoutId);let i={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,i),o>0&&(i.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),i.timeoutId.unref!=null&&i.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:i.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var we;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(we||(we={}));var cc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),vp=Object.freeze({NEW_STREAM:we.NEW_STREAM,MESSAGE:we.MESSAGE_INITIATOR,CLOSE:we.CLOSE_INITIATOR,RESET:we.RESET_INITIATOR}),U9=Object.freeze({MESSAGE:we.MESSAGE_RECEIVER,CLOSE:we.CLOSE_RECEIVER,RESET:we.RESET_RECEIVER});var Sp=1<<20,iI=4<<20,dd=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=Sp,t=iI){this._buffer=new ce,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw Object.assign(new Error("unprocessed message queue size too large!"),{code:"ERR_MSG_QUEUE_TOO_BIG"});let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.code==="ERR_MSG_TOO_BIG")throw l;break}let{id:n,type:o,length:s,offset:i}=this._headerInfo;if(this._buffer.length-i<s)break;let c={id:n,type:o};(o===we.NEW_STREAM||o===we.MESSAGE_INITIATOR||o===we.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(i,i+s)),t.push(c),this._buffer.consume(i+s),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=V9(e),{value:o,offset:s}=V9(e,n),i=t&7;if(cc[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw Object.assign(new Error("message size too large!"),{code:"ERR_MSG_TOO_BIG"});return{id:t>>3,type:i,offset:n+s,length:o}}},aI=128,F9=127;function V9(r,e=0){let t=0,n=0,o=e,s,i=r.length;do{if(o>=i||n>49)throw e=0,new RangeError("Could not decode varint");s=r.get(o++),t+=n<28?(s&F9)<<n:(s&F9)*Math.pow(2,n),n+=7}while(s>=aI);return e=o-e,{value:t,offset:e}}var Rp=10*1024,Ap=class{_pool;_poolOffset;constructor(){this._pool=Ge(Rp),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ve(e.id<<3|e.type,n,o),o+=Se(e.id<<3|e.type),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null?(Ve(e.data.length,n,o),o+=Se(e.data.length)):(Ve(0,n,o),o+=Se(0));let s=n.subarray(this._poolOffset,o);Rp-o<100?(this._pool=Ge(Rp),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},cI=new Ap;async function*K9(r){for await(let e of r){let t=new ce;cI.write(e,t),yield t}}var Ip=class extends wn{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?vp:U9,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:vp.NEW_STREAM,data:new ce(L(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function $9(r){let{id:e,name:t,send:n,onEnd:o,type:s="initiator",maxMsgSize:i=Sp}=r;return new Ip({id:s==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:s==="initiator"?"outbound":"inbound",maxDataSize:i,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${s}:${e}`)})}var lI=1024,uI=1024,dI=1024*1024*4,fI=5,hI=500;function H9(r){let e={...r,type:`${cc[r.type]} (${r.type})`};return r.type===we.NEW_STREAM&&(e.data=B(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===we.MESSAGE_INITIATOR||r.type===we.MESSAGE_RECEIVER)&&(e.data=B(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var fd=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??hI,this.sink=this._createSink(),this._source=It({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=Qe(this._source,n=>K9(n)),this.closeController=new AbortController,this.rateLimiter=new qi({points:t.disconnectThreshold??fI,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new Error("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:s}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??uI))throw new g("Too many outbound streams open","ERR_TOO_MANY_OUTBOUND_STREAMS");if(s.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=$9({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,H9(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),s.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return s.set(t,c),c}_createSink(){return async t=>{let n=()=>{y1(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new dd(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let s of t)for(let i of o.write(s))await this._handleIncoming(i);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",H9(e)),e.type===we.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??lI)){this.log("too many inbound streams open"),this._source.push({id:t,type:we.RESET_RECEIVER});try{await this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}return}let a=this._newReceiverStream({id:t,name:B(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let s=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(s==null){this.log("missing stream %s for message type %s",t,cc[n]);try{await this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}let i=this._init.maxStreamBufferSize??dI;try{switch(n){case we.MESSAGE_INITIATOR:case we.MESSAGE_RECEIVER:if(s.sourceReadableLength()>i)throw this._source.push({id:e.id,type:n===we.MESSAGE_INITIATOR?we.RESET_RECEIVER:we.RESET_INITIATOR}),new g("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers","ERR_STREAM_INPUT_BUFFER_FULL");s.sourcePush(e.data);break;case we.CLOSE_INITIATOR:case we.CLOSE_RECEIVER:s.remoteCloseWrite();break;case we.RESET_INITIATOR:case we.RESET_RECEIVER:s.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),s.abort(a)}}};var Tp=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Be]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new fd(this.components,{...e,...this._init})}};function q9(r={}){return e=>new Tp(e,r)}var G9="1.0.0",W9="ping",z9="ipfs";var Cp="ERR_WRONG_PING_ACK";var hd=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnTransientConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??z9}/${W9}/${G9}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnTransientConnection=t.runOnTransientConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now();Qe(t,t).catch(o=>{this.log.error("incoming ping from %p failed with error",e.connection.remotePeer,o)}).finally(()=>{let o=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,o)})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=it(32),s=await this.components.connectionManager.openConnection(e,t),i,a=()=>{};if(t.signal==null){let c=AbortSignal.timeout(this.timeout);t={...t,signal:c}}try{i=await s.newStream(this.protocol,{...t,runOnTransientConnection:this.runOnTransientConnection}),a=()=>{i?.abort(new g("ping timeout",_n))},t.signal?.addEventListener("abort",a,{once:!0});let c=await Qe([o],i,async d=>ws(d)),l=Date.now()-n;if(c==null)throw new g(`Did not receive a ping ack after ${l}ms`,Cp);if(!J(o,c.subarray()))throw new g(`Received wrong ping ack after ${l}ms`,Cp);return this.log("ping %p complete in %dms",s.remotePeer,l),l}catch(c){throw this.log.error("error while pinging %p",s.remotePeer,c),i?.abort(c),c}finally{t.signal?.removeEventListener("abort",a),i!=null&&await i.close()}}};function Y9(r={}){return e=>new hd(e,r)}var yr;(function(r){r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_DATA_CHANNEL="ERR_DATA_CHANNEL",r.ERR_CONNECTION_CLOSED="ERR_CONNECTION_CLOSED",r.ERR_HASH_NOT_SUPPORTED="ERR_HASH_NOT_SUPPORTED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_INVALID_FINGERPRINT="ERR_INVALID_FINGERPRINT",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS"})(yr||(yr={}));var Bo=class extends g{constructor(e,t){super(`WebRTC transport error: ${e}`,t??""),this.name="WebRTCTransportError"}};var kp=class extends Bo{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`,yr.ERR_DATA_CHANNEL),this.name="WebRTC/DataChannelError"}};function Bp(r,e){return new kp(r,e)}var Dp=class extends Bo{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`,yr.ERR_INVALID_MULTIADDR),this.name="WebRTC/InappropriateMultiaddrError"}};function pd(r){return new Dp(r)}var Np=class extends Bo{constructor(e){super(`There was a problem with a provided argument: ${e}`,yr.ERR_INVALID_PARAMETERS),this.name="WebRTC/InvalidArgumentError"}};function lc(r){return new Np(r)}var Pp=class extends Bo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`,yr.ERR_INVALID_FINGERPRINT),this.name="WebRTC/InvalidFingerprintError"}};function Mp(r,e){return new Pp(r,e)}var Lp=class extends Bo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`,yr.ERR_NOT_IMPLEMENTED),this.name="WebRTC/UnimplementedError"}};function X9(r){return new Lp(r)}var Op=class extends Bo{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `,yr.ERR_HASH_NOT_SUPPORTED),this.name="WebRTC/UnsupportedHashAlgorithmError"}};function Q9(r){return new Op(r)}var Z9=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,s;n<o;n++)(s||!(n in e))&&(s||(s=Array.prototype.slice.call(e,0,n)),s[n]=e[n]);return r.concat(s||Array.prototype.slice.call(e))},wI=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var EI=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var bI=function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r}();var xI=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var _I=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var vI=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,SI=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,j9=3,RI=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",vI]],J9=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function ty(r){return r?ey(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new _I:typeof navigator<"u"?ey(navigator.userAgent):TI()}function AI(r){return r!==""&&RI.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var s=o.exec(r);return!!s&&[n,s]},!1)}function ey(r){var e=AI(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new xI;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<j9&&(o=Z9(Z9([],o,!0),CI(j9-o.length),!0)):o=[];var s=o.join("."),i=II(r),a=SI.exec(r);return a&&a[1]?new bI(t,s,i,a[1]):new wI(t,s,i)}function II(r){for(var e=0,t=J9.length;e<t;e++){var n=J9[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function TI(){var r=typeof process<"u"&&process.version;return r?new EI(process.version.slice(1)):null}function CI(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var ry=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"];var ny=ty(),uc=ny!=null&&ny.name==="firefox",md=async function*(){},gd=async r=>{},kI=30*1e3;function oy(r,e,t=kI,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=ee(),s=!1;r.bufferedAmountLowThreshold=0;let i=()=>{s||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",i,{once:!0}),r.addEventListener("bufferedamountlow",()=>{s=!0,r.removeEventListener("close",i),o.resolve()}),await Zr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function dc(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??ry.map(e=>({urls:[e]})),r}var As=class{log;peerConnection;remoteAddr;timeline;metrics;source=md();sink=gd;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",this.peerConnection.connectionState,"initial state",n),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var Jt;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.flag!=null&&(s.uint32(8),r.Flag.codec().encode(o.flag,s)),o.message!=null&&(s.uint32(18),s.bytes(o.message)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.flag=r.Flag.codec().decode(o);break;case 2:i.message=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ne(o,r.codec()),r.decode=o=>re(o,r.codec())})(Jt||(Jt={}));var DI=2*1024*1024,NI=30*1e3,PI=7,LI=2,OI=256*1024,BI=5e3,MI=5e3,Up=class extends wn{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await Zr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(s){this.log.error("error receiving FIN_ACK",s)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(s=>{this.log.error("error ending stream",s)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=It(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??NI,this.maxBufferedAmount=e.maxBufferedAmount??DI,this.maxMessageSize=(e.maxMessageSize??OI)-PI-LI,this.receiveFinAck=ee(),this.finAckTimeout=e.closeTimeout??BI,this.openTimeout=e.openTimeout??MI,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new g("Unknown datachannel state","ERR_INVALID_STATE")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.receiveFinAck.resolve(),this.close().catch(s=>{this.log.error("error closing stream after channel closed",s)})},this.channel.onerror=o=>{let s=o.error;this.abort(s)},this.channel.onmessage=async o=>{let{data:s}=o;s===null||s.byteLength===0||this.incomingData.push(new Uint8Array(s,0,s.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of qt(this.incomingData)){let s=n.processIncomingProtobuf(o);s!=null&&n.sourcePush(new ce(s))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(t&&this.channel.bufferedAmount>this.maxBufferedAmount)try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await sc(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof bo?new g(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`,"ERR_BUFFER_CLEAR_TIMEOUT"):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new g(`Invalid datachannel state - ${this.channel.readyState}`,"ERR_INVALID_STATE");this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await sc(this.channel,"open",{timeout:this.openTimeout}),this.log('channel state is now "%s", sending data',this.channel.readyState)),this.channel.send(e.subarray())}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=Jt.encode({message:n}),s=Ht.single(o);await this._sendMessage(s),e.consume(t)}}async sendReset(){await this._sendFlag(Jt.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag(Jt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await ke(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorCode:"ERR_FIN_ACK_NOT_RECEIVED"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){await this._sendFlag(Jt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Jt.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Jt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Jt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Jt.Flag.RESET&&this.reset(),t.flag===Jt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Jt.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',this.channel.readyState,e.toString()),!1;this.log.trace("sending flag %s",e.toString());let t=Jt.encode({flag:e}),n=Ht.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s",e.toString(),o)}return!1}};function Gi(r){let{channel:e,direction:t}=r;return new Up({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var sy="/webrtc",Mo=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??sy,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:datachannelmuxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},s=Gi({channel:n,direction:"inbound",onEnd:i=>{o.onEnd(i)},logger:e.logger,...this.dataChannelOptions});o.stream=s,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(i=>i.stream.id!==s.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new Fp(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},Fp=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??sy,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=Gi({channel:n,direction:"inbound",onEnd:()=>{this.log("incoming channel %s ended with state %s",n.id,n.readyState),this.#e(o,n)},logger:this.logger,...this.dataChannelOptions});this.streams.push(o),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(o)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),oy(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=md();sink=gd;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=Gi({channel:e,direction:"outbound",onEnd:()=>{this.log("outgoing channel %s ended with state %s",e.id,e.readyState),this.#e(t,e)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(t),this.metrics?.increment({outgoing_stream:!0}),t}};var Is=globalThis.RTCPeerConnection,yd=globalThis.RTCSessionDescription,iy=globalThis.RTCIceCandidate;var er;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.data!=null&&(s.uint32(18),s.string(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.data=o.string();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ne(o,r.codec()),r.decode=o=>re(o,r.codec())})(er||(er={}));var wd=async(r,e,t)=>{try{let n=ee();for(FI(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal}).catch(()=>{})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==er.Type.ICE_CANDIDATE)throw new g("ICE candidate message expected","ERR_NOT_ICE_CANDIDATE");let s=JSON.parse(o.data??"null");if(s===""||s===null){t.onProgress?.(new q("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let i=new iy(s);t.log.trace("%s received new ICE candidate %o",t.direction,s);try{t.onProgress?.(new q("webrtc:add-ice-candidate",i.candidate)),await r.addIceCandidate(i)}catch(a){t.log.error("%s bad candidate received",t.direction,s,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0)throw n}};function UI(r){return uc?r.iceConnectionState:r.connectionState}function FI(r,e){r[uc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(UI(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new g("RTCPeerConnection was closed","ERR_CONNECTION_CLOSED_BEFORE_CONNECTED"));break;default:break}}}async function ay({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:s,transportManager:i,log:a,logger:c,onProgress:l}){let{baseAddr:d}=cy(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",d);let u=d.getPeerId();if(u==null)throw new g("Relay peer was missing","ERR_INVALID_ADDRESS");let h=s.getConnections(me(u)),f,p=!1;h.length===0?(l?.(new q("webrtc:dial-relay")),f=await i.dial(d,{signal:t,onProgress:l}),p=!0):(l?.(new q("webrtc:reuse-relay-connection")),f=h[0]);try{l?.(new q("webrtc:open-signaling-stream"));let m=await f.newStream(Ed,{signal:t,runOnTransientConnection:!0}),y=ze(m).pb(er),w=new Is(r),b=new Mo({logger:c},{peerConnection:w,dataChannelOptions:e});try{let E=w.createDataChannel("init");w.onicecandidate=({candidate:A})=>{let R=JSON.stringify(A?.toJSON()??null);a.trace("initiator sending ICE candidate %o",A),y.write({type:er.Type.ICE_CANDIDATE,data:R},{signal:t}).catch(k=>{a.error("error sending ICE candidate",k)})},w.onicecandidateerror=A=>{a.error("initiator ICE candidate error",A)};let x=await w.createOffer().catch(A=>{throw a.error("could not execute createOffer",A),new g("Failed to set createOffer","ERR_SDP_HANDSHAKE_FAILED")});a.trace("initiator send SDP offer %s",x.sdp),l?.(new q("webrtc:send-sdp-offer")),await y.write({type:er.Type.SDP_OFFER,data:x.sdp},{signal:t}),await w.setLocalDescription(x).catch(A=>{throw a.error("could not execute setLocalDescription",A),new g("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")}),l?.(new q("webrtc:read-sdp-answer"));let _=await y.read({signal:t});if(_.type!==er.Type.SDP_ANSWER)throw new g("Remote should send an SDP answer","ERR_SDP_HANDSHAKE_FAILED");a.trace("initiator receive SDP answer %s",_.data);let I=new yd({type:"answer",sdp:_.data});return await w.setRemoteDescription(I).catch(A=>{throw a.error("could not execute setRemoteDescription",A),new g("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")}),a.trace("initiator read candidates until connected"),l?.(new q("webrtc:read-ice-candidates")),await wd(w,y,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),E.close(),l?.(new q("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await m.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:w,muxerFactory:b}}catch(E){throw a.error("outgoing signaling error",E),w.close(),m.abort(E),E}finally{w.onicecandidate=null,w.onicecandidateerror=null}}finally{if(p)try{await f.close({signal:t})}catch(m){f.abort(m)}}}var bd=class extends ge{peerId;transportManager;shutdownController;constructor(e,t){super(),this.peerId=e.peerId,this.transportManager=e.transportManager,this.shutdownController=t.shutdownController}async listen(){this.safeDispatchEvent("listening",{})}getAddrs(){return this.transportManager.getListeners().filter(e=>e!==this).map(e=>e.getAddrs().filter(t=>on.matches(t)).map(t=>t.encapsulate(`/webrtc/p2p/${this.peerId}`))).flat()}async close(){this.shutdownController.abort(),this.safeDispatchEvent("close",{})}};async function ly({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let s=ze(e).pb(er);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),s.write({type:er.Type.ICE_CANDIDATE,data:u},{signal:t}).catch(h=>{o.error("error sending ICE candidate",h)})};let a=await s.read({signal:t});if(a.type!==er.Type.SDP_OFFER)throw new g(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `,"ERR_SDP_HANDSHAKE_FAILED");o.trace("recipient receive SDP offer %s",a.data);let c=new yd({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new g("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new g("Failed to create answer","ERR_SDP_HANDSHAKE_FAILED")});o.trace("recipient send SDP answer %s",l.sdp),await s.write({type:er.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new g("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")}),o.trace("recipient read candidates until connected"),await wd(r,s,{direction:"recipient",signal:t,log:o})}catch(a){if(r.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let i=j(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",i),{remoteAddress:i}}var VI="/webrtc",KI="/p2p-circuit",Ed="/webrtc-signaling/0.0.1",$I=30*1e3,xd=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,K(1/0,this.shutdownController.signal),e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}[ln]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Be]=["@libp2p/transport"];[Mr]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(Ed,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnTransientConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(Ed),this._started=!1}createListener(e){return new bd(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(P5.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:s}=await ay({rtcConfiguration:await dc(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),i=new As(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,muxerFactory:s,onProgress:t.onProgress});return this._closeOnShutdown(o,i),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??$I),o=new Is(await dc(this.init.rtcConfiguration)),s=new Mo(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i}=await ly({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new As(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:i,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:s}),this._closeOnShutdown(o,a)}catch(i){throw this.log.error("incoming signaling error",i),o.close(),t.abort(i),i}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function cy(r){let e=r.toString().split(VI+"/");if(e.length!==2)throw new g("webrtc protocol was not present in multiaddr",yr.ERR_INVALID_MULTIADDR);if(!e[0].includes(KI))throw new g("p2p-circuit protocol was not present in multiaddr",yr.ERR_INVALID_MULTIADDR);let t=j(e[0]),o=j("/"+e[1]).getPeerId();if(o==null)throw new g("destination peer id was missing",yr.ERR_INVALID_MULTIADDR);let s=t.protos().pop();if(s===void 0)throw new g("invalid multiaddr",yr.ERR_INVALID_MULTIADDR);return s.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:me(o)}}var Vp=Object.values(br).map(r=>r.decoder).reduce((r,e)=>r.or(e));function uy(r,e){let t=r.getConfiguration().certificates?.at(0);if(t==null||t.getFingerprints==null){e.log.trace("fetching fingerprint from local SDP");let o=r.localDescription;return o==null?void 0:qI(o.sdp)}if(e.log.trace("fetching fingerprint from local certificate"),t.getFingerprints().length===0)return;let n=t.getFingerprints()[0].value;if(n==null)throw Mp("","no fingerprint on local certificate");return n}var HI=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function qI(r){return r.match(HI)?.groups?.fingerprint}function GI(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function _d(r){let t=r.stringTuples().filter(n=>n[0]===hy).map(n=>n[1])[0];if(t===void 0||t==="")throw pd(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function Kp(r){return Bt.decode(Vp.decode(r))}function WI(r){let e=Kp(_d(r)),t=$p(e.code),n=e.digest.reduce((s,i)=>s+i.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw Mp(n,r.toString());return[`${t} ${o.join(":").toUpperCase()}`,n]}function $p(r){switch(r){case 17:return"SHA-1";case 18:return"SHA-256";case 19:return"SHA-512";default:throw Q9(r)}}function zI(r,e){let{host:t,port:n}=r.toOptions(),o=GI(r),[s]=WI(r);return`v=0
19
+ `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),oR=new RegExp(`(?:^${rn}$)|(?:^${a1}$)`),sR=new RegExp(`^${rn}$`),iR=new RegExp(`^${a1}$`),b2=r=>r&&r.exact?oR:new RegExp(`(?:${Do(r)}${rn}${Do(r)})|(?:${Do(r)}${a1}${Do(r)})`,"g");b2.v4=r=>r&&r.exact?sR:new RegExp(`${Do(r)}${rn}${Do(r)}`,"g");b2.v6=r=>r&&r.exact?iR:new RegExp(`${Do(r)}${a1}${Do(r)}`,"g");var x2=b2;function _2(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function yg(){return!1}var{toString:aR}=Object.prototype;function v2(r){return aR.call(r)==="[object RegExp]"}var wg={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function S2(r,e={}){if(!v2(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(wg).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?wg[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function R2(r,e,{timeout:t}={}){try{return _2(()=>S2(r).test(e),{timeout:t})()}catch(n){if(yg(n))return!1;throw n}}var cR=15,lR=45,Eg={timeout:400};function A2(r){return r.length>lR?!1:R2(x2.v6({exact:!0}),r,Eg)}function bg(r){return r.length>cR?!1:R2(x2.v4({exact:!0}),r,Eg)}var xg={http:"80",https:"443",ws:"80",wss:"443"},uR=["http","https","ws","wss"];function _g(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:s}=dR(r),a="/"+[fR(o,t),hR(s,n),pR(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return Z(a)}function dR(r){let[e]=r.split(":");uR.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let s=mR(e);s!=null&&(o=s),s==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function fR(r,e){if(!(r==null||r==="")){if(bg(r))return["ip4",r];if(A2(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(A2(t))return["ip6",t]}return[e,r]}}function hR(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function pR(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function mR(r){if(!(r==null||r===""||xg[r]==null))return xg[r]}var gR=["https://trustless-gateway.link","https://4everland.io"],yR=2336,wR=Symbol.for("nodejs.util.inspect.custom"),I2=class{type="url";multihash;privateKey;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Mt.digest(L(this.url))}[wR](){return`PeerId(${this.url})`}[Ls]=!0;toString(){return this.toCID().toString()}toCID(){return le.createV1(yR,this.multihash)}toBytes(){return this.toCID().bytes}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=U(e)),e.toString()===this.toString())}};function ER(r){return r=r.toString(),{id:new I2(new URL(r)),multiaddrs:[_g(r)]}}var T2=class{gateways;constructor(e={}){this.gateways=(e.gateways??gR).map(t=>ER(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function C2(r={}){return new T2(r)}var k2=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function D2(r){return new k2(r)}var vg=nt(yi(),1);function c1(r){return r=r??new Error("Not Found"),(0,vg.default)(r,"ERR_NOT_FOUND")}var Sg="SHARDING";function xR(r){return r[Symbol.asyncIterator]!=null}function _R(r){if(xR(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var Ya=_R;function vR(r){return r[Symbol.asyncIterator]!=null}function SR(r,e){return vR(r)?async function*(){yield*(await Ya(r)).sort(e)}():function*(){yield*Ya(r).sort(e)}()}var l1=SR;var Xn=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await Gt(this.putMany(e,n)),e=[],await Gt(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=tn(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>tn(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>l1(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=tn(n,()=>o++>=s)}return e.limit!=null&&(n=no(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=tn(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>tn(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>l1(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=tn(n,()=>s++>=o)}return e.limit!=null&&(n=no(n,e.limit)),n}};var _s=class extends Xn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw c1();return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new De(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new De(e)}};var JG=new De(Sg);var dW=cr("datastore:core:tiered");var u1=class extends Du{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};var N2=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=ee(),this.haveNext=ee()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=ee(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=ee(),await Ce(this.readNext.promise,t?.signal,t)}};function Ag(){return new N2}var d1=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var P2=class extends Error{code;constructor(e,t){super(e),this.code=t}},L2=class extends P2{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function f1(r,e){let t=Ag();r.sink(t).catch(async i=>{await t.end(i)}),r.sink=async i=>{for await(let a of i)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new ae;return{read:async(i,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((d,u)=>{c=()=>{u(new L2("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(i==null){let{done:u,value:f}=await Promise.race([n.next(),l]);return u===!0?new ae:f}for(;o.byteLength<i;){let{value:u,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new d1("unexpected end of input");o.append(u)}let d=o.sublist(0,i);return o.consume(i),d}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(i,a)=>{a?.signal?.throwIfAborted(),i instanceof Uint8Array?await t.push(i,a):await t.push(i.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let i=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*i}()}return r}}}var h1=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},p1=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},m1=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function En(r,e={}){let t=f1(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=he(e.maxDataLength));let n=e?.lengthDecoder??Lt,o=e?.lengthEncoder??Ve;return{read:async i=>{let a=-1,c=new ae;for(;;){c.append(await t.read(1,i));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new h1("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new m1("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new p1("message length too long");return t.read(a,i)},write:async(i,a)=>{await t.write(new ae(o(i.byteLength),i),a)},writeV:async(i,a)=>{let c=new ae(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function O2(){let r=ee(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function Ig(){let r=O2(),e=O2();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Si=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function g1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function B2(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function M2(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function er(r,...e){if(!M2(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function U2(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Tg(r,e){er(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Qn=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),Cg=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),IR=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!IR)throw new Error("Non little-endian hardware is not supported");function TR(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function y1(r){if(typeof r=="string")r=TR(r);else if(M2(r))r=w1(r);else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function kg(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Dg(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var F2=(r,e)=>(Object.assign(e,r),e);function V2(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}function w1(r){return Uint8Array.from(r)}function Zn(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var Pg=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),CR=Pg("expand 16-byte k"),kR=Pg("expand 32-byte k"),DR=Qn(CR),Lg=Qn(kR),ez=Lg.slice();function X(r,e){return r<<e|r>>>32-e}function K2(r){return r.byteOffset%4===0}var E1=64,NR=16,Og=2**32-1,Ng=new Uint32Array;function PR(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(E1),d=Qn(l),u=K2(o)&&K2(s),f=u?Qn(o):Ng,h=u?Qn(s):Ng;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=Og)throw new Error("arx: counter overflow");let g=Math.min(E1,c-p);if(u&&g===E1){let y=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let w=0,b;w<NR;w++)b=y+w,h[b]=f[b]^d[w];p+=E1;continue}for(let y=0,w;y<g;y++)w=p+y,s[w]=o[w]^l[y];p+=g}}function $2(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=kg({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return g1(o),g1(i),B2(s),B2(t),(a,c,l,d,u=0)=>{er(a),er(c),er(l);let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),er(d),g1(u),u<0||u>=Og)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let h=[],p=a.length,g,y;if(p===32)h.push(g=w1(a)),y=Lg;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),y=DR,h.push(g);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);K2(c)||h.push(c=w1(c));let w=Qn(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,w,Qn(c.subarray(0,16)),w),c=c.subarray(16)}let b=16-o;if(b!==c.length)throw new Error(`arx: nonce must be ${b} or 16 bytes`);if(b!==12){let x=new Uint8Array(12);x.set(c,s?0:12-c.length),c=x,h.push(c)}let E=Qn(c);return PR(r,y,w,E,l,d,u,i),Zn(...h),d}}var xt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,H2=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=y1(e),er(e,32);let t=xt(e,0),n=xt(e,2),o=xt(e,4),s=xt(e,6),i=xt(e,8),a=xt(e,10),c=xt(e,12),l=xt(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let d=0;d<8;d++)this.pad[d]=xt(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],h=i[6],p=i[7],g=i[8],y=i[9],w=xt(e,t+0),b=xt(e,t+2),E=xt(e,t+4),x=xt(e,t+6),T=xt(e,t+8),C=xt(e,t+10),v=xt(e,t+12),S=xt(e,t+14),I=s[0]+(w&8191),F=s[1]+((w>>>13|b<<3)&8191),O=s[2]+((b>>>10|E<<6)&8191),B=s[3]+((E>>>7|x<<9)&8191),M=s[4]+((x>>>4|T<<12)&8191),D=s[5]+(T>>>1&8191),P=s[6]+((T>>>14|C<<2)&8191),A=s[7]+((C>>>11|v<<5)&8191),R=s[8]+((v>>>8|S<<8)&8191),N=s[9]+(S>>>5|o),k=0,q=k+I*a+F*(5*y)+O*(5*g)+B*(5*p)+M*(5*h);k=q>>>13,q&=8191,q+=D*(5*f)+P*(5*u)+A*(5*d)+R*(5*l)+N*(5*c),k+=q>>>13,q&=8191;let W=k+I*c+F*a+O*(5*y)+B*(5*g)+M*(5*p);k=W>>>13,W&=8191,W+=D*(5*h)+P*(5*f)+A*(5*u)+R*(5*d)+N*(5*l),k+=W>>>13,W&=8191;let j=k+I*l+F*c+O*a+B*(5*y)+M*(5*g);k=j>>>13,j&=8191,j+=D*(5*p)+P*(5*h)+A*(5*f)+R*(5*u)+N*(5*d),k+=j>>>13,j&=8191;let ie=k+I*d+F*l+O*c+B*a+M*(5*y);k=ie>>>13,ie&=8191,ie+=D*(5*g)+P*(5*p)+A*(5*h)+R*(5*f)+N*(5*u),k+=ie>>>13,ie&=8191;let ce=k+I*u+F*d+O*l+B*c+M*a;k=ce>>>13,ce&=8191,ce+=D*(5*y)+P*(5*g)+A*(5*p)+R*(5*h)+N*(5*f),k+=ce>>>13,ce&=8191;let fe=k+I*f+F*u+O*d+B*l+M*c;k=fe>>>13,fe&=8191,fe+=D*a+P*(5*y)+A*(5*g)+R*(5*p)+N*(5*h),k+=fe>>>13,fe&=8191;let xe=k+I*h+F*f+O*u+B*d+M*l;k=xe>>>13,xe&=8191,xe+=D*c+P*a+A*(5*y)+R*(5*g)+N*(5*p),k+=xe>>>13,xe&=8191;let Le=k+I*p+F*h+O*f+B*u+M*d;k=Le>>>13,Le&=8191,Le+=D*l+P*c+A*a+R*(5*y)+N*(5*g),k+=Le>>>13,Le&=8191;let Oe=k+I*g+F*p+O*h+B*f+M*u;k=Oe>>>13,Oe&=8191,Oe+=D*d+P*l+A*c+R*a+N*(5*y),k+=Oe>>>13,Oe&=8191;let Fe=k+I*y+F*g+O*p+B*h+M*f;k=Fe>>>13,Fe&=8191,Fe+=D*u+P*d+A*l+R*c+N*a,k+=Fe>>>13,Fe&=8191,k=(k<<2)+k|0,k=k+q|0,q=k&8191,k=k>>>13,W+=k,s[0]=q,s[1]=W,s[2]=j,s[3]=ie,s[4]=ce,s[5]=fe,s[6]=xe,s[7]=Le,s[8]=Oe,s[9]=Fe}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let s=(o^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let i=e[0]+t[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+t[a]|0)+(i>>>16)|0,e[a]=i&65535;Zn(n)}update(e){U2(this);let{buffer:t,blockLen:n}=this;e=y1(e);let o=e.length;for(let s=0;s<o;){let i=Math.min(n-this.pos,o-s);if(i===n){for(;n<=o-s;s+=n)this.process(e,s);continue}t.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){Zn(this.h,this.r,this.buffer,this.pad)}digestInto(e){U2(this),Tg(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let s=0;for(let i=0;i<8;i++)e[s++]=n[i]>>>0,e[s++]=n[i]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function LR(r){let e=(n,o)=>r(o).update(y1(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var Bg=LR(r=>new H2(r));function Fg(r,e,t,n,o,s=20){let i=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],h=e[3],p=e[4],g=e[5],y=e[6],w=e[7],b=o,E=t[0],x=t[1],T=t[2],C=i,v=a,S=c,I=l,F=d,O=u,B=f,M=h,D=p,P=g,A=y,R=w,N=b,k=E,q=x,W=T;for(let ie=0;ie<s;ie+=2)C=C+F|0,N=X(N^C,16),D=D+N|0,F=X(F^D,12),C=C+F|0,N=X(N^C,8),D=D+N|0,F=X(F^D,7),v=v+O|0,k=X(k^v,16),P=P+k|0,O=X(O^P,12),v=v+O|0,k=X(k^v,8),P=P+k|0,O=X(O^P,7),S=S+B|0,q=X(q^S,16),A=A+q|0,B=X(B^A,12),S=S+B|0,q=X(q^S,8),A=A+q|0,B=X(B^A,7),I=I+M|0,W=X(W^I,16),R=R+W|0,M=X(M^R,12),I=I+M|0,W=X(W^I,8),R=R+W|0,M=X(M^R,7),C=C+O|0,W=X(W^C,16),A=A+W|0,O=X(O^A,12),C=C+O|0,W=X(W^C,8),A=A+W|0,O=X(O^A,7),v=v+B|0,N=X(N^v,16),R=R+N|0,B=X(B^R,12),v=v+B|0,N=X(N^v,8),R=R+N|0,B=X(B^R,7),S=S+M|0,k=X(k^S,16),D=D+k|0,M=X(M^D,12),S=S+M|0,k=X(k^S,8),D=D+k|0,M=X(M^D,7),I=I+F|0,q=X(q^I,16),P=P+q|0,F=X(F^P,12),I=I+F|0,q=X(q^I,8),P=P+q|0,F=X(F^P,7);let j=0;n[j++]=i+C|0,n[j++]=a+v|0,n[j++]=c+S|0,n[j++]=l+I|0,n[j++]=d+F|0,n[j++]=u+O|0,n[j++]=f+B|0,n[j++]=h+M|0,n[j++]=p+D|0,n[j++]=g+P|0,n[j++]=y+A|0,n[j++]=w+R|0,n[j++]=b+N|0,n[j++]=E+k|0,n[j++]=x+q|0,n[j++]=T+W|0}function OR(r,e,t,n){let o=r[0],s=r[1],i=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],h=e[5],p=e[6],g=e[7],y=t[0],w=t[1],b=t[2],E=t[3];for(let T=0;T<20;T+=2)o=o+c|0,y=X(y^o,16),f=f+y|0,c=X(c^f,12),o=o+c|0,y=X(y^o,8),f=f+y|0,c=X(c^f,7),s=s+l|0,w=X(w^s,16),h=h+w|0,l=X(l^h,12),s=s+l|0,w=X(w^s,8),h=h+w|0,l=X(l^h,7),i=i+d|0,b=X(b^i,16),p=p+b|0,d=X(d^p,12),i=i+d|0,b=X(b^i,8),p=p+b|0,d=X(d^p,7),a=a+u|0,E=X(E^a,16),g=g+E|0,u=X(u^g,12),a=a+u|0,E=X(E^a,8),g=g+E|0,u=X(u^g,7),o=o+l|0,E=X(E^o,16),p=p+E|0,l=X(l^p,12),o=o+l|0,E=X(E^o,8),p=p+E|0,l=X(l^p,7),s=s+d|0,y=X(y^s,16),g=g+y|0,d=X(d^g,12),s=s+d|0,y=X(y^s,8),g=g+y|0,d=X(d^g,7),i=i+u|0,w=X(w^i,16),f=f+w|0,u=X(u^f,12),i=i+u|0,w=X(w^i,8),f=f+w|0,u=X(u^f,7),a=a+c|0,b=X(b^a,16),h=h+b|0,c=X(c^h,12),a=a+c|0,b=X(b^a,8),h=h+b|0,c=X(c^h,7);let x=0;n[x++]=o,n[x++]=s,n[x++]=i,n[x++]=a,n[x++]=y,n[x++]=w,n[x++]=b,n[x++]=E}var BR=$2(Fg,{counterRight:!1,counterLength:4,allowShortKeys:!1}),MR=$2(Fg,{counterRight:!1,counterLength:8,extendNonceFn:OR,allowShortKeys:!1});var UR=new Uint8Array(16),Mg=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(UR.subarray(t))},FR=new Uint8Array(32);function Ug(r,e,t,n,o){let s=r(e,t,FR),i=Bg.create(s);o&&Mg(i,o),Mg(i,n);let a=new Uint8Array(16),c=Cg(a);V2(c,0,BigInt(o?o.length:0),!0),V2(c,8,BigInt(n.length),!0),i.update(a);let l=i.digest();return Zn(s,a),l}var Vg=r=>(e,t,n)=>(er(e,32),er(t),{encrypt(s,i){let a=s.length,c=a+16;i?er(i,c):i=new Uint8Array(c),r(e,t,s,i,1);let l=Ug(r,e,t,i.subarray(0,-16),n);return i.set(l,a),Zn(l),i},decrypt(s,i){let a=s.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");i?er(i,c):i=new Uint8Array(c);let l=s.subarray(0,-16),d=s.subarray(-16),u=Ug(r,e,t,l,n);if(!Dg(d,u))throw new Error("invalid tag");return r(e,t,l,i,1),Zn(u),i}}),q2=F2({blockSize:64,nonceLength:12,tagLength:16},Vg(BR)),lz=F2({blockSize:64,nonceLength:24,tagLength:16},Vg(MR));function $g(r,e,t){return Jo(r),t===void 0&&(t=new Uint8Array(r.outputLen)),po(r,Kr(t),Kr(e))}var G2=new Uint8Array([0]),Kg=new Uint8Array;function Hg(r,e,t,n=32){if(Jo(r),io(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=Kg);let s=new Uint8Array(o*r.outputLen),i=po.create(r,e),a=i._cloneInto(),c=new Uint8Array(i.outputLen);for(let l=0;l<o;l++)G2[0]=l+1,a.update(l===0?Kg:c).update(t).update(G2).digestInto(c),s.set(c,r.outputLen*l),i._cloneInto(a);return i.destroy(),a.destroy(),c.fill(0),G2.fill(0),s.slice(0,n)}var W2={hashSHA256(r){return _o(r.subarray())},getHKDF(r,e){let t=$g(_o,e,r),o=Hg(_o,t,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){let r=da.utils.randomPrivateKey();return{publicKey:da.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:da.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return da.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return q2(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return q2(n,e,t).decrypt(r.subarray(),o)}};var qg=W2;function Gg(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var Ri=r=>{let e=Ge(2);return e[0]=r>>8,e[1]=r,e};Ri.bytes=2;var Xa=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};Xa.bytes=2;function Wg(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function z2(r,e){!e.enabled||!Si||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${U(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${U(r.privateKey,"hex")}`)):e("Missing local static keys."))}function Y2(r,e){!e.enabled||!Si||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${U(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${U(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function zg(r,e){!e.enabled||!Si||e(r?`REMOTE_STATIC_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote static public key.")}function X2(r,e){!e.enabled||!Si||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function Q2(r,e,t){!t.enabled||!Si||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&U(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&U(e.k,"hex")}`))}function nn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ge(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var b1=class r extends Error{code;constructor(e="Unexpected Peer"){super(e),this.code=r.code}static code="ERR_UNEXPECTED_PEER"},Ai=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var VR=0,KR=4294967295,$R="Cipherstate has reached maximum n, a new handshake must be performed",x1=class{n;bytes;view;constructor(e=VR){this.n=e,this.bytes=de(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>KR)throw new Error($R)}};var vs=de(0),Ii=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new x1(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},Z2=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=L(t,"utf-8");this.h=HR(e,n),this.ck=this.h,this.cs=new Ii(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Ii(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ae(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,vs);return[new Ii(this.crypto,e),new Ii(this.crypto,t)]}},j2=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new Z2(t,n),this.ss.mixHash(o),this.initiator=s,this.s=i,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},Qa=class extends j2{writeMessageA(e){return new ae(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ae(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ae(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Ai(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new Ai(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new Ai(`handshake stage 2 validation fail: ${t.message}`)}}};function HR(r,e){if(e.length<=32){let t=de(32);return t.set(e),t}else return r.hash(e)}var _1;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let s of t.webtransportCerthashes)n.uint32(10),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(_1||(_1={}));var Za;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),_1.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:de(0),identitySig:de(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=_1.codec().decode(t,t.uint32());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Za||(Za={}));async function J2(r,e,t){let n=await r.sign(Yg(e));return Za.encode({identityKey:r.public.bytes,identitySig:n,extensions:t})}async function ep(r,e,t){try{let n=Za.decode(r);if(t){let i=t.subarray();if(!J(i,n.identityKey))throw new Error(`Payload identity key ${U(n.identityKey,"hex")} does not match expected remote identity key ${U(i,"hex")}`)}if(!e)throw new Error("Remote static does not exist");let o=Yg(e);if(!await Qr(n.identityKey).verify(o,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new b1(n.message)}}function Yg(r){let e=L("noise-libp2p-static-key:");return r instanceof Uint8Array?ve([e,r],e.length+r.length):(r.prepend(e),r)}async function Xg(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await J2(s,a.publicKey,l),u=new Qa({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});z2(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(vs),e),t.trace("Stage 0 - Initiator finished sending first message."),Y2(u.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=u.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),X2(u.re,t),zg(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await ep(f,u.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(u.writeMessageC(d),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,g]=u.ss.split();return Q2(p,g,t),{payload:h,encrypt:y=>p.encryptWithAd(vs,y),decrypt:(y,w)=>g.decryptWithAd(vs,y,w)}}async function Qg(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await J2(s,a.publicKey,l),u=new Qa({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});z2(u.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),u.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),X2(u.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(u.writeMessageB(d),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),Y2(u.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=u.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await ep(f,u.rs,c),[p,g]=u.ss.split();return Q2(p,g,t),{payload:h,encrypt:y=>g.encryptWithAd(vs,y),decrypt:(y,w)=>p.decryptWithAd(vs,y,w)}}var jg=16;function Jg(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let s=o+65519;s>n.length&&(s=n.length);let i;n instanceof Uint8Array?i=r.encrypt(n.subarray(o,s)):i=r.encrypt(n.sublist(o,s)),e?.encryptedPackets.increment(),yield new ae(Ri(i.byteLength),i)}}}function e7(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let s=o+65535;if(s>n.length&&(s=n.length),s-jg<o)throw new Error("Invalid chunk");let i=n.sublist(o,s),a=n.subarray(o,s-jg);try{let c=r.decrypt(i,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var v1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:s,prologueBytes:i}=t,{metrics:a}=e;this.components=e;let c=s??qg;this.crypto=Gg(c),this.extensions=o,this.metrics=a?Wg(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??de(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Te]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(...e){let{localPeer:t,connection:n,remotePeer:o,signal:s}=this.parseArgs(e),i=En(n,{lengthEncoder:Ri,lengthDecoder:Xa,maxDataLength:65535});if(!t.privateKey)throw new m("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let a=await Ir(t.privateKey),c=o?.publicKey,l=await this.performHandshakeInitiator(i,a,c,{signal:s}),d=await this.createSecureConnection(i,l);return n.source=d.source,n.sink=d.sink,{conn:n,remoteExtensions:l.payload.extensions,remotePeer:await ut(l.payload.identityKey)}}async secureInbound(...e){let{localPeer:t,connection:n,remotePeer:o,signal:s}=this.parseArgs(e),i=En(n,{lengthEncoder:Ri,lengthDecoder:Xa,maxDataLength:65535});if(!t.privateKey)throw new m("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let a=await Ir(t.privateKey),c=o?.publicKey,l=await this.performHandshakeResponder(i,a,c,{signal:s}),d=await this.createSecureConnection(i,l);return n.source=d.source,n.sink=d.sink,{conn:n,remoteExtensions:l.payload.extensions,remotePeer:await ut(l.payload.identityKey)}}async performHandshakeInitiator(e,t,n,o){let s;try{s=await Xg({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(i){throw this.metrics?.xxHandshakeErrors.increment(),i}return s}async performHandshakeResponder(e,t,n,o){let s;try{s=await Qg({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(i){throw this.metrics?.xxHandshakeErrors.increment(),i}return s}async createSecureConnection(e,t){let[n,o]=Ig(),s=e.unwrap();return await Xe(n,Jg(t,this.metrics),s,i=>zt(i,{lengthDecoder:Xa}),e7(t,this.metrics),n),o}parseArgs(e){return to(e[0])?{localPeer:e[0],connection:e[1],remotePeer:e[2]}:{localPeer:this.components.peerId,connection:e[0],remotePeer:e[1]?.remotePeer,signal:e[1]?.signal}}};function Ti(r={}){return e=>new v1(e,r)}function S1(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var Ci="ERR_INVALID_FRAME",tp="ERR_UNREQUESTED_PING",rp="ERR_NOT_MATCHING_PING",np="ERR_STREAM_ALREADY_EXISTS",op="ERR_DECODE_INVALID_VERSION",sp="ERR_BOTH_CLIENTS",ip="ERR_RECV_WINDOW_EXCEEDED",t7=new Set([Ci,tp,rp,np,op,sp,ip]),No="ERR_INVALID_CONFIG",R1="ERR_MUXER_LOCAL_CLOSED",ap="ERR_MUXER_REMOTE_CLOSED";var r7="ERR_STREAM_ABORT",n7="ERROR_MAX_OUTBOUND_STREAMS_EXCEEDED",o7="ERR_DECODE_IN_PROGRESS",Ja=256*1024,s7=16*1024*1024;var i7={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Ja,maxStreamWindowSize:s7,maxMessageSize:64*1024};function a7(r){if(r.keepAliveInterval<=0)throw new m("keep-alive interval must be positive",No);if(r.maxInboundStreams<0)throw new m("max inbound streams must be larger or equal 0",No);if(r.maxOutboundStreams<0)throw new m("max outbound streams must be larger or equal 0",No);if(r.initialStreamWindowSize<Ja)throw new m("InitialStreamWindowSize must be larger or equal 256 kB",No);if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new m("MaxStreamWindowSize must be larger than the InitialStreamWindowSize",No);if(r.maxStreamWindowSize>2**32-1)throw new m("MaxStreamWindowSize must be less than equal MAX_UINT32",No);if(r.maxMessageSize<1024)throw new m("MaxMessageSize must be greater than a kilobyte",No)}var Je;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Je||(Je={}));var qe;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(qe||(qe={}));var VY=Object.values(qe).filter(r=>typeof r!="string"),c7=0,Pr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Pr||(Pr={}));var Po=12;var l7=2**24;function qR(r){if(r[0]!==c7)throw new m("Invalid frame version",op);return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*l7+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*l7+(r[9]<<16)+(r[10]<<8)+r[11]}}var A1=class{source;buffer;frameInProgress;constructor(e){this.source=GR(e),this.buffer=new ae,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Je.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new m("decoding frame already in progress",o7);if(this.buffer.length<Po)return;let e=qR(this.buffer.subarray(0,Po));return this.buffer.consume(Po),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function GR(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function cp(r){let e=new Uint8Array(Po);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function u7(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function I1(r,e){let t=S1(r).return?.();u7(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var WR="ERR_STREAM_RESET",zR="ERR_SINK_INVALID_STATE",YR=5e3;function lp(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var bn=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=ee(),this.closed=ee(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??YR,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=At({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new m(`writable end state is "${this.writeStatus}" not "ready"`,zR);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);lp(o)&&await o}let n=()=>{I1(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new ae(o):o;let s=this.sendData(o,t);lp(s)&&(this.sendingData=ee(),await s,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.log.trace("closing gracefully"),this.status="closing",await Ce(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully")}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await Ce(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await Ce(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await Ce(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();lp(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new m("stream reset",WR);this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Lr;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished"})(Lr||(Lr={}));var T1=class extends bn{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Lr.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Ja,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=Va(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Po,e.length),o=this.getSendFlags();this.sendFrame({type:Je.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Je.WindowUpdate,flag:qe.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|qe.FIN;this.sendFrame({type:Je.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new m("stream aborted",r7)):t()};e.signal?.addEventListener("abort",o);try{await new Promise((s,i)=>{this.sendWindowCapacityUpdate=()=>{s()},n=i,t=s})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new m("receive window exceeded",ip,{available:this.recvWindowCapacity,recv:e.length});let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&qe.ACK)===qe.ACK&&this.state===Lr.SYNSent&&(this.state=Lr.Established),(e&qe.FIN)===qe.FIN&&this.remoteCloseWrite(),(e&qe.RST)===qe.RST&&this.reset()}getSendFlags(){switch(this.state){case Lr.Init:return this.state=Lr.SYNSent,qe.SYN;case Lr.SYNReceived:return this.state=Lr.Established,qe.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Je.WindowUpdate,flag:e,streamID:this._id,length:o})}};var d7="/yamux/1.0.0",XR=500,C1=class{protocol=d7;_components;_init;constructor(e,t={}){this._components=e,this._init=t}createStreamMuxer(e){return new up(this._components,{...this._init,...e})}},up=class{protocol=d7;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...i7,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),a7(this.config),this.closeController=new AbortController,K(1/0,this.closeController.signal),this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=At({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=S1(n);if(a.return!=null){let c=a.return();QR(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},s,i;try{let a=new A1(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}s=Pr.NormalTermination}catch(a){let c=a.code;t7.has(c)?(this.log?.error("protocol error in sink",a),s=Pr.ProtocolError):(this.log?.error("internal error in sink",a),s=Pr.InternalError),i=a}this.log?.trace("muxer sink ended"),i!=null?this.abort(i,s):await this.close({reason:s})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new m("muxer closed remotely",ap);if(this.localGoAway!==void 0)throw new m("muxer closed locally",R1);let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new m("max outbound streams exceeded",n7);this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Lr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new m("muxer closed remotely",ap);if(this.localGoAway!==void 0)throw new m("muxer closed locally",R1);if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,s)=>{let i=()=>{s(new m("muxer closed locally",R1))};this.closeController.signal.addEventListener("abort",i,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",i),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Pr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(XR);K(1/0,n),e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Pr.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new m("Stream already exists",np,{id:e});let s=new T1({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(s)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return s}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:s}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Je.Ping:{this.handlePing(e);return}case Je.GoAway:{this.handleGoAway(s);return}default:throw new m("Invalid frame type",Ci,{header:e})}else switch(e.type){case Je.Data:case Je.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new m("Invalid frame type",Ci,{header:e})}}handlePing(e){if(e.flag===qe.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,qe.ACK);else if(e.flag===qe.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new m("Invalid frame flag",Ci,{header:e})}handlePingResponse(e){if(this.activePing===void 0)throw new m("ping not requested",tp);if(this.activePing.id!==e)throw new m("ping doesn't match our id",rp);this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Pr[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:s}=e;(o&qe.SYN)===qe.SYN&&this.incomingStream(n);let i=this._streams.get(n);if(i===void 0){if(s===Je.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.("frame for missing stream id=%s",n);return}switch(s){case Je.WindowUpdate:{i.handleWindowUpdate(e);return}case Je.Data:{if(t===void 0)throw new Error("unreachable");await i.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new m("both endpoints are clients",sp);if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Je.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Je.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Lr.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===Je.Data){if(t===void 0)throw new m("invalid frame",Ci);this.source.push(new ae(cp(e),t))}else this.source.push(cp(e))}sendPing(e,t=qe.SYN){t===qe.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Je.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Pr.NormalTermination){this.log?.("sending GoAway reason=%s",Pr[e]),this.localGoAway=e,this.sendFrame({type:Je.GoAway,flag:0,streamID:0,length:e})}};function QR(r){return r!=null&&typeof r.then=="function"}function f7(r={}){return e=>new C1(e,r)}var k1=globalThis.CustomEvent??Event;async function*on(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,s=[],i=ee(),a=ee(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(s.length===t&&(i=ee(),await i.promise),d)break;let g={done:!1};s.push(g),p().then(y=>{g.done=!0,g.ok=!0,g.value=y,o.dispatchEvent(new k1("task-complete"))},y=>{g.done=!0,g.err=y,o.dispatchEvent(new k1("task-complete"))})}c=!0,o.dispatchEvent(new k1("task-complete"))}catch(p){l=p,o.dispatchEvent(new k1("task-complete"))}});function u(){return n?s[0]?.done:!!s.find(p=>p.done)}function*f(){for(;s.length>0&&s[0].done;){let p=s[0];if(s.shift(),p.ok)yield p.value;else throw d=!0,i.resolve(),p.err;i.resolve()}}function*h(){for(;u();)for(let p=0;p<s.length;p++)if(s[p].done){let g=s[p];if(s.splice(p,1),p--,g.ok)yield g.value;else throw d=!0,i.resolve(),g.err;i.resolve()}}for(;;){if(u()||(a=ee(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&s.length===0)break}}var h7="libp2p",p7="autonat",m7="1.0.0";var we;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>Ke(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),function(l){l.codec=()=>Ke(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=oe((u,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),u.id!=null&&(f.uint32(10),f.bytes(u.id)),u.addrs!=null)for(let p of u.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let h={addrs:[]},p=f==null?u.len:u.pos+f;for(;u.pos<p;){let g=u.uint32();switch(g>>>3){case 1:h.id=u.bytes();break;case 2:h.addrs.push(u.bytes());break;default:u.skipType(g&7);break}}return h})),d),l.encode=u=>ne(u,l.codec()),l.decode=u=>re(u,l.codec())})(s=r.PeerInfo||(r.PeerInfo={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=oe((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(u.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let h={},p=f==null?u.len:u.pos+f;for(;u.pos<p;){let g=u.uint32();switch(g>>>3){case 1:h.peer=r.PeerInfo.codec().decode(u,u.uint32());break;default:u.skipType(g&7);break}}return h})),d),l.encode=u=>ne(u,l.codec()),l.decode=u=>re(u,l.codec())})(i=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=oe((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(u.status,f)),u.statusText!=null&&(f.uint32(18),f.string(u.statusText)),u.addr!=null&&(f.uint32(26),f.bytes(u.addr)),h.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let h={},p=f==null?u.len:u.pos+f;for(;u.pos<p;){let g=u.uint32();switch(g>>>3){case 1:h.status=r.ResponseStatus.codec().decode(u);break;case 2:h.statusText=u.string();break;case 3:h.addr=u.bytes();break;default:u.skipType(g&7);break}}return h})),d),l.encode=u=>ne(u,l.codec()),l.decode=u=>re(u,l.codec())})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=oe((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d)=>{let u={},f=d==null?l.len:l.pos+d;for(;l.pos<f;){let h=l.uint32();switch(h>>>3){case 1:u.type=r.MessageType.codec().decode(l);break;case 2:u.dial=r.Dial.codec().decode(l,l.uint32());break;case 3:u.dialResponse=r.DialResponse.codec().decode(l,l.uint32());break;default:l.skipType(h&7);break}}return u})),c),r.encode=l=>ne(l,r.codec()),r.decode=l=>re(l,r.codec())})(we||(we={}));var dp=4,D1=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;log;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:autonat"),this.started=!1,this.protocol=`/${t.protocolPrefix??h7}/${p7}/${m7}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}[Symbol.toStringTag]="@libp2p/autonat";isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout),n=()=>{e.stream.abort(new m("handleIncomingAutonatStream timeout",fn))};t.addEventListener("abort",n,{once:!0}),K(1/0,t);try{let o=this;await Xe(e.stream,s=>zt(s),async function*(s){let i=await xs(s);if(i==null){o.log("no message received"),yield we.encode({type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let a;try{a=we.decode(i)}catch(c){o.log.error("could not decode message",c),yield we.encode({type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}yield we.encode(await o.handleAutonatMessage(a,e.connection,{signal:t}))},s=>Wt(s),e.stream)}catch(o){this.log.error("error handling incoming autonat stream",o)}finally{t.removeEventListener("abort",n)}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{this.log.error("error verifying external address",e)})}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(u=>u.toOptions().host),s=e.dial;if(s==null)return this.log.error("dial was missing from message"),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let i,a=s.peer;if(a?.id==null)return this.log.error("PeerId missing from message"),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{i=Ze(a.id)}catch(u){return this.log.error("invalid PeerId",u),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",i),!t.remotePeer.equals(i))return this.log("target peer %p did not equal sending peer %p",i,t.remotePeer),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>Z(u)).filter(u=>{let f=u.toOptions().host===t.remoteAddr.toOptions().host;return this.log.trace("request to dial %a was sent from %a is same host %s",u,t.remoteAddr,f),f}).filter(u=>{let f=u.toOptions().host,h=!(Zt(f)??!1);return this.log.trace("host %s was public %s",f,h),h}).filter(u=>{let f=u.toOptions().host,h=!o.includes(f);return this.log.trace("host %s was not our host %s",f,h),h}).filter(u=>{let f=!!this.components.transportManager.dialTransportForMultiaddr(u);return this.log.trace("transport for %a is supported %s",u,f),f}).map(u=>(u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${i.toString()}`)),u));if(c.length===0)return this.log("no valid multiaddrs for %p in message",i),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(u=>u.toString()).join(", "),i);let l="",d=c[0];for await(let u of c){let f;d=u;try{if(f=await this.components.connectionManager.openConnection(u,n),!f.remoteAddr.equals(u))throw this.log.error("tried to dial %a but dialed %a",u,f.remoteAddr),new Error("Unexpected remote address");return this.log("Success %p",i),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(te("p2p").code).bytes}}}catch(h){this.log("could not dial %p",i,h),l=h.message}finally{f!=null&&await f.close()}}return{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:d.bytes}}}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(s=>{let i=s.toOptions();return!(Zt(i.host)??!1)});if(t.length===0){this.log("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);K(1/0,n);let o=this;try{this.log("verify multiaddrs %s",t.map(l=>l.toString()).join(", "));let s=we.encode({type:we.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:t.map(l=>l.bytes)}}}),i={},a=[],c=async l=>{let d=()=>{};try{this.log("asking %p to verify multiaddr",l.id);let u=await o.components.connectionManager.openConnection(l.id,{signal:n}),f=await u.newStream(this.protocol,{signal:n});d=()=>{f.abort(new m("verifyAddress timeout",fn))},n.addEventListener("abort",d,{once:!0});let h=await Xe([s],g=>Wt(g),f,g=>zt(g),async g=>xs(g));if(h==null){this.log("no response received from %p",u.remotePeer);return}let p=we.decode(h);if(p.type!==we.MessageType.DIAL_RESPONSE||p.dialResponse==null){this.log("invalid autonat response from %p",u.remotePeer);return}if(p.dialResponse.status===we.ResponseStatus.OK){let g=u.remoteAddr.toOptions(),y;if(g.family===4)y=g.host.split(".")[0];else if(g.family===6)y=g.host.split(":")[0];else{this.log('remote address "%s" was not IP4 or IP6?',g.host);return}if(a.includes(y)){this.log("already have response from network segment %d - %s",y,g.host);return}a.push(y)}return p.dialResponse}catch(u){this.log.error("error asking remote to verify multiaddr",u)}finally{n.removeEventListener("abort",d)}};for await(let l of on(Yt(this.components.randomWalk.walk({signal:n}),d=>async()=>c(d)),{concurrency:dp}))try{if(l==null)continue;let d=l.addr==null?t[0]:Z(l.addr);if(this.log("autonat response for %a is %s",d,l.status),l.status===we.ResponseStatus.E_BAD_REQUEST||l.status===we.ResponseStatus.E_DIAL_REFUSED||l.addr==null&&t.length>1)continue;if(!t.some(f=>f.equals(d))){this.log("peer reported %a as %s but it was not in our observed address list",d,l.status);continue}let u=d.toString();if(i[u]==null&&(i[u]={success:0,failure:0}),l.status===we.ResponseStatus.OK?i[u].success++:l.status===we.ResponseStatus.E_DIAL_ERROR&&i[u].failure++,i[u].success===dp){this.log("%a is externally dialable",d),e.confirmObservedAddr(d);return}if(i[u].failure===dp){this.log("%a is not externally dialable",d),e.removeObservedAddr(d);return}}catch(d){this.log.error("could not verify external address",d)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function g7(r={}){return e=>new D1(e,r)}var rA=G("dns4"),nA=G("dns6"),oA=G("dnsaddr"),Oo=rt(G("dns"),oA,rA,nA),N1=rt(G("ip4"),G("ip6")),ki=rt(se(N1,G("tcp")),se(Oo,G("tcp"))),P1=se(N1,G("udp")),sA=se(P1,G("utp")),iA=se(P1,G("quic")),aA=se(P1,G("quic-v1")),fp=rt(se(ki,G("ws")),se(Oo,G("ws"))),Di=rt(se(fp,G("p2p")),fp),hp=rt(se(ki,G("wss")),se(Oo,G("wss")),se(ki,G("tls"),G("ws")),se(Oo,G("tls"),G("ws"))),Ss=rt(se(hp,G("p2p")),hp),pp=rt(se(ki,G("http")),se(N1,G("http")),se(Oo,G("http"))),mp=rt(se(ki,G("https")),se(N1,G("https")),se(Oo,G("https"))),y7=se(P1,G("webrtc-direct"),G("certhash")),b7=rt(se(y7,G("p2p")),y7),w7=se(aA,G("webtransport"),G("certhash"),G("certhash")),x7=rt(se(w7,G("p2p")),w7),_7=rt(se(Di,G("p2p-webrtc-star"),G("p2p")),se(Ss,G("p2p-webrtc-star"),G("p2p")),se(Di,G("p2p-webrtc-star")),se(Ss,G("p2p-webrtc-star"))),WX=rt(se(Di,G("p2p-websocket-star"),G("p2p")),se(Ss,G("p2p-websocket-star"),G("p2p")),se(Di,G("p2p-websocket-star")),se(Ss,G("p2p-websocket-star"))),v7=rt(se(pp,G("p2p-webrtc-direct"),G("p2p")),se(mp,G("p2p-webrtc-direct"),G("p2p")),se(pp,G("p2p-webrtc-direct")),se(mp,G("p2p-webrtc-direct"))),Rs=rt(fp,hp,pp,mp,_7,v7,ki,sA,iA,Oo,b7,x7),zX=rt(se(Rs,G("p2p-stardust"),G("p2p")),se(Rs,G("p2p-stardust"))),Lo=rt(se(Rs,G("p2p")),_7,v7,b7,x7,G("p2p")),E7=rt(se(Lo,G("p2p-circuit"),Lo),se(Lo,G("p2p-circuit")),se(G("p2p-circuit"),Lo),se(Rs,G("p2p-circuit")),se(G("p2p-circuit"),Rs),G("p2p-circuit")),S7=()=>rt(se(E7,S7),E7),sn=S7(),R7=rt(se(sn,Lo,sn),se(Lo,sn),se(sn,Lo),sn,Lo);var YX=rt(se(sn,G("webrtc"),G("p2p")),se(sn,G("webrtc")),se(Rs,G("webrtc"),G("p2p")),se(Rs,G("webrtc")),G("webrtc"));function A7(r){function e(t){let n;try{n=Z(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function se(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:A7(e),partialMatch:e}}function rt(...r){function e(n){let o=null;return r.some(s=>{let i=typeof s=="function"?s().partialMatch(n):s.partialMatch(n);return i!=null?(o=i,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:A7(e),partialMatch:e}}function G(r){let e=r;function t(o){let s;try{s=Z(o)}catch{return!1}let i=s.protoNames();return i.length===1&&i[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var cA="bootstrap",lA=50,uA=12e4,dA=1e3,gp=class extends me{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??dA,this.list=[];for(let n of t.list){if(!R7.matches(n)){this.log.error("Invalid multiaddr");continue}let o=Z(n),s=o.getPeerId();if(s==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let i={id:pe(s),multiaddrs:[o]};this.list.push(i)}this._init=t}[qo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Te]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??cA]:{value:this._init.tagValue??lA,ttl:this._init.tagTTL??uA}}}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function T7(r){return e=>new gp(e,r)}var C7={ERR_SIGNATURE_NOT_VALID:"ERR_SIGNATURE_NOT_VALID"};var ec;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={publicKey:new Uint8Array(0),payloadType:new Uint8Array(0),payload:new Uint8Array(0),signature:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.publicKey=t.bytes();break;case 2:o.payloadType=t.bytes();break;case 3:o.payload=t.bytes();break;case 5:o.signature=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(ec||(ec={}));var mr=class r{static createFromProtobuf=async e=>{let t=ec.decode(e),n=await ut(t.publicKey);return new r({peerId:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t.privateKey==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,s=e.marshal(),i=k7(n,o,s),c=await(await Ir(t.privateKey)).sign(i.subarray());return new r({peerId:t,payloadType:o,payload:s,signature:c})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new m("envelope signature is not valid for the given domain",C7.ERR_SIGNATURE_NOT_VALID);return n};peerId;payloadType;payload;signature;marshaled;constructor(e){let{peerId:t,payloadType:n,payload:o,signature:s}=e;this.peerId=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){if(this.peerId.publicKey==null)throw new Error("Missing public key");return this.marshaled==null&&(this.marshaled=ec.encode({publicKey:this.peerId.publicKey,payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return J(this.marshal(),e.marshal())}async validate(e){let t=k7(e,this.payloadType,this.payload);if(this.peerId.publicKey==null)throw new Error("Missing public key");return Qr(this.peerId.publicKey).verify(t.subarray(),this.signature)}},k7=(r,e,t)=>{let n=L(r),o=Ve(n.byteLength),s=Ve(e.length),i=Ve(t.length);return new ae(o,n,s,e,i,t)};function D7(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var N7="libp2p-peer-record",P7=Uint8Array.from([3,1]);var tc;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=oe((s,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),s.multiaddr!=null&&s.multiaddr.byteLength>0&&(i.uint32(10),i.bytes(s.multiaddr)),a.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let a={multiaddr:new Uint8Array(0)},c=i==null?s.len:s.pos+i;for(;s.pos<c;){let l=s.uint32();switch(l>>>3){case 1:a.multiaddr=s.bytes();break;default:s.skipType(l&7);break}}return a})),o),n.encode=s=>ne(s,n.codec()),n.decode=s=>re(s,n.codec())})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=oe((n,o,s={})=>{if(s.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let i of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(i,o);s.lengthDelimited!==!1&&o.ldelim()},(n,o)=>{let s={peerId:new Uint8Array(0),seq:0n,addresses:[]},i=o==null?n.len:n.pos+o;for(;n.pos<i;){let a=n.uint32();switch(a>>>3){case 1:s.peerId=n.bytes();break;case 2:s.seq=n.uint64();break;case 3:s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32()));break;default:n.skipType(a&7);break}}return s})),t),r.encode=n=>ne(n,r.codec()),r.decode=n=>re(n,r.codec())})(tc||(tc={}));var Kt=class r{static createFromProtobuf=e=>{let t=tc.decode(e),n=Ze(t.peerId),o=(t.addresses??[]).map(i=>Z(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=N7;static CODEC=P7;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=tc.encode({peerId:this.peerId.toBytes(),seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!D7(this.multiaddrs,e.multiaddrs))}};function ze(r,e){let t=En(r,e),n={read:async(o,s)=>{let i=await t.read(s);return o.decode(i)},write:async(o,s,i)=>{await t.write(s.encode(o),i)},writeV:async(o,s,i)=>{await t.writeV(o.map(a=>s.encode(a)),i)},pb:o=>({read:async s=>n.read(o,s),write:async(s,i)=>n.write(s,o,i),writeV:async(s,i)=>n.writeV(s,o,i),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var L7="circuit-relay-relay";var IQ=BigInt(131072),As="/libp2p/circuit/relay/0.2.0/hop",yp="/libp2p/circuit/relay/0.2.0/stop",TQ=30*1e3,CQ=30*1e3,wp=300;var Ep="ERR_RELAYED_DIAL",O7="ERR_HOP_REQUEST_FAILED";var B7=4096,M7=.001;var Bo;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ni.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),L1.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Pi.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),_t.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Ni.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=L1.codec().decode(o,o.uint32(),{limits:i.limits?.reservation});break}case 4:{a.limit=Pi.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 5:{a.status=_t.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>re(o,r.codec(),s)})(Bo||(Bo={}));var xn;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ni.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Pi.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),_t.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Ni.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.limit=Pi.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 4:{a.status=_t.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>re(o,r.codec(),s)})(xn||(xn={}));var Ni;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let s of t.addrs)n.uint32(18),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:de(0),addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&s.addrs.length===o.limits.addrs)throw new _r('decode error - map field "addrs" had too many elements',"ERR_MAX_LENGTH");s.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Ni||(Ni={}));var L1;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let s of t.addrs)n.uint32(18),n.bytes(s);t.voucher!=null&&(n.uint32(26),n.bytes(t.voucher)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={expire:0n,addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&s.addrs.length===o.limits.addrs)throw new _r('decode error - map field "addrs" had too many elements',"ERR_MAX_LENGTH");s.addrs.push(t.bytes());break}case 3:{s.voucher=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(L1||(L1={}));var Pi;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.duration=t.uint32();break}case 2:{s.data=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Pi||(Pi={}));var _t;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(_t||(_t={}));var bp;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(bp||(bp={}));(function(r){r.codec=()=>Ke(bp)})(_t||(_t={}));var U7;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={relay:de(0),peer:de(0),expiration:0n},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.relay=t.bytes();break}case 2:{s.peer=t.bytes();break}case 3:{s.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(U7||(U7={}));function xp(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}function _p(r){let{stream:e,remoteAddr:t,logger:n}=r,o=n.forComponent("libp2p:stream:converter"),s=!1,i=!1,a=e.close.bind(e);e.close=async f=>{await a(f),u(!0)};let c=e.abort.bind(e);e.abort=f=>{c(f),u(!0)};let l=e.sink.bind(e);e.sink=async f=>{try{await l(f)}catch(h){h.type!=="aborted"&&o.error("%s error in sink",t,h)}finally{i=!0,u()}};let d={log:o,sink:e.sink,source:async function*(){try{for await(let f of e.source)f instanceof Uint8Array?yield f:yield*f}finally{s=!0,u()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function u(f){f===!0&&(s=!0,i=!0),s&&i&&d.timeline.close==null&&(d.timeline.close=Date.now())}return d}var O1=class extends me{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,K(1/0,this.discoveryController.signal)}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(As,{filter:this.filter,onConnect:e=>{this.log("discovered relay %p",e),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,K(1/0,this.discoveryController.signal),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(As)],orders:[()=>Math.random()<.5?1:-1]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=new qt({concurrency:5});this.log("start random walk");for await(let n of this.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}this.log.trace("wait for space in queue for %p",n.id),await Ce(t.onSizeLessThan(10),this.discoveryController.signal),this.log("adding random peer %p to dial queue (length: %d)",n.id,t.size),t.add(async()=>{let o=_e([this.discoveryController.signal,AbortSignal.timeout(5e3)]);K(1/0,o);try{await this.connectionManager.openConnection(n.id,{signal:o})}finally{o.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p",n.id,o)})}await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};var vp=class extends me{connectionManager;relayStore;listeningAddrs;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.relayStore=e.relayStore,this.listeningAddrs=new st,this.relayStore.addEventListener("relay:removed",this._onRemoveRelayPeer)}_onRemoveRelayPeer=e=>{this.#e(e.detail)};async listen(e){this.log("listen on %a",e);let t=e.decapsulate("/p2p-circuit"),n=await this.connectionManager.openConnection(t);if(!this.relayStore.hasReservation(n.remotePeer)){this.log("making reservation on peer %p",n.remotePeer),await this.relayStore.addRelay(n.remotePeer,"configured");return}let o=this.relayStore.getReservation(n.remotePeer);if(o==null)throw new m("Did not have reservation after making reservation","ERR_NO_RESERVATION");if(this.listeningAddrs.has(n.remotePeer)){this.log("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,o.addrs.map(s=>Z(s).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening",{})}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){}#e(e){let t=this.listeningAddrs.has(e);this.log("relay peer removed %p - had reservation",e,t),this.listeningAddrs.delete(e),t&&(this.log.trace("removing relay event listener for peer %p",e),this.relayStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),this.safeDispatchEvent("close",{}))}};function F7(r){return new vp(r)}var mA=60*1e3*10,gA=60*1e3*5,yA=30*1e3,B1=class extends me{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;reservationCompletionTimeout;started;log;relayFilter;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new st,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e3,this.started=!1,this.relayFilter=o0(100),this.reserveQueue=new qt({concurrency:t?.reservationConcurrency??1,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("peer:disconnect",n=>{this.#t(n.detail)})}isStarted(){return this.started}start(){this.started=!0}afterStart(){this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{}))}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}async addRelay(e,t){if(this.peerId.equals(e)){this.log("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){this.log("not adding potential relay peer %p as the queue is full",e);return}if(this.reserveQueue.has(e)){this.log("potential relay peer %p is already in the reservation queue",e);return}if(this.relayFilter.has(e.toBytes())){this.log("potential relay peer %p has failed previously, not trying again",e);return}this.log("try to reserve relay slot with %p",e),await this.reserveQueue.add(async()=>{let n=Date.now();try{let o=this.reservations.get(e);if(o!=null){if(xp(o.reservation.expire)>mA){this.log("already have reservation on relay peer %p and it expires in more than 10 minutes",e);return}clearTimeout(o.timeout),this.reservations.delete(e)}if(t==="discovered"&&[...this.reservations.values()].reduce((u,f)=>(f.type==="discovered"&&u++,u),0)>=this.maxDiscoveredRelays){this.log("already have enough discovered relays");return}let s=AbortSignal.timeout(this.reservationCompletionTimeout);K(1/0,s);let i=await this.connectionManager.openConnection(e,{signal:s});if(i.remoteAddr.protoNames().includes("p2p-circuit")){this.log("not creating reservation over relayed connection");return}let a=await this.#e(i,{signal:s});this.log("created reservation on relay peer %p",e);let c=xp(a.expire),l=Math.min(Math.max(c-gA,yA),Math.pow(2,31)-1),d=setTimeout(()=>{this.addRelay(e,t).catch(u=>{this.log.error("could not refresh reservation to relay %p",e,u)})},l);this.reservations.set(e,{timeout:d,reservation:a,type:t}),await this.peerStore.merge(e,{tags:{[L7]:{value:1,ttl:c}}}),await this.transportManager.listen([Z(`/p2p/${e.toString()}/p2p-circuit`)]),this.safeDispatchEvent("relay:created-reservation",{detail:e})}catch(o){this.log.error("could not reserve slot on %p after %dms",e,Date.now()-n,o);let s=this.reservations.get(e);s!=null&&clearTimeout(s.timeout),this.reservations.delete(e),this.relayFilter.add(e.toBytes())}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(){return this.reservations.size}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(As,t),s=ze(n).pb(Bo);await s.write({type:Bo.Type.RESERVE},t);let i;try{i=await s.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(i.status===_t.OK&&i.reservation!=null){let c=!1,l=e.remoteAddr.bytes;for(let d of i.reservation.addrs)if(J(l,d)){c=!0;break}return c||i.reservation.addrs.push(l),i.reservation}let a=`reservation failed with status ${i.status??"undefined"}`;throw this.log.error(a),new Error(a)}#t(e){let t=this.reservations.get(e);t!=null&&(this.log("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};var EA=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(Z)}catch{return!1}return!0},Sp={maxInboundStopStreams:wp,maxOutboundStopStreams:wp,stopTimeout:3e4},M1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??Sp.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??Sp.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??Sp.stopTimeout;let n=t.discoverRelays??0;n>0&&(this.discovery=new O1(e,{filter:t.discoveryFilter??c0(B7,M7)}),this.discovery.addEventListener("relay:discover",o=>{this.reservationStore.addRelay(o.detail,"discovered").catch(s=>{this.log.error("could not add discovered relay %p",o.detail,s)})})),this.reservationStore=new B1(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:created-reservation",()=>{this.reservationStore.reservationCount()>=n&&this.discovery?.stopDiscovery()}),this.started=!1}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Te]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[Mr](){return this.discovery!=null?["@libp2p/identify"]:[]}[un]=!0;isStarted(){return this.started}async start(){await this.registrar.handle(yp,e=>{this.onStop(e).catch(t=>{this.log.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnTransientConnection:!0}),await wr(this.discovery,this.reservationStore),this.started=!0}async stop(){await Er(this.discovery,this.reservationStore),await this.registrar.unhandle(yp),this.started=!1}async dial(e,t){if(e.protoCodes().filter(p=>p===290).length!==1){let p="Invalid circuit relay address";throw this.log.error(p,e),new m(p,Ep)}let n=e.toString().split("/p2p-circuit"),o=Z(n[0]),s=Z(n[n.length-1]),i=o.getPeerId(),a=s.getPeerId();if(i==null||a==null){let p=`Circuit relay dial to ${e.toString()} failed as address did not have peer ids`;throw this.log.error(p),new m(p,Ep)}let c=pe(i),l=pe(a),d=!1,f=this.connectionManager.getConnections(c)[0];f==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new H("circuit-relay:open-connection")),f=await this.connectionManager.openConnection(c,t),d=!0):t.onProgress?.(new H("circuit-relay:reuse-connection"));let h;try{return t.onProgress?.(new H("circuit-relay:open-hop-stream")),h=await f.newStream(As),await this.connectV2({stream:h,connection:f,destinationPeer:l,destinationAddr:s,relayAddr:o,ma:e,disconnectOnFailure:d,onProgress:t.onProgress})}catch(p){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,p),h?.abort(p),d&&await f.close(),p}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:o,relayAddr:s,ma:i,disconnectOnFailure:a,onProgress:c}){try{let l=ze(e),d=l.pb(Bo);c?.(new H("circuit-relay:write-connect-message")),await d.write({type:Bo.Type.CONNECT,peer:{id:n.toBytes(),addrs:[Z(o).bytes]}}),c?.(new H("circuit-relay:read-connect-response"));let u=await d.read();if(u.status!==_t.OK)throw new m(`failed to connect via relay with status ${u?.status?.toString()??"undefined"}`,O7);let f=_p({stream:l.unwrap(),remoteAddr:i,localAddr:s.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger});return this.log("new outbound relayed connection %a",f.remoteAddr),await this.upgrader.upgradeOutbound(f,{transient:u.limit!=null,onProgress:c})}catch(l){throw this.log.error(`Circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,l),a&&await t.close(),l}}createListener(e){return F7({connectionManager:this.connectionManager,relayStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>sn.matches(t))}dialFilter(e){return this.listenFilter(e)}async onStop({connection:e,stream:t}){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let n=AbortSignal.timeout(this.stopTimeout),o=ze(t).pb(xn),s=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,s.type),s?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:xn.Type.STATUS,status:_t.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(s.type!==xn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:xn.Type.STATUS,status:_t.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!EA(s)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:xn.Type.STATUS,status:_t.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let i=Ze(s.peer.id);if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,i)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:xn.Type.STATUS,status:_t.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:xn.Type.STATUS,status:_t.OK},{signal:n});let a=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),c=this.addressManager.getAddresses()[0],l=_p({stream:o.unwrap().unwrap(),remoteAddr:a,localAddr:c,logger:this.logger});this.log("new inbound relayed connection %a",l.remoteAddr),await this.upgrader.upgradeInbound(l,{transient:s.limit!=null}),this.log("%s connection %a upgraded","inbound",l.remoteAddr)}};function Rp(r={}){return e=>new M1(e,r)}var V7=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},bA=new WeakMap;function xA({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(V7());let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(V7())},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((f,h)=>{i=()=>{d(),f(n)},a=h,s=(e??setTimeout)(i,t)});return o&&o.addEventListener("abort",l,{once:!0}),bA.set(u,()=>{c(s),s=null,i()}),u}}var _A=xA(),U1=_A;var an;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.observedAddresses!=null)for(let a of o.observedAddresses)s.uint32(18),s.bytes(a);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={observedAddresses:[]},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.observedAddresses.push(o.bytes());break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ne(o,r.codec()),r.decode=o=>re(o,r.codec())})(an||(an={}));function Ap(r,e){return bs.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:qu.matches(r)?!0:V5.matches(r)?Zt(r.toOptions().host)===!1:!1}var K7=1024*4,$7=100,F1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},V1=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??F1.timeout,this.retries=t.retries??F1.retries,this.maxInboundStreams=t.maxInboundStreams??F1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??F1.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[Mr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(rc,{notifyOnTransient:!0,onConnect:(e,t)=>{t.transient&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(rc,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(rc),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([rc],{signal:o.signal,runOnTransientConnection:!0});let s=ze(t,{maxDataLength:K7}).pb(an);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:an.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await s.read(o);if(a.type!==an.Type.CONNECT)throw this.log("A sent wrong message type"),new m("DCUtR message type was incorrect",Sn);let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new m("DCUtR connect message had no multiaddrs",Sn);let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:an.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await U1(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:$7});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(s){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,s),t?.abort(s),n===this.retries)throw s}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let s=o.multiaddr;return s.getPeerId()==null?s.encapsulate(`/p2p/${e.remotePeer}`):s}).filter(o=>Ap(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let s=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(s.transient)throw new Error("Could not open a new, non-transient, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,s.remoteAddr),await e.close({signal:o}),!0}catch(s){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,s)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let o=ze(e,{maxDataLength:K7}).pb(an);this.log("A receiving connect");let s=await o.read(n);if(s.type!==an.Type.CONNECT)throw this.log("B sent wrong message type"),new m("DCUtR message type was incorrect",Sn);if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new m("DCUtR connect message had no multiaddrs",Sn);let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs"),new m("DCUtR connect message had no dialable multiaddrs",Sn);if(this.log("A sending connect"),await o.write({type:an.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==an.Type.SYNC)throw new m("DCUtR message type was incorrect",Sn);this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:$7,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=Z(n);if(!Ap(o,this.transportManager))continue;t.push(o)}catch{}return t}};var rc="/libp2p/dcutr";function H7(r={}){return e=>new V1(e,r)}var q7="0.1.0",G7="id",W7="id/push",z7="1.0.0",Y7="1.0.0";var Mo;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let s of t.listenAddrs)n.uint32(18),n.bytes(s);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let s of t.protocols)n.uint32(26),n.string(s);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 5:o.protocolVersion=t.string();break;case 6:o.agentVersion=t.string();break;case 1:o.publicKey=t.bytes();break;case 2:o.listenAddrs.push(t.bytes());break;case 4:o.observedAddr=t.bytes();break;case 3:o.protocols.push(t.string());break;case 8:o.signedPeerRecord=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Mo||(Mo={}));var Z7=nt(Q7(),1),Ip=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,K1=(0,Z7.default)(),$1=Ip&&!K1,j7=K1&&!Ip,J7=K1&&Ip,e9=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!K1,H1=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,qZ=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",t9=typeof navigator<"u"&&navigator.product==="ReactNative";var tr={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnTransientConnection:!0,concurrency:32};function r9(r){if(r!=null&&r.length>0)try{return Z(r)}catch{}}function AA(r,e){return e!=null||(e=`${r.name}/${r.version}`,e9||j7?e+=` UserAgent=${globalThis.process.version}`:($1||H1||J7||t9)&&(e+=` UserAgent=${globalThis.navigator.userAgent}`)),e}async function q1(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new m("message was null or undefined","ERR_INVALID_MESSAGE");let s={};if(o.listenAddrs.length>0&&(s.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:Z(c)}))),o.protocols.length>0&&(s.protocols=o.protocols),o.publicKey!=null&&(s.publicKey=o.publicKey,!(await ut(o.publicKey)).equals(n.remotePeer)))throw new m("public key did not match remote PeerId","ERR_INVALID_PUBLIC_KEY");let i;if(o.signedPeerRecord!=null){t("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await mr.openAndCertify(c,Kt.DOMAIN),d=Kt.createFromProtobuf(l.payload);if(!d.peerId.equals(l.peerId))throw new m("signing key does not match PeerId in the PeerRecord","ERR_INVALID_SIGNING_KEY");if(!n.remotePeer.equals(d.peerId))throw new m("signing key does not match remote PeerId","ERR_INVALID_PEER_RECORD_KEY");let u;try{u=await r.get(d.peerId)}catch(f){if(f.code!=="ERR_NOT_FOUND")throw f}if(u!=null&&(s.metadata=u.metadata,u.peerRecordEnvelope!=null)){let f=await mr.createFromProtobuf(u.peerRecordEnvelope),h=Kt.createFromProtobuf(f.payload);h.seqNumber>=d.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",h.seqNumber,d.seqNumber),d=h,c=u.peerRecordEnvelope)}s.peerRecordEnvelope=c,s.addresses=d.multiaddrs.map(f=>({isCertified:!0,multiaddr:f})),i={seq:d.seqNumber,addresses:d.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t("patching %p with",n.remotePeer,s),await r.patch(n.remotePeer,s),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=L(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=L(o.protocolVersion)),t("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:o.protocolVersion,agentVersion:o.agentVersion,publicKey:o.publicKey,listenAddrs:o.listenAddrs.map(c=>Z(c)),observedAddr:o.observedAddr==null?void 0:Z(o.observedAddr),protocols:o.protocols,signedPeerRecord:i,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var Li=class{host;protocol;started;timeout;peerId;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnTransientConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??tr.timeout,this.maxInboundStreams=t.maxInboundStreams??tr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??tr.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??tr.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??tr.maxObservedAddresses,this.runOnTransientConnection=t.runOnTransientConnection??tr.runOnTransientConnection,this.host={protocolVersion:`${t.protocolPrefix??tr.protocolPrefix}/${q7}`,agentVersion:AA(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:L(this.host.agentVersion),ProtocolVersion:L(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var G1=class extends Li{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??tr.protocolPrefix}/${W7}/${Y7}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??tr.concurrency,(t.runOnSelfUpdate??tr.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Te]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(d=>d.decapsulateCode(te("p2p").code)),t=new Kt({peerId:this.peerId,multiaddrs:e}),n=await mr.seal(t,this.peerId),o=this.registrar.getProtocols(),s=await this.peerStore.get(this.peerId),i=U(s.metadata.get("AgentVersion")??L(this.host.agentVersion)),a=U(s.metadata.get("ProtocolVersion")??L(this.host.protocolVersion)),c=this;async function*l(){for(let d of c.connectionManager.getConnections())(await c.peerStore.get(d.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);K(1/0,h);try{f=await d.newStream(c.protocol,{signal:h,runOnTransientConnection:c.runOnTransientConnection}),await ze(f,{maxDataLength:c.maxMessageSize}).pb(Mo).write({listenAddrs:e.map(g=>g.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:i,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){c.log.error("could not push identify update to peer",p),f?.abort(p)}})}await Gt(on(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},i=await ze(n,{maxDataLength:this.maxMessageSize}).pb(Mo).read(o);await n.close(o),await q1(this.peerStore,this.events,this.log,t,i)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log("handled push from %p",t.remotePeer)}};var W1=class extends Li{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??tr.protocolPrefix}/${G7}/${z7}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??tr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(s=>{this.log.error("error during identify trigged by connection:open",s)})})}[Te]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);K(1/0,o),t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnTransientConnection:this.runOnTransientConnection});let s=await ze(n,{maxDataLength:this.maxMessageSize}).pb(Mo).read(t);return await n.close(t),s}catch(o){throw this.log.error("error while reading identify message",o),n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:s,observedAddr:i}=n;if(o==null)throw new m("public key was missing from identify message","ERR_MISSING_PUBLIC_KEY");let a=await ut(o);if(!e.remotePeer.equals(a))throw new m("identified peer does not match the expected peer","ERR_INVALID_PEER");if(this.peerId.equals(a))throw new m("identified peer is our own peer id?","ERR_INVALID_PEER");let c=r9(i);return this.log("identify completed for peer %p and protocols %o",a,s),this.log("our observed address is %a",c),c!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(this.log("storing our observed address %a",c),this.addressManager.addObservedAddr(c)),q1(this.peerStore,this.events,this.log,e,n)}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);K(1/0,o);try{let s=this.peerId.publicKey??new Uint8Array(0),i=await this.peerStore.get(this.peerId),a=this.addressManager.getAddresses().map(u=>u.decapsulateCode(te("p2p").code)),c=i.peerRecordEnvelope;if(a.length>0&&c==null){let u=new Kt({peerId:this.peerId,multiaddrs:a});c=(await mr.seal(u,this.peerId)).marshal().subarray()}let l=t.remoteAddr.bytes;F5.matches(t.remoteAddr)||(l=void 0),await ze(n).pb(Mo).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:s,listenAddrs:a.map(u=>u.bytes),signedPeerRecord:c,observedAddr:l,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(s){this.log.error("could not respond to identify request",s),n.abort(s)}}};function n9(r={}){return e=>new W1(e,r)}function o9(r={}){return e=>new G1(e,r)}var s9="/ipfs/kad/1.0.0",i9="/dht/record",Tp="/dht/provider";var nc;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={key:de(0),value:de(0),timeReceived:""},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(nc||(nc={}));function a9(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),s=String(r.getUTCMinutes()).padStart(2,"0"),i=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${s}:${i}.${c}Z`}function c9(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,s=parseInt(t[3],10),i=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,s,i,a,c,l))}var vt=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return nc.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:a9(this.timeReceived)}}static deserialize(e){let t=nc.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=c9(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};var l9;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.key=t.bytes();break}case 2:{o.value=t.bytes();break}case 3:{o.author=t.bytes();break}case 4:{o.signature=t.bytes();break}case 5:{o.timeReceived=t.string();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(l9||(l9={}));var Ee;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(Ee||(Ee={}));var z1;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(z1||(z1={}));(function(r){r.codec=()=>Ke(z1)})(Ee||(Ee={}));var Bi;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Bi||(Bi={}));var Cp;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(Cp||(Cp={}));(function(r){r.codec=()=>Ke(Cp)})(Bi||(Bi={}));var Oi;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let s of t.multiaddrs)n.uint32(18),n.bytes(s);t.connection!=null&&(n.uint32(24),Bi.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={id:de(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.id=t.bytes();break}case 2:{o.multiaddrs.push(t.bytes());break}case 3:{o.connection=Bi.codec().decode(t);break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Oi||(Oi={}));var Or;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&z1[t.type]!==0&&(n.uint32(8),Ee.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let s of t.closer)n.uint32(66),Oi.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Oi.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={type:Ee.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.type=Ee.codec().decode(t);break}case 10:{o.clusterLevel=t.int32();break}case 2:{o.key=t.bytes();break}case 3:{o.record=t.bytes();break}case 8:{o.closer.push(Oi.codec().decode(t,t.uint32()));break}case 9:{o.providers.push(Oi.codec().decode(t,t.uint32()));break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Or||(Or={}));function kp(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new Pt("kad-dht:query:send-query",{detail:t})),t}function oc(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new Pt("kad-dht:query:peer-response",{detail:t})),t}function Y1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new Pt("kad-dht:query:final-peer",{detail:t})),t}function gr(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new Pt("kad-dht:query:query-error",{detail:t})),t}function Dp(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new Pt("kad-dht:query:provider",{detail:t})),t}function sc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new Pt("kad-dht:query:value",{detail:t})),t}function Np(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new Pt("kad-dht:query:dial-peer",{detail:t})),t}function u9(r,e,t){if(t.length===0){let i="No records given";throw new m(i,"ERR_NO_RECORDS_RECEIVED")}let o=U(e).split("/");if(o.length<3){let i="Record key does not have a selector function";throw new m(i,"ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")}let s=r[o[1].toString()];if(s==null){let i=`No selector function configured for key type "${o[1]}"`;throw new m(i,"ERR_UNRECOGNIZED_KEY_PREFIX")}return t.length===1?0:s(e,t)}function TA(r,e){return 0}var d9={pk:TA};async function Mi(r,e){let t=e.key,o=U(t).split("/");if(o.length<3)return;let s=r[o[1].toString()];if(s==null){let i=`No validator available for key type "${o[1]}"`;throw new m(i,"ERR_INVALID_RECORD_KEY_TYPE")}await s(t,e.value)}var CA=async(r,e)=>{if(!(r instanceof Uint8Array))throw new m('"key" must be a Uint8Array',"ERR_INVALID_RECORD_KEY_NOT_BUFFER");if(r.byteLength<5)throw new m("invalid public key record","ERR_INVALID_RECORD_KEY_TOO_SHORT");if(U(r.subarray(0,4))!=="/pk/")throw new m("key was not prefixed with /pk/","ERR_INVALID_RECORD_KEY_BAD_PREFIX");let n=r.slice(4),o=await ke.digest(e);if(!J(n,o.bytes))throw new m("public key does not match passed in key","ERR_INVALID_RECORD_HASH_MISMATCH")},f9={pk:CA};var kA=L("/pk/");function h9(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=Zt(n);return o==null?!0:!o})}}async function Uo(r){return(await ke.digest(r)).digest}async function Br(r){return Uo(r.toBytes())}function Fo(r){return new De(`${i9}/${U(r,"base32")}`,!1)}function p9(r){return ve([kA,r.toBytes()])}function m9(r){return U(r.subarray(0,4))==="/pk/"}function g9(r){return Ze(r.subarray(4))}function Pp(r,e){let t=new Date;return new vt(r,e,t).serialize()}function y9(r,e=100){let t;return()=>{clearTimeout(t),t=setTimeout(()=>{r()},e)}}var DA=290,NA=54,PA=55,LA=56,OA=4,BA=41;function w9(r){let e=r.stringTuples();for(let t of e)if(t[0]===DA)return!1;if(e[0][0]===NA||e[0][0]===PA||e[0][0]===LA)return!0;if(e[0][0]===OA||e[0][0]===BA){let t=Zt(`${e[0][1]}`);return t==null||!t}return!1}var X1=class{log;components;validators;selectors;peerRouting;queryManager;network;constructor(e,t){let{validators:n,selectors:o,peerRouting:s,queryManager:i,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.validators=n,this.selectors=o,this.peerRouting=s,this.queryManager=i,this.network=a}async getLocal(e){this.log("getLocal %b",e);let t=Fo(e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=vt.deserialize(n);return await Mi(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let s=Pp(e,n);for(let{value:i,from:a}of t){if(J(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=Fo(e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray())}catch(d){this.log.error("Failed error correcting self",d)}continue}let c=!1,l={type:Ee.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&J(d.record.value,vt.deserialize(s).value)&&(c=!0),yield d;c||(yield gr({from:a,error:new m("value not put correctly","ERR_PUT_VALUE_INVALID")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=Pp(e,t),s=Fo(e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray()),yield*Xe(this.peerRouting.getClosestPeers(e,{signal:n.signal}),i=>Yt(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ee.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,n))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&J(d.record.value,vt.deserialize(o).value)||c.push(gr({from:a.peer.id,error:new m("value not put correctly","ERR_PUT_VALUE_INVALID")},n)));return c}),i=>on(i,{ordered:!1,concurrency:3}),async function*(i){for await(let a of i)yield*a})}async*get(e,t={}){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),s=0;try{s=u9(this.selectors,e,o)}catch(a){if(a.code!=="ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new m("best value was not found","ERR_NOT_FOUND");yield*this.sendCorrectionRecord(e,n,i,t),yield n[s]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let s=await this.getLocal(e);yield sc({value:s.value,from:this.components.peerId},t)}catch(s){this.log("error getting local value for %b",e,s)}let n=this,o=async function*({peer:s,signal:i}){for await(let a of n.peerRouting.getValueOrPeers(s,e,{signal:i}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield sc({from:s,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function b9(r,e){return{id:r.id.toBytes(),multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function ic(r){if(r.id==null)throw new Error("Invalid peer in message");return{id:Ze(r.id),multiaddrs:(r.multiaddrs??[]).map(e=>Z(e))}}var Q1=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:s,routingTable:i,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=s,this.routingTable=i,this.providers=a}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let s={type:Ee.ADD_PROVIDER,key:o,providers:[b9({id:this.components.peerId,multiaddrs:t})]},i=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let d of this.network.sendMessage(c.peer.id,s,n))d.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),i++),l.push(d)}catch(d){this.log.error("error sending provide record to peer %p",c.peer.id,d),l.push(gr({from:c.peer.id,error:d},n))}return l};yield*Xe(this.peerRouting.getClosestPeers(o,n),c=>Yt(c,l=>a(l)),c=>on(c,{ordered:!1,concurrency:3}),async function*(c){for await(let l of c)yield*l}),this.log("sent provider records to %d peers",i)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,s=e.multihash.bytes,i=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let f=await this.components.peerStore.get(u);d.push({id:u,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.code!=="ERR_NOT_FOUND")throw f;this.log("no peer store entry for %p",u)}if(yield oc({from:this.components.peerId,messageType:Ee.GET_PROVIDERS,providers:d},t),yield Dp({from:this.components.peerId,providers:d},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u}){let f={type:Ee.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d,f,{...t,signal:u})},l=new Ct(a);for await(let d of this.queryManager.run(s,c,t))if(yield d,d.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",d.providers.length,e,d.closer.length);let u=[];for(let f of d.providers)l.has(f.id)||(l.add(f.id),u.push(f));if(u.length>0&&(yield Dp({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var Ui=class{movingAverage;variance;deviation;forecast;timespan;previousTime;constructor(e){this.timespan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timespan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,s=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*s),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var MA=1.2,UA=2,FA=2e3,Fi=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Ui(e.interval??5e3),this.failure=new Ui(e.interval??5e3),this.next=new Ui(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??UA,this.timeoutMultiplier=e.timeoutMultiplier??MA,this.minTimeout=e.minTimeout??FA,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=_e([e.signal,n]);return K(1/0,o,n),o.start=Date.now(),o.timeout=t,o}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var Z1=class extends me{log;protocol;running;components;timeout;constructor(e,t){super();let{protocol:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=n,this.timeout=new Fi({...t.timeout??{},metrics:e.metrics,metricName:`${t.logPrefix.replaceAll(":","_")}_network_message_send_times_milliseconds`})}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new _r("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield Np({peer:e},n),yield kp({to:e,type:o},n);let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{s=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(s,t,n);s.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),s?.abort(l)}),yield oc({from:e,messageType:c.type,closer:c.closer.map(ic),providers:c.providers.map(ic),record:c.record==null?void 0:vt.deserialize(c.record)},n)}catch(a){s?.abort(a),this.log.error("could not send %s to %p",t.type,e,a),yield gr({from:e,error:a},n)}finally{this.timeout.cleanUp(i)}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new _r("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield Np({peer:e},n),yield kp({to:e,type:o},n);let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{s=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(s,t,n),s.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),s?.abort(c)}),yield oc({from:e,messageType:o},n)}catch(a){s?.abort(a),yield gr({from:e,error:a},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){let o=ze(e);await o.write(t,Or,n),await o.unwrap().close(n)}async _writeReadMessage(e,t,n){let o=ze(e);await o.write(t,Or,n);let s=await o.read(Or,n);return await o.unwrap().close(n),s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:ic(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:ic(i)})}),s}};function Vi(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var Ki=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await Br(e.id);this.addWitKadId(e,t)}addWitKadId(e,t){if(this.peerDistances.find(o=>o.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:nn(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,s)=>Vi(o.distance,s.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await Br(e),n=nn(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Vi(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var j1=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){let{routingTable:n,network:o,validators:s,queryManager:i,logPrefix:a}=t;this.routingTable=n,this.network=o,this.validators=s,this.queryManager=i,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${a}:peer-routing`)}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:Ee.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=p9(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let s=await ut(ql.marshalPublicKey({bytes:o.record.value}));if(!s.equals(e))throw new m("public key does not match id","ERR_PUBLIC_KEY_DOES_NOT_MATCH_ID");if(s.publicKey==null)throw new m("public key missing","ERR_PUBLIC_KEY_MISSING");yield sc({from:e,value:s.publicKey},t)}throw new m(`Node not responding with its public key: ${e.toString()}`,"ERR_INVALID_RECORD")}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield Y1({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,s=async function*({peer:i,signal:a}){let c={type:Ee.FIND_NODE,key:e.toBytes()};for await(let l of o.network.sendRequest(i,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let d=l.closer.find(u=>u.id.equals(e));d!=null&&(yield Y1({from:l.from,peer:d},t))}};for await(let i of this.queryManager.run(e.toBytes(),s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}n||(yield gr({from:this.peerId,error:new m("Not found","ERR_NOT_FOUND")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Uo(e),o=this.routingTable.closestPeers(n),s=this,i=new Ki(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await i.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){s.log("closerPeersSingle %s from %p",U(e,"base32"),c);let d={type:Ee.FIND_NODE,key:e};yield*s.network.sendRequest(c,d,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await i.add(l)})),yield c;this.log("found %d peers close to %b",i.length,e);for(let c of i.peers)yield Y1({from:this.peerId,peer:c},t)}async*getValueOrPeers(e,t,n={}){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let i="invalid record received, discarded";this.log(i),yield gr({from:o.from,error:new m(i,"ERR_INVALID_RECORD")},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new m("invalid record received","ERR_INVALID_RECORD");await Mi(this.validators,new vt(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await Uo(e),o=this.routingTable.closestPeers(n),s=[];for(let i of o)if(!i.equals(t))try{let a=await this.peerStore.get(i);s.push({id:i,multiaddrs:a.addresses.map(({multiaddr:c})=>c)})}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}return s.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",s.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),s}};var x9=nt(w0(),1);var J1=class{log;datastore;cache;cleanupInterval;provideValidity;syncQueue;started;cleaner;constructor(e,t={}){let{cacheSize:n,cleanupInterval:o,provideValidity:s}=t;this.log=e.logger.forComponent("libp2p:kad-dht:providers"),this.datastore=e.datastore,this.cleanupInterval=o??36e5,this.provideValidity=s??864e5,this.cache=(0,x9.default)(n??256),this.syncQueue=new Tr({concurrency:1}),this.started=!1}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cleaner=setInterval(()=>{this._cleanup().catch(e=>{this.log.error(e)})},this.cleanupInterval))}async stop(){this.started=!1,this.cleaner!=null&&(clearInterval(this.cleaner),this.cleaner=void 0)}async _cleanup(){await this.syncQueue.add(async()=>{let e=Date.now(),t=0,n=0,o=new Map,s=this.datastore.batch(),i=this.datastore.query({prefix:Tp});for await(let a of i)try{let{cid:c,peerId:l}=_9(a.key),d=v9(a.value).getTime(),u=Date.now(),f=u-d,h=f>this.provideValidity;if(this.log("comparing: %d - %d = %d > %d %s",u,d,f,this.provideValidity,h?"(expired)":""),h){n++,s.delete(a.key);let p=o.get(c)??new Set;p.add(l),o.set(c,p)}t++}catch(c){this.log.error(c.message)}o.size>0?(this.log("deleting %d / %d entries",n,t),await s.commit()):this.log("nothing to delete");for(let[a,c]of o){let l=ac(a),d=this.cache.get(l);if(d!=null){for(let u of c)d.delete(u);d.size===0?this.cache.remove(l):this.cache.set(l,d)}}this.log("Cleanup successful (%dms)",Date.now()-e)})}async _getProvidersMap(e){let t=ac(e),n=this.cache.get(t);return n==null&&(n=await qA(this.datastore,e),this.cache.set(t,n)),n}async addProvider(e,t){await this.syncQueue.add(async()=>{this.log("%p provides %s",t,e);let n=await this._getProvidersMap(e);this.log("loaded %s provs",n.size);let o=new Date;n.set(t.toString(),o);let s=ac(e);this.cache.set(s,n),await HA(this.datastore,e,t,o)})}async getProviders(e){return this.syncQueue.add(async()=>(this.log("get providers for %s",e),[...(await this._getProvidersMap(e)).keys()].map(n=>pe(n))),{throwOnTimeout:!0})}};function ac(r){let e=typeof r=="string"?r:U(r.multihash.bytes,"base32");return`${Tp}/${e}`}async function HA(r,e,t,n){let o=[ac(e),"/",t.toString()].join(""),s=new De(o),i=Ve(n.getTime());await r.put(s,i)}function _9(r){let e=r.toString().split("/");if(e.length!==5)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:e[3],peerId:e[4]}}async function qA(r,e){let t=new Map,n=r.query({prefix:ac(e)});for await(let o of n){let{peerId:s}=_9(o.key);t.set(s,v9(o.value))}return t}function v9(r){return new Date(Lt(r))}async function*S9(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:s,alpha:i,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:d,peersSeen:u,connectionManager:f}=r,h=new or({concurrency:i,sort:(y,w)=>Vi(y.options.distance,w.options.distance)}),p=await Uo(e);function g(y,w){if(y==null)return;u.add(y);let b=nn(w,p);h.add(async()=>{let E=[o];l!=null&&E.push(AbortSignal.timeout(l));let x=_e(E);K(1/0,x);try{for await(let T of s({key:e,peer:y,signal:x,pathIndex:a,numPaths:c})){if(x.aborted)return;if(T.name==="PEER_RESPONSE")for(let C of T.closer){if(u.has(C.id)){d("already seen %p in query",C.id);continue}if(n.equals(C.id)){d("not querying ourselves");continue}if(!await f.isDialable(C.multiaddrs)){d("not querying undialable peer");continue}let v=await Br(C.id),S=nn(v,p);if(Vi(S,b)!==-1){d("skipping %p as they are not closer to %b than %p",C.id,e,y);continue}d("querying closer peer %p",C.id),g(C.id,v)}h.safeDispatchEvent("completed",{detail:T})}}catch(T){if(!o.aborted)return gr({from:y,error:T},r)}finally{x.clear()}},{distance:b}).catch(E=>{d.error(E)})}g(t,await Br(t));try{for await(let y of h.toGenerator({signal:o}))y!=null&&(yield y)}catch(y){throw o.aborted?new m("Query aborted","ERR_QUERY_ABORTED"):y}}var ed=class{disjointPaths;alpha;shutDownController;running;queries;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;metrics;constructor(e,t){let{disjointPaths:n=20,alpha:o=3,logPrefix:s}=t;this.logPrefix=s,this.disjointPaths=n??20,this.running=!1,this.alpha=o??3,this.queries=0,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,e.metrics!=null&&(this.metrics={runningQueries:e.metrics.registerMetric(`${s.replaceAll(":","_")}_running_queries`),queryTime:e.metrics.registerMetric(`${s.replaceAll(":","_")}_query_time_seconds`)}),this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal)}isStarted(){return this.running}async start(){this.running=!0,this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");let o=this.metrics?.queryTime.timer();if(n.signal==null){let d=AbortSignal.timeout(18e4);K(1/0,d),n={...n,signal:d}}let s=new AbortController,i=_e([this.shutDownController.signal,s.signal,n.signal]);K(1/0,i,s.signal);let a=this.logger.forComponent(`${this.logPrefix}:query:`+U(e,"base58btc")),c=Date.now(),l=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(a("waiting for initial query-self query before continuing"),await Ce(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),a("query:start"),this.queries++,this.metrics?.runningQueries.update(this.queries);let d=await Uo(e),u=this.routingTable.closestPeers(d),f=u.slice(0,Math.min(this.disjointPaths,u.length));if(u.length===0){a.error("Running query with no peers");return}let h=new Ct,p=f.map((g,y)=>S9({key:e,startingPeer:g,ourPeerId:this.peerId,signal:i,query:t,pathIndex:y,numPaths:f.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:a,peersSeen:h,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let g of Ot(...p)){if(g.name==="QUERY_ERROR"&&a.error("query error",g.error),g.name==="PEER_RESPONSE")for(let y of[...g.closer,...g.providers])await this.connectionManager.isDialable(y.multiaddrs)&&await this.routingTable.add(y.id);yield g}l=!0}catch(d){if(!(!this.running&&d.code==="ERR_QUERY_ABORTED"))throw d}finally{l||(a("query exited early"),s.abort()),i.clear(),this.queries--,this.metrics?.runningQueries.update(this.queries),o?.(),a("query:done in %dms",Date.now()-c)}}};function GA(r){return r[Symbol.asyncIterator]!=null}function WA(r){if(GA(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var td=WA;var zA=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function YA(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=zA(r),u=(...h)=>{let p=t.multiArgs?h:h[0];t.filter&&!t.filter(p)||(c.push(p),t.count===c.length&&(n(),s(c)))},f=h=>{n(),i(h)};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=jr(o,{milliseconds:t.timeout});return s.cancel=n,s}return o}function cc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=YA(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var rd=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;started;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){let{peerRouting:n,logPrefix:o,count:s,interval:i,queryTimeout:a,routingTable:c}=t;this.peerId=e.peerId,this.log=e.logger.forComponent(`${o}:query-self`),this.started=!1,this.peerRouting=n,this.routingTable=c,this.count=s??20,this.interval=i??3e5,this.initialInterval=t.initialInterval??1e3,this.queryTimeout=a??5e3,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun}isStarted(){return this.started}start(){this.started||(this.started=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.started=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.started){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=ee(),this.started){this.controller=new AbortController;let e=AbortSignal.timeout(this.queryTimeout),t=_e([this.controller.signal,e]);K(1/0,t,this.controller.signal,e);try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await cc(this.routingTable,"peer:add",{signal:t})),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Xe(this.peerRouting.getClosestPeers(this.peerId.toBytes(),{signal:t,isSelfQuery:!0}),s=>no(s,this.count),async s=>td(s));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.started&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};function XA(r,e){if(r===e)return!0;if(r.length!==e.length)return!1;for(let t=0,n=r.length;t<n;++t)if(r[t]!==e[t])return!1;return!0}function A9(r,e){if(!(e instanceof Uint8Array))throw new TypeError(r+" is not a Uint8Array");if(e.byteLength!==32)throw new TypeError(r+" had incorrect length")}function lc(r){return Array.isArray(r?.peers)}var nd=class extends me{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;constructor(e){super(),this.localPeer=e.localPeer,this.prefixLength=e.prefixLength,this.kBucketSize=e.kBucketSize??uc,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfNodesToPing??3,A9("options.localPeer.kadId",e.localPeer.kadId),this.root={prefix:"",depth:0,peers:[]}}add(e){A9("peer.kadId",e?.kadId);let t=this._determineBucket(e.kadId);if(!(this._indexOf(t,e.kadId)>-1)){if(t.peers.length===this.splitThreshold&&t.depth<this.prefixLength){this._split(t),this.add(e);return}if(t.peers.length<this.kBucketSize){t.peers.push(e),this.safeDispatchEvent("added",{detail:e});return}this.safeDispatchEvent("ping",{detail:{oldContacts:t.peers.slice(0,this.numberOfNodesToPing),newContact:e}})}}*closest(e,t=this.kBucketSize){let n=new Ki(e,t);for(let o of this.toIterable())n.addWitKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Yt(n.peers,o=>o.id)}count(){function e(t){if(lc(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];this.safeDispatchEvent("removed",{detail:o})}}*toIterable(){function*e(t){if(lc(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+U(nn(e,t),"base16"))}_determineBucket(e){let n=U(e,"base2").substring(0,this.prefixLength);function o(s,i=0){return lc(s)?s:n[i]==="0"?o(s.left,i+1):o(s.right,i+1)}return o(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>XA(n.kadId,t))}_split(e){let t=e.depth+1,n={prefix:"0",depth:t,peers:[]},o={prefix:"1",depth:t,peers:[]};for(let s of e.peers)U(s.kadId,"base2")[t]==="0"?n.peers.push(s):o.peers.push(s);delete e.peers,e.left=n,e.right=o}};var QA="kad-close",ZA=50,uc=20,jA=32,JA=1e4,eI=10,od=class extends me{kBucketSize;kb;pingQueue;log;components;prefixLength;splitThreshold;pingTimeout;pingConcurrency;running;protocol;tagName;tagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??uc,this.pingTimeout=t.pingTimeout??JA,this.pingConcurrency=t.pingConcurrency??eI,this.running=!1,this.protocol=t.protocol,this.tagName=t.tagName??QA,this.tagValue=t.tagValue??ZA,this.prefixLength=t.prefixLength??jA,this.splitThreshold=t.splitThreshold??uc,this.pingQueue=new qt({concurrency:this.pingConcurrency,metricName:`${t.logPrefix.replaceAll(":","_")}_ping_queue`,metrics:this.components.metrics}),this.pingQueue.addEventListener("error",n=>{this.log.error("error pinging peer",n.detail)}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_max_depth`)})}isStarted(){return this.running}async start(){this.running=!0;let e=new nd({localPeer:{kadId:await Br(this.components.peerId),peerId:this.components.peerId},kBucketSize:this.kBucketSize,prefixLength:this.prefixLength,splitThreshold:this.splitThreshold,numberOfNodesToPing:1});this.kb=e,e.addEventListener("ping",n=>{this._onPing(n).catch(o=>{this.log.error("could not process k-bucket ping event",o)})});let t=0;for(let n of await this.components.peerStore.all())if(n.protocols.includes(this.protocol)){let o=await Br(n.id);this.kb.add({kadId:o,peerId:n.id}),t++}this.log("added %d peer store peers to the routing table",t),this._tagPeers(e)}async stop(){this.running=!1,this.pingQueue.clear(),this.kb=void 0}_tagPeers(e){let t=new Ct,n=y9(()=>{let o=new Ct(e.closest(e.localPeer.kadId,uc)),s=o.difference(t),i=t.difference(o);Promise.resolve().then(async()=>{for(let a of s)await this.components.peerStore.merge(a,{tags:{[this.tagName]:{value:this.tagValue}}});for(let a of i)await this.components.peerStore.merge(a,{tags:{[this.tagName]:void 0}})}).catch(a=>{this.log.error("Could not update peer tags",a)}),t=o});e.addEventListener("added",o=>{n(),this.safeDispatchEvent("peer:add",{detail:o.detail.peerId})}),e.addEventListener("removed",o=>{n(),this.safeDispatchEvent("peer:remove",{detail:o.detail.peerId})})}async _onPing(e){if(!this.running)return;let{oldContacts:t,newContact:n}=e.detail,s=(await Promise.all(t.map(async i=>{let a=this.pingQueue.find(i.peerId);return a!=null?a.join():this.pingQueue.add(async()=>{let c;try{let l={signal:AbortSignal.timeout(this.pingTimeout)};this.log("pinging old contact %p",i.peerId),c=await(await this.components.connectionManager.openConnection(i.peerId,l)).newStream(this.protocol,l);let u=ze(c);await u.write({type:Ee.PING},Or,l);let f=await u.read(Or,l);if(await u.unwrap().close(),f.type!==Ee.PING)throw new m(`Incorrect message type received, expected PING got ${f.type}`,"ERR_BAD_PING_RESPONSE");return!0}catch(l){return this.running&&this.kb!=null&&(this.log.error("could not ping peer %p",i.peerId,l),this.log("evicting old contact after ping failed %p",i.peerId),this.kb.remove(i.kadId)),c?.abort(l),!1}finally{this.metrics?.routingTableSize.update(this.size)}},{peerId:i.peerId})}))).filter(i=>i).length;this.running&&s<t.length&&this.kb!=null&&(this.log("adding new contact %p",n.peerId),this.kb.add(n))}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await Br(e);return this.kb?.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await Br(e);this.kb.add({kadId:t,peerId:e}),this.log("added %p with kad id %b",e,t),this.updateMetrics()}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await Br(e);this.kb.remove(t),this.updateMetrics()}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0;function o(s){if(lc(s)){s.depth>n&&(n=s.depth),t++,e+=s.peers.length;return}o(s.left),o(s.right)}o(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var I9=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var sd=15,id=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:s,refreshQueryTimeout:i,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=s??3e5,this.refreshQueryTimeout=i??3e4,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,s)=>{try{if(await this._refreshCommonPrefixLength(s,o,e),this._numPeersForCpl(t)===0){let i=Math.min(2*(s+1),n.length-1);for(let a=s+1;a<i+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(i){this.log.error(i)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let s=AbortSignal.timeout(this.refreshQueryTimeout);K(1/0,s);let i=await td(this.peerRouting.getClosestPeers(o.toBytes(),{signal:s}));this.log(`found ${i} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>sd&&(e=sd);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");let t=je(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e);return Ze(o)}async _makePeerId(e,t,n){if(n>sd)throw new Error(`Cannot generate peer ID for common prefix length greater than ${sd}`);let i=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=i&a|t&~a,l=I9[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,ke.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=nn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var ad=class{providers;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.providers=t.providers}async handle(e,t){if(this.log("start"),t.key==null||t.key.length===0)throw new m("Missing key","ERR_MISSING_KEY");let n;try{n=le.decode(t.key)}catch{throw new m("Invalid CID","ERR_INVALID_CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),await Promise.all(t.providers.map(async o=>{if(!e.equals(o.id)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log("received provider %p for %s (addrs %s)",e,n,o.multiaddrs.map(s=>Z(s).toString())),await this.providers.addProvider(n,Ze(o.id))}))}};var cd=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new m("Invalid FIND_NODE message received - key was missing","ERR_INVALID_MESSAGE");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);J(this.peerId.toBytes(),t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(te("p2p").code))});let o={type:Ee.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:s})=>s.length).map(s=>({id:s.id.toBytes(),multiaddrs:s.multiaddrs.map(i=>i.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var ld=class{peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:s}=t;this.log=e.logger.forComponent(`${s}:rpc:handlers:get-providers`),this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new m("Invalid GET_PROVIDERS message received - key was missing","ERR_INVALID_MESSAGE");let n;try{n=le.decode(t.key)}catch{throw new m("Invalid CID","ERR_INVALID_CID")}this.log("%p asking for providers for %s",e,n);let[o,s]=await Promise.all([this.providers.getProviders(n),this.peerRouting.getCloserPeersOffline(t.key,e)]),i=await this._getPeers(o),a=await this._getPeers(s.map(({id:l})=>l)),c={type:Ee.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:a.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)})),providers:i.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)}))};return this.log("got %s providers %s closerPeers",c.providers.length,c.closer.length),c}async _getAddresses(e){return[]}async _getPeers(e){let t=[];for(let n of e)try{let o=await this.peerStore.get(n),s=this.peerInfoMapper({id:n,multiaddrs:o.addresses.map(({multiaddr:i})=>i)});s.multiaddrs.length>0&&t.push(s)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}return t}};var ud=class{peerStore;datastore;peerRouting;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new m("Invalid key","ERR_INVALID_KEY");let o={type:Ee.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(m9(n)){this.log("is public key");let a=g9(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new m("No public key found in key book","ERR_NOT_FOUND");c=l.id.publicKey}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}if(c!=null)return this.log("returning found public key"),o.record=new vt(n,c,new Date).serialize(),o}let[s,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return s!=null&&(this.log("had record for %b in local datastore",n),o.record=s.serialize()),i.length>0&&(this.log("had %s closer peers in routing table",i.length),o.closer=i.map(a=>({id:a.id.toBytes(),multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Fo(e),n;try{n=await this.datastore.get(t)}catch(s){if(s.code==="ERR_NOT_FOUND")return;throw s}let o=vt.deserialize(n);if(o==null)throw new m("Invalid record","ERR_INVALID_RECORD");if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>1296e5){await this.datastore.delete(t);return}return o}};var dd=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var fd=class{components;validators;log;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new m(o,"ERR_EMPTY_RECORD")}try{let o=vt.deserialize(t.record);await Mi(this.validators,o),o.timeReceived=new Date;let s=Fo(o.key);await this.components.datastore.put(s,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,s)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var hd=class{handlers;routingTable;log;constructor(e,t){let{providers:n,peerRouting:o,validators:s,logPrefix:i,peerInfoMapper:a}=t;this.log=e.logger.forComponent(`${i}:rpc`),this.routingTable=t.routingTable,this.handlers={[Ee.GET_VALUE.toString()]:new ud(e,{peerRouting:o,logPrefix:i}),[Ee.PUT_VALUE.toString()]:new fd(e,{validators:s,logPrefix:i}),[Ee.FIND_NODE.toString()]:new cd(e,{peerRouting:o,logPrefix:i,peerInfoMapper:a}),[Ee.ADD_PROVIDER.toString()]:new ad(e,{providers:n,logPrefix:i}),[Ee.GET_PROVIDERS.toString()]:new ld(e,{peerRouting:o,providers:n,logPrefix:i,peerInfoMapper:a}),[Ee.PING.toString()]:new dd(e,{logPrefix:i})}}async handleMessage(e,t){try{await this.routingTable.add(e)}catch(o){this.log.error("Failed to update the kbucket store",o)}let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}return n.handle(e,t)}onIncomingStream(e){Promise.resolve().then(async()=>{let{stream:t,connection:n}=e,o=n.remotePeer;try{await this.routingTable.add(o)}catch(i){this.log.error(i)}let s=this;await Xe(t,i=>zt(i),async function*(i){for await(let a of i){let c=Or.decode(a);s.log("incoming %s from %p",c.type,o);let l=await s.handleMessage(o,c);l!=null&&(yield Or.encode(l))}},i=>Wt(i),t)}).catch(t=>{this.log.error(t)})}};var pd=class extends me{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new Pt("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var Op=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Gt(this.dht.provide(e,t))}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await Gt(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new m("Not found","ERR_NOT_FOUND")}},Bp=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new m("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},tI=32,rI=64,md=class extends me{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;constructor(e,t={}){super();let{kBucketSize:n,clientMode:o,validators:s,selectors:i,querySelfInterval:a,protocol:c,logPrefix:l,pingTimeout:d,pingConcurrency:u,maxInboundStreams:f,maxOutboundStreams:h,providers:p}=t,g=l??"libp2p:kad-dht";this.running=!1,this.components=e,this.log=e.logger.forComponent(g),this.protocol=c??s9,this.kBucketSize=n??20,this.clientMode=o??!0,this.maxInboundStreams=f??tI,this.maxOutboundStreams=h??rI,this.peerInfoMapper=t.peerInfoMapper??h9,this.routingTable=new od(e,{kBucketSize:n,pingTimeout:d,pingConcurrency:u,protocol:this.protocol,logPrefix:g}),this.providers=new J1(e,p??{}),this.validators={...f9,...s},this.selectors={...d9,...i},this.network=new Z1(e,{protocol:this.protocol,logPrefix:g});let y=ee();t.allowQueryWithZeroPeers===!0&&y.resolve(),this.queryManager=new ed(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:g,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.peerRouting=new j1(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:g}),this.contentFetching=new X1(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:g}),this.contentRouting=new Q1(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:g}),this.routingTableRefresh=new id(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:g}),this.rpc=new hd(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:g,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new pd(e,{protocol:this.protocol,logPrefix:g}),this.querySelf=new rd(e,{peerRouting:this.peerRouting,interval:a,initialInterval:t.initialQuerySelfInterval,logPrefix:g,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.network.addEventListener("peer",w=>{let b=w.detail;this.onPeerConnect(b).catch(E=>{this.log.error("could not add %p to routing table",b.id,E)}),this.dispatchEvent(new Pt("peer",{detail:b}))}),this.topologyListener.addEventListener("peer",w=>{let b=w.detail;Promise.resolve().then(async()=>{let E=await this.components.peerStore.get(b),x={id:b,multiaddrs:E.addresses.map(({multiaddr:T})=>T),protocols:E.protocols};await this.onPeerConnect(x)}).catch(E=>{this.log.error("could not add %p to routing table",b,E)})}),this.dhtPeerRouting=new Bp(this),this.dhtContentRouting=new Op(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",w=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let b=w.detail.peer.addresses.some(({multiaddr:x})=>w9(x)),E=this.getMode();b&&E==="client"?await this.setMode("server"):E==="server"&&!b&&await this.setMode("client")}).catch(b=>{this.log.error("error setting dht server mode",b)})})}[Symbol.toStringTag]="@libp2p/kad-dht";[Te]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[Mr]=["@libp2p/identify"];get[cn](){return this.dhtContentRouting}get[ln](){return this.dhtPeerRouting}get[qo](){return this}async onPeerConnect(e){if(this.log("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e){await this.components.registrar.unhandle(this.protocol),e==="client"?(this.log("enabling client mode"),this.clientMode=!0):(this.log("enabling server mode"),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running=!0,await this.setMode(this.clientMode?"client":"server"),await wr(this.querySelf,this.providers,this.queryManager,this.network,this.routingTable,this.topologyListener,this.routingTableRefresh)}async stop(){this.running=!1,await Er(this.querySelf,this.providers,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var T9;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER"})(T9||(T9={}));function C9(r={}){return e=>new md(e,r)}var U9=nt(M9(),1),qi=U9.default;var Y9=nt(z9(),1);var be;(function(r){r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH"})(be||(be={}));var bI="/pkcs8/",X9="/info/",Is=new WeakMap,Ts={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},Up={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function jn(r){return r==null||typeof r!="string"?!1:r===(0,Y9.default)(r.trim())&&r.length>0}async function Pe(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function _n(r){return new De(bI+r)}function Vo(r){return new De(X9+r)}var wd=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=qi(Up,t),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Ts.minKeyLength)throw new Error(`dek.keyLength must be least ${Ts.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Ts.minSaltLength)throw new Error(`dek.saltLength must be least ${Ts.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Ts.minIterationCount)throw new Error(`dek.iterationCount must be least ${Ts.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?va(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Is.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Te]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},Up),t=Math.ceil(Ts.minSaltLength/3)*3;return e.dek.salt=U(je(t),"base64"),e}static get options(){return Up}async createKey(e,t,n=2048){if(!jn(e)||e==="self")throw await Pe(),new m("Invalid key name",be.ERR_INVALID_KEY_NAME);if(typeof t!="string")throw await Pe(),new m("Invalid key type",be.ERR_INVALID_KEY_TYPE);let o=_n(e);if(await this.components.datastore.has(o))throw await Pe(),new m("Key name already exists",be.ERR_KEY_ALREADY_EXISTS);switch(t.toLowerCase()){case"rsa":if(!Number.isSafeInteger(n)||n<2048)throw await Pe(),new m("Invalid RSA key size",be.ERR_INVALID_KEY_SIZE);break;default:break}let i;try{let a=await xa(t,n),c=await a.id(),l=Is.get(this);if(l==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let d=l.dek,u=await a.export(d);i={name:e,id:c};let f=this.components.datastore.batch();f.put(o,L(u)),f.put(Vo(e),L(JSON.stringify(i))),await f.commit()}catch(a){throw await Pe(),a}return i}async listKeys(){let e={prefix:X9},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(U(n.value)));return t}async findKeyById(e){try{let n=(await this.listKeys()).find(o=>o.id===e);if(n==null)throw new m(`Key with id '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND);return n}catch(t){throw await Pe(),t}}async findKeyByName(e){if(!jn(e))throw await Pe(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);let t=Vo(e);try{let n=await this.components.datastore.get(t);return JSON.parse(U(n))}catch(n){throw await Pe(),this.log.error(n),new m(`Key '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND)}}async removeKey(e){if(!jn(e)||e==="self")throw await Pe(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);let t=_n(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Vo(e)),await o.commit(),n}async renameKey(e,t){if(!jn(e)||e==="self")throw await Pe(),new m(`Invalid old key name '${e}'`,be.ERR_OLD_KEY_NAME_INVALID);if(!jn(t)||t==="self")throw await Pe(),new m(`Invalid new key name '${t}'`,be.ERR_NEW_KEY_NAME_INVALID);let n=_n(e),o=_n(t),s=Vo(e),i=Vo(t);if(await this.components.datastore.has(o))throw await Pe(),new m(`Key '${t}' already exists`,be.ERR_KEY_ALREADY_EXISTS);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(U(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,L(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await Pe(),c}}async exportKey(e,t){if(!jn(e))throw await Pe(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw await Pe(),new m("Password is required",be.ERR_PASSWORD_REQUIRED);let n=_n(e);try{let o=await this.components.datastore.get(n),s=U(o),i=Is.get(this);if(i==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let a=i.dek;return await(await ii(s,a)).export(t)}catch(o){throw await Pe(),o}}async exportPeerId(e){let t="temporary-password",n=await this.exportKey(e,t),o=await ii(n,t);return ut(o.public.bytes,o.bytes)}async importKey(e,t,n){if(!jn(e)||e==="self")throw await Pe(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw await Pe(),new m("PEM encoded key is required",be.ERR_PEM_REQUIRED);let o=_n(e);if(await this.components.datastore.has(o))throw await Pe(),new m(`Key '${e}' already exists`,be.ERR_KEY_ALREADY_EXISTS);let i;try{i=await ii(t,n)}catch{throw await Pe(),new m("Cannot read the key, most likely the password is wrong",be.ERR_CANNOT_READ_KEY)}let a;try{a=await i.id();let d=Is.get(this);if(d==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let u=d.dek;t=await i.export(u)}catch(d){throw await Pe(),d}let c={name:e,id:a},l=this.components.datastore.batch();return l.put(o,L(t)),l.put(Vo(e),L(JSON.stringify(c))),await l.commit(),c}async importPeer(e,t){try{if(!jn(e))throw new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw new m("PeerId is required",be.ERR_MISSING_PRIVATE_KEY);if(t.privateKey==null)throw new m("PeerId.privKey is required",be.ERR_MISSING_PRIVATE_KEY);let n=await Ir(t.privateKey),o=_n(e);if(await this.components.datastore.has(o))throw await Pe(),new m(`Key '${e}' already exists`,be.ERR_KEY_ALREADY_EXISTS);let i=Is.get(this);if(i==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let a=i.dek,c=await n.export(a),l={name:e,id:t.toString()},d=this.components.datastore.batch();return d.put(o,L(c)),d.put(Vo(e),L(JSON.stringify(l))),await d.commit(),l}catch(n){throw await Pe(),n}}async getPrivateKey(e){if(!jn(e))throw await Pe(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);try{let t=_n(e),n=await this.components.datastore.get(t);return U(n)}catch(t){throw await Pe(),this.log.error(t),new m(`Key '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND)}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await Pe(),new m(`Invalid old pass type '${typeof e}'`,be.ERR_INVALID_OLD_PASS_TYPE);if(typeof t!="string")throw await Pe(),new m(`Invalid new pass type '${typeof t}'`,be.ERR_INVALID_NEW_PASS_TYPE);if(t.length<20)throw await Pe(),new m(`Invalid pass length ${t.length}`,be.ERR_INVALID_PASS_LENGTH);this.log("recreating keychain");let n=Is.get(this);if(n==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?va(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Is.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(_n(a.name)),l=U(c),d=await ii(l,o),u=s.toString(),f=await d.export(u),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(_n(a.name),L(f)),h.put(Vo(a.name),L(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function Ed(r={}){return e=>new wd(e,r)}var Gi=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new Fp}async consume(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);if(i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i.consumedPoints>this.points)throw this.blockDuration>0&&i.consumedPoints<=this.points+t&&(i=this.memoryStorage.set(o,i.consumedPoints,this.blockDuration)),new m("Rate limit exceeded","ERR_RATE_LIMIT_EXCEEDED",i);if(this.execEvenly&&i.msBeforeNext>0&&!i.isFirstInDuration){let a=Math.ceil(i.msBeforeNext/(i.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=i.consumedPoints*this.execEvenlyMinDelayMs),await U1(a)}return i}penalty(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}reward(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,-t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},Fp=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let s=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||s>0?(o.value+=t,{remainingPoints:0,msBeforeNext:s,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,s=this.storage.get(e);s!=null&&clearTimeout(s.timeoutId);let i={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,i),o>0&&(i.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),i.timeoutId.unref!=null&&i.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:i.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var ye;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(ye||(ye={}));var dc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),Vp=Object.freeze({NEW_STREAM:ye.NEW_STREAM,MESSAGE:ye.MESSAGE_INITIATOR,CLOSE:ye.CLOSE_INITIATOR,RESET:ye.RESET_INITIATOR}),Q9=Object.freeze({MESSAGE:ye.MESSAGE_RECEIVER,CLOSE:ye.CLOSE_RECEIVER,RESET:ye.RESET_RECEIVER});var Kp=1<<20,xI=4<<20,bd=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=Kp,t=xI){this._buffer=new ae,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw Object.assign(new Error("unprocessed message queue size too large!"),{code:"ERR_MSG_QUEUE_TOO_BIG"});let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.code==="ERR_MSG_TOO_BIG")throw l;break}let{id:n,type:o,length:s,offset:i}=this._headerInfo;if(this._buffer.length-i<s)break;let c={id:n,type:o};(o===ye.NEW_STREAM||o===ye.MESSAGE_INITIATOR||o===ye.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(i,i+s)),t.push(c),this._buffer.consume(i+s),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=j9(e),{value:o,offset:s}=j9(e,n),i=t&7;if(dc[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw Object.assign(new Error("message size too large!"),{code:"ERR_MSG_TOO_BIG"});return{id:t>>3,type:i,offset:n+s,length:o}}},_I=128,Z9=127;function j9(r,e=0){let t=0,n=0,o=e,s,i=r.length;do{if(o>=i||n>49)throw e=0,new RangeError("Could not decode varint");s=r.get(o++),t+=n<28?(s&Z9)<<n:(s&Z9)*Math.pow(2,n),n+=7}while(s>=_I);return e=o-e,{value:t,offset:e}}var $p=10*1024,Hp=class{_pool;_poolOffset;constructor(){this._pool=Ge($p),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ve(e.id<<3|e.type,n,o),o+=he(e.id<<3|e.type),(e.type===ye.NEW_STREAM||e.type===ye.MESSAGE_INITIATOR||e.type===ye.MESSAGE_RECEIVER)&&e.data!=null?(Ve(e.data.length,n,o),o+=he(e.data.length)):(Ve(0,n,o),o+=he(0));let s=n.subarray(this._poolOffset,o);$p-o<100?(this._pool=Ge($p),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===ye.NEW_STREAM||e.type===ye.MESSAGE_INITIATOR||e.type===ye.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},vI=new Hp;async function*J9(r){for await(let e of r){let t=new ae;vI.write(e,t),yield t}}var qp=class extends bn{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?Vp:Q9,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:Vp.NEW_STREAM,data:new ae(L(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function ey(r){let{id:e,name:t,send:n,onEnd:o,type:s="initiator",maxMsgSize:i=Kp}=r;return new qp({id:s==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:s==="initiator"?"outbound":"inbound",maxDataSize:i,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${s}:${e}`)})}var SI=1024,RI=1024,AI=1024*1024*4,II=5,TI=500;function ty(r){let e={...r,type:`${dc[r.type]} (${r.type})`};return r.type===ye.NEW_STREAM&&(e.data=U(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===ye.MESSAGE_INITIATOR||r.type===ye.MESSAGE_RECEIVER)&&(e.data=U(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var xd=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??TI,this.sink=this._createSink(),this._source=At({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=Xe(this._source,n=>J9(n)),this.closeController=new AbortController,this.rateLimiter=new Gi({points:t.disconnectThreshold??II,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new Error("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:s}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??RI))throw new m("Too many outbound streams open","ERR_TOO_MANY_OUTBOUND_STREAMS");if(s.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=ey({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,ty(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),s.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return s.set(t,c),c}_createSink(){return async t=>{let n=()=>{I1(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new bd(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let s of t)for(let i of o.write(s))await this._handleIncoming(i);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",ty(e)),e.type===ye.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??SI)){this.log("too many inbound streams open"),this._source.push({id:t,type:ye.RESET_RECEIVER});try{await this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}return}let a=this._newReceiverStream({id:t,name:U(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let s=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(s==null){this.log("missing stream %s for message type %s",t,dc[n]);try{await this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}let i=this._init.maxStreamBufferSize??AI;try{switch(n){case ye.MESSAGE_INITIATOR:case ye.MESSAGE_RECEIVER:if(s.sourceReadableLength()>i)throw this._source.push({id:e.id,type:n===ye.MESSAGE_INITIATOR?ye.RESET_RECEIVER:ye.RESET_INITIATOR}),new m("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers","ERR_STREAM_INPUT_BUFFER_FULL");s.sourcePush(e.data);break;case ye.CLOSE_INITIATOR:case ye.CLOSE_RECEIVER:s.remoteCloseWrite();break;case ye.RESET_INITIATOR:case ye.RESET_RECEIVER:s.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),s.abort(a)}}};var Gp=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Te]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new xd(this.components,{...e,...this._init})}};function ry(r={}){return e=>new Gp(e,r)}var ny="1.0.0",oy="ping",sy="ipfs";var Wp="ERR_WRONG_PING_ACK";var _d=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnTransientConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??sy}/${oy}/${ny}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnTransientConnection=t.runOnTransientConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now();AbortSignal.timeout(this.timeout).addEventListener("abort",()=>{t?.abort(new m("ping timeout",fn))}),Xe(t,async function*(s){let i=0;for await(let a of s){if(i+=a.byteLength,i>32){t?.abort(new m("Too much data received",Sn));return}yield a}},t).catch(s=>{this.log.error("incoming ping from %p failed with error",e.connection.remotePeer,s),t?.abort(s)}).finally(()=>{let s=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,s)})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=je(32),s=await this.components.connectionManager.openConnection(e,t),i,a=()=>{};if(t.signal==null){let c=AbortSignal.timeout(this.timeout);t={...t,signal:c}}try{i=await s.newStream(this.protocol,{...t,runOnTransientConnection:this.runOnTransientConnection}),a=()=>{i?.abort(new m("ping timeout",fn))},t.signal?.addEventListener("abort",a,{once:!0});let c=await Xe([o],i,async d=>xs(d)),l=Date.now()-n;if(c==null)throw new m(`Did not receive a ping ack after ${l}ms`,Wp);if(!J(o,c.subarray()))throw new m(`Received wrong ping ack after ${l}ms`,Wp);return this.log("ping %p complete in %dms",s.remotePeer,l),l}catch(c){throw this.log.error("error while pinging %p",s.remotePeer,c),i?.abort(c),c}finally{t.signal?.removeEventListener("abort",a),i!=null&&await i.close()}}};function ay(r={}){return e=>new _d(e,r)}var yr;(function(r){r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_DATA_CHANNEL="ERR_DATA_CHANNEL",r.ERR_CONNECTION_CLOSED="ERR_CONNECTION_CLOSED",r.ERR_HASH_NOT_SUPPORTED="ERR_HASH_NOT_SUPPORTED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_INVALID_FINGERPRINT="ERR_INVALID_FINGERPRINT",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS"})(yr||(yr={}));var Ko=class extends m{constructor(e,t){super(`WebRTC transport error: ${e}`,t??""),this.name="WebRTCTransportError"}};var zp=class extends Ko{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`,yr.ERR_DATA_CHANNEL),this.name="WebRTC/DataChannelError"}};function Jp(r,e){return new zp(r,e)}var Yp=class extends Ko{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`,yr.ERR_INVALID_MULTIADDR),this.name="WebRTC/InappropriateMultiaddrError"}};function vd(r){return new Yp(r)}var Xp=class extends Ko{constructor(e){super(`There was a problem with a provided argument: ${e}`,yr.ERR_INVALID_PARAMETERS),this.name="WebRTC/InvalidArgumentError"}};function fc(r){return new Xp(r)}var Qp=class extends Ko{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`,yr.ERR_INVALID_FINGERPRINT),this.name="WebRTC/InvalidFingerprintError"}};function e3(r,e){return new Qp(r,e)}var Zp=class extends Ko{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`,yr.ERR_NOT_IMPLEMENTED),this.name="WebRTC/UnimplementedError"}};function cy(r){return new Zp(r)}var jp=class extends Ko{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `,yr.ERR_HASH_NOT_SUPPORTED),this.name="WebRTC/UnsupportedHashAlgorithmError"}};function ly(r){return new jp(r)}var uy=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,s;n<o;n++)(s||!(n in e))&&(s||(s=Array.prototype.slice.call(e,0,n)),s[n]=e[n]);return r.concat(s||Array.prototype.slice.call(e))},NI=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var PI=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var LI=function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r}();var OI=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var BI=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var MI=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,UI=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,dy=3,FI=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",MI]],fy=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function py(r){return r?hy(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new BI:typeof navigator<"u"?hy(navigator.userAgent):$I()}function VI(r){return r!==""&&FI.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var s=o.exec(r);return!!s&&[n,s]},!1)}function hy(r){var e=VI(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new OI;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<dy&&(o=uy(uy([],o,!0),HI(dy-o.length),!0)):o=[];var s=o.join("."),i=KI(r),a=UI.exec(r);return a&&a[1]?new LI(t,s,i,a[1]):new NI(t,s,i)}function KI(r){for(var e=0,t=fy.length;e<t;e++){var n=fy[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function $I(){var r=typeof process<"u"&&process.version;return r?new PI(process.version.slice(1)):null}function HI(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var my=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"];var gy=py(),hc=gy!=null&&gy.name==="firefox",Sd=async function*(){},Rd=async r=>{},qI=30*1e3;function yy(r,e,t=qI,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=ee(),s=!1;r.bufferedAmountLowThreshold=0;let i=()=>{s||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",i,{once:!0}),r.addEventListener("bufferedamountlow",()=>{s=!0,r.removeEventListener("close",i),o.resolve()}),await jr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function pc(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??my.map(e=>({urls:[e]})),r}var Cs=class{log;peerConnection;remoteAddr;timeline;metrics;source=Sd();sink=Rd;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",this.peerConnection.connectionState,"initial state",n),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var $t;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.flag!=null&&(s.uint32(8),r.Flag.codec().encode(o.flag,s)),o.message!=null&&(s.uint32(18),s.bytes(o.message)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.flag=r.Flag.codec().decode(o);break;case 2:i.message=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ne(o,r.codec()),r.decode=o=>re(o,r.codec())})($t||($t={}));var GI=2*1024*1024,WI=30*1e3,Ad=16*1024;function zI(r=Ad){let e=he(r-he(r)),t=1+he(Object.keys($t.Flag).length-1),n=1,o=r-e-t-n,s=he(o);return e+t+n+s}var YI=zI(),XI=5e3,QI=5e3,t3=class extends bn{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await jr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(s){this.log.error("error receiving FIN_ACK",s)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(s=>{this.log.error("error ending stream",s)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=At(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??WI,this.maxBufferedAmount=e.maxBufferedAmount??GI,this.maxMessageSize=(e.maxMessageSize??Ad)-YI,this.receiveFinAck=ee(),this.finAckTimeout=e.closeTimeout??XI,this.openTimeout=e.openTimeout??QI,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new m("Unknown datachannel state","ERR_INVALID_STATE")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.receiveFinAck.resolve(),this.close().catch(s=>{this.log.error("error closing stream after channel closed",s)})},this.channel.onerror=o=>{let s=o.error;this.abort(s)},this.channel.onmessage=async o=>{let{data:s}=o;s===null||s.byteLength===0||this.incomingData.push(new Uint8Array(s,0,s.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of zt(this.incomingData)){let s=n.processIncomingProtobuf(o);s!=null&&n.sourcePush(new ae(s))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(t&&this.channel.bufferedAmount>this.maxBufferedAmount)try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await cc(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof Ro?new m(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`,"ERR_BUFFER_CLEAR_TIMEOUT"):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new m(`Invalid datachannel state - ${this.channel.readyState}`,"ERR_INVALID_STATE");this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await cc(this.channel,"open",{timeout:this.openTimeout}),this.log('channel state is now "%s", sending data',this.channel.readyState)),this.channel.send(e.subarray())}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=$t.encode({message:n}),s=Wt.single(o);await this._sendMessage(s),e.consume(t)}}async sendReset(){await this._sendFlag($t.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag($t.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await Ce(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorCode:"ERR_FIN_ACK_NOT_RECEIVED"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){await this._sendFlag($t.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=$t.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===$t.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag($t.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===$t.Flag.RESET&&this.reset(),t.flag===$t.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===$t.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',this.channel.readyState,e.toString()),!1;this.log.trace("sending flag %s",e.toString());let t=$t.encode({flag:e}),n=Wt.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s",e.toString(),o)}return!1}};function Wi(r){let{channel:e,direction:t}=r;return new t3({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var wy="/webrtc",$o=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??wy,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:datachannelmuxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},s=Wi({channel:n,direction:"inbound",onEnd:i=>{o.onEnd(i)},logger:e.logger,...this.dataChannelOptions});o.stream=s,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(i=>i.stream.id!==s.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new r3(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},r3=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??wy,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=Wi({channel:n,direction:"inbound",onEnd:()=>{this.log("incoming channel %s ended with state %s",n.id,n.readyState),this.#e(o,n)},logger:this.logger,...this.dataChannelOptions});this.streams.push(o),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(o)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),yy(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=Sd();sink=Rd;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=Wi({channel:e,direction:"outbound",onEnd:()=>{this.log("outgoing channel %s ended with state %s",e.id,e.readyState),this.#e(t,e)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(t),this.metrics?.increment({outgoing_stream:!0}),t}};var ks=globalThis.RTCPeerConnection,Id=globalThis.RTCSessionDescription,Ey=globalThis.RTCIceCandidate;var rr;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.data!=null&&(s.uint32(18),s.string(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.data=o.string();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ne(o,r.codec()),r.decode=o=>re(o,r.codec())})(rr||(rr={}));var Td=async(r,e,t)=>{try{let n=ee();for(jI(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal}).catch(()=>{})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==rr.Type.ICE_CANDIDATE)throw new m("ICE candidate message expected","ERR_NOT_ICE_CANDIDATE");let s=JSON.parse(o.data??"null");if(s===""||s===null){t.onProgress?.(new H("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let i=new Ey(s);t.log.trace("%s received new ICE candidate %o",t.direction,s);try{t.onProgress?.(new H("webrtc:add-ice-candidate",i.candidate)),await r.addIceCandidate(i)}catch(a){t.log.error("%s bad candidate received",t.direction,s,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0)throw n}};function ZI(r){return hc?r.iceConnectionState:r.connectionState}function jI(r,e){r[hc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(ZI(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new m("RTCPeerConnection was closed","ERR_CONNECTION_CLOSED_BEFORE_CONNECTED"));break;default:break}}}async function by({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:s,transportManager:i,log:a,logger:c,onProgress:l}){let{baseAddr:d}=xy(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",d);let u=d.getPeerId();if(u==null)throw new m("Relay peer was missing","ERR_INVALID_ADDRESS");let f=s.getConnections(pe(u)),h,p=!1;f.length===0?(l?.(new H("webrtc:dial-relay")),h=await i.dial(d,{signal:t,onProgress:l}),p=!0):(l?.(new H("webrtc:reuse-relay-connection")),h=f[0]);try{l?.(new H("webrtc:open-signaling-stream"));let g=await h.newStream(Cd,{signal:t,runOnTransientConnection:!0}),y=ze(g).pb(rr),w=new ks(r),b=new $o({logger:c},{peerConnection:w,dataChannelOptions:e});try{let E=w.createDataChannel("init");w.onicecandidate=({candidate:v})=>{let S=JSON.stringify(v?.toJSON()??null);a.trace("initiator sending ICE candidate %o",v),y.write({type:rr.Type.ICE_CANDIDATE,data:S},{signal:t}).catch(I=>{a.error("error sending ICE candidate",I)})},w.onicecandidateerror=v=>{a.error("initiator ICE candidate error",v)};let x=await w.createOffer().catch(v=>{throw a.error("could not execute createOffer",v),new m("Failed to set createOffer","ERR_SDP_HANDSHAKE_FAILED")});a.trace("initiator send SDP offer %s",x.sdp),l?.(new H("webrtc:send-sdp-offer")),await y.write({type:rr.Type.SDP_OFFER,data:x.sdp},{signal:t}),await w.setLocalDescription(x).catch(v=>{throw a.error("could not execute setLocalDescription",v),new m("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")}),l?.(new H("webrtc:read-sdp-answer"));let T=await y.read({signal:t});if(T.type!==rr.Type.SDP_ANSWER)throw new m("Remote should send an SDP answer","ERR_SDP_HANDSHAKE_FAILED");a.trace("initiator receive SDP answer %s",T.data);let C=new Id({type:"answer",sdp:T.data});return await w.setRemoteDescription(C).catch(v=>{throw a.error("could not execute setRemoteDescription",v),new m("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await Td(w,y,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),E.close(),l?.(new H("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await g.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:w,muxerFactory:b}}catch(E){throw a.error("outgoing signaling error",E),w.close(),g.abort(E),E}finally{w.onicecandidate=null,w.onicecandidateerror=null}}finally{if(p)try{await h.close({signal:t})}catch(g){h.abort(g)}}}var kd=class extends me{peerId;transportManager;shutdownController;constructor(e,t){super(),this.peerId=e.peerId,this.transportManager=e.transportManager,this.shutdownController=t.shutdownController}async listen(){this.safeDispatchEvent("listening",{})}getAddrs(){return this.transportManager.getListeners().filter(e=>e!==this).map(e=>e.getAddrs().filter(t=>sn.matches(t)).map(t=>t.encapsulate(`/webrtc/p2p/${this.peerId}`))).flat()}async close(){this.shutdownController.abort(),this.safeDispatchEvent("close",{})}};async function _y({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let s=ze(e).pb(rr);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),s.write({type:rr.Type.ICE_CANDIDATE,data:u},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})};let a=await s.read({signal:t});if(a.type!==rr.Type.SDP_OFFER)throw new m(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `,"ERR_SDP_HANDSHAKE_FAILED");o.trace("recipient receive SDP offer %s",a.data);let c=new Id({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new m("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new m("Failed to create answer","ERR_SDP_HANDSHAKE_FAILED")});o.trace("recipient send SDP answer %s",l.sdp),await s.write({type:rr.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new m("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")}),o.trace("recipient read candidates until connected"),await Td(r,s,{direction:"recipient",signal:t,log:o})}catch(a){if(r.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let i=Z(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",i),{remoteAddress:i}}var JI="/webrtc",eT="/p2p-circuit",Cd="/webrtc-signaling/0.0.1",tT=30*1e3,Dd=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,K(1/0,this.shutdownController.signal),e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}[un]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Te]=["@libp2p/transport"];[Mr]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(Cd,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnTransientConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(Cd),this._started=!1}createListener(e){return new kd(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(W5.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:s}=await by({rtcConfiguration:await pc(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),i=new Cs(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,muxerFactory:s,onProgress:t.onProgress});return this._closeOnShutdown(o,i),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??tT),o=new ks(await pc(this.init.rtcConfiguration)),s=new $o(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i}=await _y({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new Cs(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:i,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:s}),this._closeOnShutdown(o,a)}catch(i){throw this.log.error("incoming signaling error",i),o.close(),t.abort(i),i}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function xy(r){let e=r.toString().split(JI+"/");if(e.length!==2)throw new m("webrtc protocol was not present in multiaddr",yr.ERR_INVALID_MULTIADDR);if(!e[0].includes(eT))throw new m("p2p-circuit protocol was not present in multiaddr",yr.ERR_INVALID_MULTIADDR);let t=Z(e[0]),o=Z("/"+e[1]).getPeerId();if(o==null)throw new m("destination peer id was missing",yr.ERR_INVALID_MULTIADDR);let s=t.protos().pop();if(s===void 0)throw new m("invalid multiaddr",yr.ERR_INVALID_MULTIADDR);return s.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:pe(o)}}var n3=Object.values(xr).map(r=>r.decoder).reduce((r,e)=>r.or(e));function vy(r,e){let t=r.getConfiguration().certificates?.at(0);if(t?.getFingerprints==null){e.log.trace("fetching fingerprint from local SDP");let o=r.localDescription;return o==null?void 0:nT(o.sdp)}if(e.log.trace("fetching fingerprint from local certificate"),t.getFingerprints().length===0)return;let n=t.getFingerprints()[0].value;if(n==null)throw e3("","no fingerprint on local certificate");return n}var rT=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function nT(r){return r.match(rT)?.groups?.fingerprint}function oT(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function Nd(r){let t=r.stringTuples().filter(n=>n[0]===Ay).map(n=>n[1])[0];if(t===void 0||t==="")throw vd(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function o3(r){return Bt.decode(n3.decode(r))}function sT(r){let e=o3(Nd(r)),t=s3(e.code),n=e.digest.reduce((s,i)=>s+i.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw e3(n,r.toString());return[`${t} ${o.join(":").toUpperCase()}`,n]}function s3(r){switch(r){case 17:return"SHA-1";case 18:return"SHA-256";case 19:return"SHA-512";default:throw ly(r)}}function iT(r,e){let{host:t,port:n}=r.toOptions(),o=oT(r),[s]=sT(r);return`v=0
20
20
  o=- 0 0 IN ${o} ${t}
21
21
  s=-
22
22
  c=IN ${o} ${t}
@@ -29,26 +29,26 @@ a=ice-ufrag:${e}
29
29
  a=ice-pwd:${e}
30
30
  a=fingerprint:${s}
31
31
  a=sctp-port:5000
32
- a=max-message-size:16384
32
+ a=max-message-size:${Ad}
33
33
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host\r
34
- `}function dy(r,e){return{type:"answer",sdp:zI(r,e)}}function fy(r,e){if(r.sdp===void 0)throw lc("Can't munge a missing SDP");return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
34
+ `}function Sy(r,e){return{type:"answer",sdp:iT(r,e)}}function Ry(r,e){if(r.sdp===void 0)throw fc("Can't munge a missing SDP");return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
35
35
  a=ice-ufrag:`+e+`
36
36
  `).replace(/\na=ice-pwd:[^\n]*\n/,`
37
37
  a=ice-pwd:`+e+`
38
- `),r}var py=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),my=r=>[...Array(r)].map(()=>py.at(Math.floor(Math.random()*py.length))).join("");var XI=1e4,boe=te("webrtc-direct").code,hy=te("certhash").code,vd=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}[ln]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Be]=["@libp2p/transport"];async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw X9("WebRTCTransport.createListener")}listenFilter(e){return e.filter(D5.exactMatch)}dialFilter(e){return this.listenFilter(e)}async _connect(e,t){let n=new AbortController,o=n.signal,s=e.getPeerId();if(s===null)throw pd("we need to have the remote's PeerId");let i=me(s),a=Kp(_d(e)),c=await Is.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:$p(a.code)}),l=new Is({...await dc(this.init.rtcConfiguration),certificates:[c]});try{let d=new Promise((R,k)=>{let O=l.createDataChannel("",{negotiated:!0,id:0}),N=setTimeout(()=>{let M=`Data channel was never opened: state: ${O.readyState}`;this.log.error(M),this.metrics?.dialerEvents.increment({open_error:!0}),k(Bp("data",M))},XI);O.onopen=M=>{clearTimeout(N),R(O)},O.onerror=M=>{clearTimeout(N);let Q=`Error opening a data channel for handshaking: ${M.target?.toString()??"not specified"}`;this.log.error(Q),this.metrics?.dialerEvents.increment({unknown_error:!0}),k(Bp("data",Q))}}),u="libp2p+webrtc+v1/"+my(32),h=await l.createOffer(),f=fy(h,u);await l.setLocalDescription(f);let p=dy(e,u);await l.setRemoteDescription(p);let m=await d,y=this.components.peerId,w=this.generateNoisePrologue(l,a.code,e),b=Ti({prologueBytes:w})(this.components),E=Gi({channel:m,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),x={...E,sink:E.sink.bind(E),source:async function*(){for await(let R of E.source)for(let k of R)yield k}()},_=new As(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),I=uc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(I,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":_.close().catch(R=>{this.log.error("error closing connection",R)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let A=new Mo(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await b.secureInbound(y,x,i),await t.upgrader.upgradeOutbound(_,{skipProtection:!0,skipEncryption:!0,muxerFactory:A})}catch(d){throw l.close(),d}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw lc("no local certificate");let o=uy(e,{log:this.log});if(o==null)throw lc("no local fingerprint found");let s=o.trim().toLowerCase().replaceAll(":",""),i=L(s,"hex"),a=or(t,i),c=Vp.decode(_d(n)),l=L("libp2p-webrtc-noise:");return ve([l,a.bytes,c])}};function gy(r){return e=>new vd(e,r)}function yy(r){return e=>new xd(e,r)}var wy=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",s)}function o(){n(),e()}function s(i){n(),t(i.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",s)})};var Ey=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await wy(r)}catch(s){if(s.message==="socket closed")break;throw s}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,s)=>{r.addEventListener("close",i=>{if(i.wasClean||i.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:i});s(a)}}),setTimeout(()=>{r.close()})})});var vy=Xe(xy(),1);function _y(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Sy=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((s,i)=>{if(n){s();return}if(o!=null){i(o);return}let a=d=>{r.removeEventListener("open",c),r.removeEventListener("error",l),d()},c=()=>{a(s)},l=d=>{a(()=>{i(d.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let s=new vy.EventIterator(({push:i,stop:a,fail:c})=>{let l=u=>{let h=null;typeof u.data=="string"&&(h=L(u.data)),_y(u.data)&&(h=new Uint8Array(u.data)),u.data instanceof Uint8Array&&(h=u.data),h!=null&&i(h)},d=u=>{c(u.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",d),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",d),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let i of s)yield _y(i)?new Uint8Array(i):i}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",s=>{n||(o=s.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var Ry=(r,e)=>{e=e??{};let t=Sy(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let i=new URL(r.url);n=i.hostname,o=parseInt(i.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:Ey(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(i=>{r.addEventListener("close",()=>{i()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var Ay=WebSocket;var ZI={"http:":"ws:","https:":"wss:"},Iy="ws:",Ty=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Iy}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Iy,o=e.host,s=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${s}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(ZI))t.protocol===n&&(t.protocol=o);return t};function Cy(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=Ty(r,t),o=new Ay(n.toString(),e.websocket);return Ry(o,e)}function ky(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Di.matches(t)||xs.matches(t)})}function Dy(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return xs.matches(t)})}function Ny(){throw new Error("WebSocket Servers can not be created in the browser!")}function Py(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o={log:n,async sink(s){try{await r.sink(async function*(){for await(let i of s)i instanceof Uint8Array?yield i:yield i.subarray()}())}catch(i){i.type!=="aborted"&&n.error(i)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(s={}){let i=Date.now();if(s.signal==null){let c=AbortSignal.timeout(500);s={...s,signal:c}}let a=()=>{let{host:c,port:l}=o.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",c,l,Date.now()-i),this.abort(new g("Socket close timeout","ERR_SOCKET_CLOSE_TIMEOUT"))};s.signal?.addEventListener("abort",a);try{await r.close()}catch(c){n.error("error closing WebSocket gracefully",c),this.abort(c)}finally{s.signal?.removeEventListener("abort",a),o.timeline.close=Date.now()}},abort(s){let{host:i,port:a}=o.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",i,a,s),r.destroy(),o.timeline.close=Date.now()}};return r.socket.addEventListener("close",()=>{o.timeline.close==null&&(o.timeline.close=Date.now())},{once:!0}),o}var Gp=class{log;init;logger;constructor(e,t){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.init=t}[ln]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Be]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=Py(n,e,{logger:this.logger});this.log("new outbound connection %s",o.remoteAddr);let s=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),s}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=ee(),s=Cy(Ku(e),this.init);s.socket.addEventListener("error",()=>{let i=new g(`Could not connect to ${e.toString()}`,"ERR_CONNECTION_FAILED");this.log.error("connection error:",i),o.reject(i)});try{t.onProgress?.(new q("websockets:open-connection")),await ke(Promise.race([s.connected(),o.promise]),t.signal)}catch(i){throw s.close().catch(a=>{this.log.error("error closing raw socket",a)}),i}return this.log("connected %s",e),s}createListener(e){return Ny({logger:this.logger},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):N1||P1?Dy(e):ky(e)}dialFilter(e){return this.listenFilter(e)}};function Ly(r={}){return e=>new Gp(e,r)}function Wp(r){throw new Error("Not implemented")}var zp=class extends wn{writer;reader;constructor(e){super(e),this.writer=e.bidiStream.writable.getWriter(),this.reader=e.bidiStream.readable.getReader(),Promise.resolve().then(async()=>{for(;;){let t=await this.reader.read();if(t.done){e.log("remote closed write");return}t.value!=null&&this.sourcePush(new ce(t.value))}}).catch(t=>{e.log.error("error reading from stream",t),this.abort(t)}).finally(()=>{this.remoteCloseWrite()}),this.writer.closed.then(()=>{e.log("writer closed")}).catch(t=>{e.log("writer close promise rejected",t)}).finally(()=>{this.remoteCloseRead()})}sendNewStream(e){}async sendData(e,t){for await(let n of e)this.log("sendData waiting for writer to be ready"),await ke(this.writer.ready,t?.signal),this.writer.write(n).catch(o=>{this.log.error("error sending stream data",o)})}async sendReset(e){this.log("sendReset aborting writer"),await ke(this.writer.abort(),e?.signal),this.log("sendReset aborted writer")}async sendCloseWrite(e){this.log("sendCloseWrite closing writer"),await ke(this.writer.close(),e?.signal),this.log("sendCloseWrite closed writer")}async sendCloseRead(e){this.log("sendCloseRead cancelling reader"),await ke(this.reader.cancel(),e?.signal),this.log("sendCloseRead cancelled reader")}};async function Yp(r,e,t,n,o,s){let i=s.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=new zp({bidiStream:r,id:e,direction:t,log:i,onEnd:()=>{let c=n.findIndex(l=>l===a);c!==-1&&n.splice(c,1),o?.(a)}});return a}function Ad(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function Oy(r,e,t,n){let o=0,s=t.forComponent("libp2p:webtransport:muxer");return{protocol:"webtransport",createStreamMuxer:i=>{typeof i=="function"&&(i={onIncomingStream:i});let a=[];Promise.resolve().then(async()=>{for(;;){let{done:l,value:d}=await e.read();if(l)break;if(a.length>=n.maxInboundStreams)s(`too many inbound streams open - ${a.length}/${n.maxInboundStreams}, closing new incoming stream`),d.writable.close().catch(u=>{s.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),d.readable.cancel().catch(u=>{s.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await Yp(d,String(o++),"inbound",a,i?.onStreamEnd,t);a.push(u),i?.onIncomingStream?.(u)}}}).catch(l=>{s.error("could not create a new stream",l)});let c={protocol:"webtransport",streams:a,newStream:async l=>{s("new outgoing stream",l);let d=await r.createBidirectionalStream(),u=await Yp(d,String(o++),i?.direction??"outbound",a,i?.onStreamEnd,t);return a.push(u),u},close:async()=>{s("closing webtransport muxer gracefully");try{r.close()}catch(l){c.abort(l)}},abort:l=>{s("closing webtransport muxer with err:",l);try{r.close()}catch(d){s.error("webtransport session threw error during close",d)}},...Ad()};return c}}}function By(r,e){return e.filter(n=>!!r.find(o=>J(n,o))).length===e.length}var tT=Object.values(br).map(r=>r.decoder).reduce((r,e)=>r.or(e));function rT(r){return Bt.decode(tT.decode(r))}function Xp(r){if(!Vu.matches(r))throw new g("Invalid multiaddr, was not a WebTransport address","ERR_INVALID_MULTIADDR");let e=r.stringTuples(),t=e.filter(([i,a])=>i===te("certhash").code).map(([i,a])=>rT(a??"")),n=e.filter(([i,a])=>i===te("p2p").code).map(([i,a])=>me(a??""))[0],o=r.toOptions(),s=o.host;return o.family===6&&s?.includes(":")&&(s=`[${s}]`),{url:`https://${s}:${o.port}`,certhashes:t,remotePeer:n}}var My=globalThis.WebTransport;var Qp=class{log;components;config;metrics;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webtransport"),this.components=e,this.config={...t,maxInboundStreams:t.maxInboundStreams??1e3,certificates:t.certificates??[]},e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webtransport_dialer_events_total",{label:"event",help:"Total count of WebTransport dialer events by type"})})}[Symbol.toStringTag]="@libp2p/webtransport";[ln]=!0;[Be]=["@libp2p/transport"];async dial(e,t){if(t?.signal?.aborted===!0)throw new un;this.log("dialing %s",e);let n=this.components.peerId;if(n===void 0)throw new g("Need a local peerid","ERR_INVALID_PARAMETERS");t=t??{};let{url:o,certhashes:s,remotePeer:i}=Xp(e),a,c,l=()=>{},d=!1,u=!1,h=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let f=new My(`${o}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:s.map(p=>({algorithm:"sha-256",value:p.digest}))});if(l=p=>{if(!d)try{this.metrics?.dialerEvents.increment({[p]:!0}),f.close()}catch(m){this.log.error("error closing wt session",m)}finally{c!=null&&(c.timeline.close=Date.now()),d=!0}},a=()=>{l(u?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",a,{once:!0}),this.log("wait for session to be ready"),t.onProgress?.(new q("webtransport:wait-for-session")),await Promise.race([f.closed,f.ready]),this.log("session became ready"),u=!0,this.metrics?.dialerEvents.increment({ready:!0}),f.closed.catch(p=>{this.log.error("error on remote wt session close",p)}).finally(()=>{l("remote_close")}),h=await ke(this.authenticateWebTransport({wt:f,localPeer:n,remotePeer:i,certhashes:s,...t}),t.signal),!h)throw new g("Failed to authenticate webtransport","ERR_AUTHENTICATION_FAILED");return this.metrics?.dialerEvents.increment({open:!0}),c={close:async()=>{this.log("closing webtransport"),l("close")},abort:p=>{this.log("aborting webtransport due to passed err",p),l("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...Ad()},await t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:Oy(f,f.incomingBidirectionalStreams.getReader(),this.components.logger,this.config),skipProtection:!0,onProgress:t.onProgress})}catch(f){throw this.log.error("caught wt session err",f),l(h?"upgrade_error":u?"noise_error":"ready_error"),f}finally{a!=null&&t.signal?.removeEventListener("abort",a)}}async authenticateWebTransport({wt:e,localPeer:t,remotePeer:n,certhashes:o,onProgress:s,signal:i}){i?.throwIfAborted(),s?.(new q("webtransport:open-authentication-stream"));let a=await e.createBidirectionalStream(),c=a.writable.getWriter(),l=a.readable.getReader(),d={source:async function*(){for(;;){let f=await l.read();if(f.value!=null&&(yield f.value),f.done)break}}(),sink:async f=>{for await(let p of f){await ke(c.ready,i);let m=p instanceof Uint8Array?p:p.subarray();c.write(m).catch(y=>{this.log.error("could not write chunk during authentication of WebTransport stream",y)})}}},u=Ti()(this.components);s?.(new q("webtransport:secure-outbound-connection"));let{remoteExtensions:h}=await u.secureOutbound(t,d,n);if(s?.(new q("webtransport:close-authentication-stream")),c.close().catch(f=>{this.log.error(`Failed to close authentication stream writer: ${f.message}`)}),l.cancel().catch(f=>{this.log.error(`Failed to close authentication stream reader: ${f.message}`)}),!By(h?.webtransportCerthashes??[],o.map(f=>f.bytes)))throw new Error("Our certhashes are not a subset of the remote's reported certhashes");return!0}createListener(e){return Wp(this.components,{...e,certificates:this.config.certificates,maxInboundStreams:this.config.maxInboundStreams})}listenFilter(){return[]}dialFilter(e){return globalThis.WebTransport==null?[]:e.filter(t=>{if(!Vu.exactMatch(t))return!1;let{url:n,certhashes:o}=Xp(t);return n!=null&&o.length>0})}};function Uy(r={}){return e=>new Qp(e,r)}var Zp=Xe(Yu(),1);function Fy(r,e){let t=e.map((n,o)=>({record:gn(n),index:o}));return t.sort((n,o)=>{let s=n.record.sequence,i=o.record.sequence;if(s>i)return-1;if(s<i)return 1;if(n.record.validityType===Xt.ValidityType.EOL&&o.record.validityType===Xt.ValidityType.EOL){let a=Zp.default.fromString(n.record.validity).toDate(),c=Zp.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var Id="1.8.2",Td="libp2p";var Ky="4.2.5",$y="helia";var Hy={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function Cd(r={}){let e=`${$y}/${Ky} ${Td}/${Id} UserAgent=${globalThis.navigator.userAgent}`;return{peerId:r.peerId,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[cp({discoverRelays:1}),yy(),gy(),Uy(),Ly()],connectionEncryption:[Ti()],streamMuxers:[e7(),q9()],peerDiscovery:[g7(Hy)],services:{autoNAT:o7(),dcutr:D7(),delegatedRouting:()=>rg("https://delegated-ipfs.dev"),dht:y9({clientMode:!0,validators:{ipns:Zu},selectors:{ipns:Fy}}),identify:G7({agentVersion:e}),identifyPush:W7({agentVersion:e}),keychain:ud(r.keychain),ping:Y9()}}}var qy=async()=>{let r=await wa("Ed25519"),e=await nT(r);if(e.type==="Ed25519")return e;throw new Error(`Generated unexpected PeerId type "${e.type}"`)};async function nT(r){return dt(Vh(r.public),Kh(r))}var St={ERR_INVALID_PARAMETERS:"ERR_INVALID_PARAMETERS"};var Wi;(function(r){let e;(function(o){let s;o.codec=()=>(s==null&&(s=oe((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&i.value.byteLength>0&&(a.uint32(18),a.bytes(i.value)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:"",value:new Uint8Array(0)},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=i.bytes();break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>ne(i,o.codec()),o.decode=i=>re(i,o.codec())})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let s;o.codec=()=>(s==null&&(s=oe((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&(a.uint32(18),Dd.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:""},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=Dd.codec().decode(i,i.uint32());break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>ne(i,o.codec()),o.decode=i=>re(i,o.codec())})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.addresses!=null)for(let a of o.addresses)s.uint32(10),kd.codec().encode(a,s);if(o.protocols!=null)for(let a of o.protocols)s.uint32(18),s.string(a);if(o.publicKey!=null&&(s.uint32(34),s.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(s.uint32(42),s.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())s.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},s);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())s.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},s);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={addresses:[],protocols:[],metadata:new Map,tags:new Map},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.addresses.push(kd.codec().decode(o,o.uint32()));break;case 2:i.protocols.push(o.string());break;case 4:i.publicKey=o.bytes();break;case 5:i.peerRecordEnvelope=o.bytes();break;case 6:{let l=r.Peer$metadataEntry.codec().decode(o,o.uint32());i.metadata.set(l.key,l.value);break}case 7:{let l=r.Peer$tagsEntry.codec().decode(o,o.uint32());i.tags.set(l.key,l.value);break}default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ne(o,r.codec()),r.decode=o=>re(o,r.codec())})(Wi||(Wi={}));var kd;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={multiaddr:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.multiaddr=t.bytes();break;case 2:o.isCertified=t.bool();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(kd||(kd={}));var Dd;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.value=t.uint32();break;case 2:o.expiry=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Dd||(Dd={}));function zi(r,e){let t=Wi.decode(e);t.publicKey!=null&&r.publicKey==null&&(r=h4({...r,publicKey:r.publicKey}));let n=new Map,o=BigInt(Date.now());for(let[s,i]of t.tags.entries())i.expiry!=null&&i.expiry<o||n.set(s,i);return{...t,id:r,addresses:t.addresses.map(({multiaddr:s,isCertified:i})=>({multiaddr:j(s),isCertified:i??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var jp="/peers/";function Yi(r){if(!Ns(r)||r.type==null)throw new g("Invalid PeerId",St.ERR_INVALID_PARAMETERS);let e=r.toCID().toString();return new Ne(`${jp}${e}`)}async function Gy(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=j(o.multiaddr)),!Ro(o.multiaddr))throw new g("Multiaddr was invalid",St.ERR_INVALID_PARAMETERS);if(!await e(r,o.multiaddr))continue;let s=o.isCertified??!1,i=o.multiaddr.toString(),a=n.get(i);a!=null?o.isCertified=a.isCertified||s:n.set(i,{multiaddr:o.multiaddr,isCertified:s})}return[...n.values()].sort((o,s)=>o.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:o,multiaddr:s})=>({isCertified:o,multiaddr:s.bytes}))}async function Pd(r,e,t,n){if(e==null)throw new g("Invalid PeerData",St.ERR_INVALID_PARAMETERS);if(e.publicKey!=null&&r.publicKey!=null&&!J(e.publicKey,r.publicKey))throw new g("publicKey bytes do not match peer id publicKey bytes",St.ERR_INVALID_PARAMETERS);let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new g("peer id did not match existing peer id",St.ERR_INVALID_PARAMETERS);let s=o?.addresses??[],i=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(s=[],e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Nd(u,{validate:Wy})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Nd(u,{validate:zy,map:Yy})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...e.protocols])),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,f]of u)f==null?a.delete(h):a.set(h,f);a=Nd([...a.entries()],{validate:Wy})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[f,p]of u)p==null?h.delete(f):h.set(f,p);c=Nd([...h.entries()],{validate:zy,map:Yy})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d={addresses:await Gy(r,n.addressFilter??(async()=>!0),s),protocols:[...i.values()].sort((u,h)=>u.localeCompare(h)),metadata:a,tags:c,publicKey:o?.id.publicKey??e.publicKey??r.publicKey,peerRecordEnvelope:l};return r.type!=="RSA"&&delete d.publicKey,d}function Nd(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([s],[i])=>s.localeCompare(i)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function Wy(r,e){if(typeof r!="string")throw new g("Metadata key must be a string",St.ERR_INVALID_PARAMETERS);if(!(e instanceof Uint8Array))throw new g("Metadata value must be a Uint8Array",St.ERR_INVALID_PARAMETERS)}function zy(r,e){if(typeof r!="string")throw new g("Tag name must be a string",St.ERR_INVALID_PARAMETERS);if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new g("Tag value must be an integer",St.ERR_INVALID_PARAMETERS);if(e.value<0||e.value>100)throw new g("Tag value must be between 0-100",St.ERR_INVALID_PARAMETERS)}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new g("Tag ttl must be an integer",St.ERR_INVALID_PARAMETERS);if(e.ttl<0)throw new g("Tag ttl must be between greater than 0",St.ERR_INVALID_PARAMETERS)}}function Yy(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function Ld(r,e,t){let n=r.toString().split("/")[2],o=ut.decode(n),s=je(o),i=t.get(s);if(i!=null)return i;let a=zi(s,e);return t.set(s,a),a}function oT(r,e){return r==null?{}:{prefix:jp,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(Ld(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(Ld(n.key,n.value,e),Ld(o.key,o.value,e)))}}var Od=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=La({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(Yi(e))}async delete(e){if(this.peerId.equals(e))throw new g("Cannot delete self peer",St.ERR_INVALID_PARAMETERS);await this.datastore.delete(Yi(e))}async load(e){let t=await this.datastore.get(Yi(e));return zi(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Pd(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,s,n,o)}async patch(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Pd(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async merge(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Pd(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async*all(e){let t=new st;for await(let{key:n,value:o}of this.datastore.query(oT(e??{},t))){let s=Ld(n,o,t);s.id.equals(this.peerId)||(yield s)}}async#e(e){try{let t=await this.datastore.get(Yi(e)),n=zi(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.code!=="ERR_NOT_FOUND")throw t}return{}}async#t(e,t,n,o){let s=Wi.encode(t);return n!=null&&J(s,n)?{peer:zi(e,s),previous:o,updated:!1}:(await this.datastore.put(Yi(e),s),{peer:zi(e,s),previous:o,updated:!0})}};var Bd=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new Od(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await Ga(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await mr.openAndCertify(e,Vt.DOMAIN);if(t?.equals(n.peerId)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,n.peerId),!1;let o=Vt.createFromProtobuf(n.payload),s;try{s=await this.get(n.peerId)}catch(i){if(i.code!=="ERR_NOT_FOUND")throw i}if(s?.peerRecordEnvelope!=null){let i=await mr.createFromProtobuf(s.peerRecordEnvelope),a=Vt.createFromProtobuf(i.payload);if(a.seqNumber>=o.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",a.seqNumber,o.seqNumber),!1}return await this.patch(o.peerId,{peerRecordEnvelope:e,addresses:o.multiaddrs.map(i=>({isCertified:!0,multiaddr:i}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function Xy(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var sT=r=>r;function Jp(r,e){let t=r.getPeerId();return t!=null&&me(t).equals(e)&&(r=r.decapsulate(j(`/p2p/${e.toString()}`))),r}var Md=class{log;components;listen;announce;observed;announceFilter;constructor(e,t={}){let{listen:n=[],announce:o=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.observed=new Map,this.announceFilter=t.announceFilter??sT,this._updatePeerStoreAddresses=Xy(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAnnounceAddrs().concat(this.components.transportManager.getAddrs()).concat([...this.observed.entries()].filter(([t,n])=>n.confident).map(([t])=>j(t))).map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>j(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>j(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>j(e))}addObservedAddr(e){e=Jp(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=Jp(e,this.components.peerId);let t=e.toString(),o=(this.observed.get(t)??{confident:!1}).confident;this.observed.set(t,{confident:!0}),o||this._updatePeerStoreAddresses()}removeObservedAddr(e){e=Jp(e,this.components.peerId);let t=e.toString();this.observed.delete(t)}getAddresses(){let e=this.getAnnounceAddrs().map(n=>n.toString());e.length===0&&(e=this.components.transportManager.getAddrs().map(n=>n.toString())),e=e.concat(Array.from(this.observed).filter(([n,o])=>o.confident).map(([n])=>n));let t=new Set(e);return this.announceFilter(Array.from(t).map(n=>j(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var e3=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=Eo())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>wc(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},iT=["metrics","connectionProtector","dns"],aT=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function Qy(r={}){let e=new e3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!aT.includes(o)){let i=e.components[o];if(i==null&&!iT.includes(o))throw new g(`${o} not set`,"ERR_SERVICE_MISSING");return i}return Reflect.get(n,o,s)},set(n,o,s){return typeof o=="string"?e.components[o]=s:Reflect.set(n,o,s),!0}})}function Zy(r){let e={};for(let t of Object.values(r.components))for(let n of cT(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of lT(t))if(e[n]!==!0)throw new g(`Service "${uT(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`,"ERR_UNMET_SERVICE_DEPENDENCIES")}function cT(r){return Array.isArray(r?.[Be])?r[Be]:[]}function lT(r){return Array.isArray(r?.[Mr])?r[Mr]:[]}function uT(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function jy(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!zt(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function t3(r){try{let{address:e}=r.nodeAddress();return!!zt(e)}catch{return!0}}function dT(r,e){let t=t3(r.multiaddr),n=t3(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function fT(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function hT(r,e){let t=ys.exactMatch(r.multiaddr),n=ys.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Xi(r,e){let t=dT(r,e);if(t!==0)return t;let n=hT(r,e);return n!==0?n:fT(r,e)}var pT=32,{code:mT}=te("dnsaddr"),Ts=async function(e,t={}){let n=t.maxRecursiveDepth??pT;if(n===0)throw new g("Max recursive depth reached","ERR_MAX_RECURSIVE_DEPTH_REACHED");let[,o]=e.stringTuples().find(([l])=>l===mT)??[],i=await(t?.dns??Jl()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[lr.TXT]}),a=e.getPeerId(),c=[];for(let l of i.Answer){let d=l.data.replace(/["']/g,"").trim().split("=")[1];if(d==null||a!=null&&!d.includes(a))continue;let u=j(d);if(d.startsWith("/dnsaddr")){let h=await u.resolve({...t,maxRecursiveDepth:n-1});c.push(...h.map(f=>f.toString()))}else c.push(u.toString())}return c};var Xn;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.ERR_PROTECTOR_REQUIRED="Private network is enforced, but no protector was provided",r.NOT_FOUND="Not found"})(Xn||(Xn={}));var Y;(function(r){r.ERR_PROTECTOR_REQUIRED="ERR_PROTECTOR_REQUIRED",r.ERR_PEER_DIAL_INTERCEPTED="ERR_PEER_DIAL_INTERCEPTED",r.ERR_CONNECTION_INTERCEPTED="ERR_CONNECTION_INTERCEPTED",r.ERR_INVALID_PROTOCOLS_FOR_STREAM="ERR_INVALID_PROTOCOLS_FOR_STREAM",r.ERR_CONNECTION_ENDED="ERR_CONNECTION_ENDED",r.ERR_CONNECTION_FAILED="ERR_CONNECTION_FAILED",r.ERR_NODE_NOT_STARTED="ERR_NODE_NOT_STARTED",r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_TOO_MANY_ADDRESSES="ERR_TOO_MANY_ADDRESSES",r.ERR_NO_VALID_ADDRESSES="ERR_NO_VALID_ADDRESSES",r.ERR_RELAYED_DIAL="ERR_RELAYED_DIAL",r.ERR_DIALED_SELF="ERR_DIALED_SELF",r.ERR_DISCOVERED_SELF="ERR_DISCOVERED_SELF",r.ERR_DUPLICATE_TRANSPORT="ERR_DUPLICATE_TRANSPORT",r.ERR_ENCRYPTION_FAILED="ERR_ENCRYPTION_FAILED",r.ERR_HOP_REQUEST_FAILED="ERR_HOP_REQUEST_FAILED",r.ERR_INVALID_KEY="ERR_INVALID_KEY",r.ERR_INVALID_MESSAGE="ERR_INVALID_MESSAGE",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_PEER="ERR_INVALID_PEER",r.ERR_MUXER_UNAVAILABLE="ERR_MUXER_UNAVAILABLE",r.ERR_NOT_FOUND="ERR_NOT_FOUND",r.ERR_TRANSPORT_UNAVAILABLE="ERR_TRANSPORT_UNAVAILABLE",r.ERR_TRANSPORT_DIAL_FAILED="ERR_TRANSPORT_DIAL_FAILED",r.ERR_UNSUPPORTED_PROTOCOL="ERR_UNSUPPORTED_PROTOCOL",r.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED="ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_SIGNATURE_NOT_VALID="ERR_SIGNATURE_NOT_VALID",r.ERR_FIND_SELF="ERR_FIND_SELF",r.ERR_NO_ROUTERS_AVAILABLE="ERR_NO_ROUTERS_AVAILABLE",r.ERR_CONNECTION_NOT_MULTIPLEXED="ERR_CONNECTION_NOT_MULTIPLEXED",r.ERR_NO_DIAL_TOKENS="ERR_NO_DIAL_TOKENS",r.ERR_INVALID_CMS="ERR_INVALID_CMS",r.ERR_MISSING_KEYS="ERR_MISSING_KEYS",r.ERR_NO_KEY="ERR_NO_KEY",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_MISSING_PUBLIC_KEY="ERR_MISSING_PUBLIC_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_WRONG_PING_ACK="ERR_WRONG_PING_ACK",r.ERR_INVALID_RECORD="ERR_INVALID_RECORD",r.ERR_ALREADY_SUCCEEDED="ERR_ALREADY_SUCCEEDED",r.ERR_NO_HANDLER_FOR_PROTOCOL="ERR_NO_HANDLER_FOR_PROTOCOL",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_CONNECTION_DENIED="ERR_CONNECTION_DENIED",r.ERR_TRANSFER_LIMIT_EXCEEDED="ERR_TRANSFER_LIMIT_EXCEEDED"})(Y||(Y={}));var gT={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Ts},addressSorter:Xi},transportManager:{faultTolerance:Zn.FATAL_ALL}};async function Jy(r){let e=Hi(gT,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new g(Xn.ERR_PROTECTOR_REQUIRED,Y.ERR_PROTECTOR_REQUIRED);if(e.privateKey!=null&&!(await dt(e.privateKey.public.bytes,e.privateKey.bytes)).equals(e.peerId))throw new g("Private key doesn't match peer id",Y.ERR_INVALID_KEY);return e}function Ud(r){if(Ns(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:me(t),r.forEach(n=>{if(!Ro(n))throw new g("Invalid Multiaddr",Y.ERR_INVALID_MULTIADDR);let o=n.getPeerId();if(o==null){if(e!=null)throw new g("Multiaddrs must all have the same peer id or have no peer id",Y.ERR_INVALID_PARAMETERS)}else{let s=me(o);if(e==null||!e.equals(s))throw new g("Multiaddrs must all have the same peer id or have no peer id",Y.ERR_INVALID_PARAMETERS)}})}return{peerId:e,multiaddrs:r}}var Fd="last-dial-failure";var Vd=5,Kd=100,$d=50,Hd=1e3*60*7;var Cs={minConnections:Vd,maxQueueLength:100,autoDialConcurrency:25,autoDialPriority:0,autoDialInterval:5e3,autoDialPeerRetryThreshold:Hd,autoDialDiscoveredPeersDebounce:10},qd=class{connectionManager;peerStore;queue;minConnections;autoDialPriority;autoDialIntervalMs;autoDialMaxQueueLength;autoDialPeerRetryThresholdMs;autoDialDiscoveredPeersDebounce;autoDialInterval;started;running;log;constructor(e,t){this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.minConnections=t.minConnections??Cs.minConnections,this.autoDialPriority=t.autoDialPriority??Cs.autoDialPriority,this.autoDialIntervalMs=t.autoDialInterval??Cs.autoDialInterval,this.autoDialMaxQueueLength=t.maxQueueLength??Cs.maxQueueLength,this.autoDialPeerRetryThresholdMs=t.autoDialPeerRetryThreshold??Cs.autoDialPeerRetryThreshold,this.autoDialDiscoveredPeersDebounce=t.autoDialDiscoveredPeersDebounce??Cs.autoDialDiscoveredPeersDebounce,this.log=e.logger.forComponent("libp2p:connection-manager:auto-dial"),this.started=!1,this.running=!1,this.queue=new Kt({concurrency:t.autoDialConcurrency??Cs.autoDialConcurrency,metricName:"libp2p_autodial_queue",metrics:e.metrics}),this.queue.addEventListener("error",o=>{this.log.error("error during auto-dial",o.detail)}),e.events.addEventListener("connection:close",()=>{this.autoDial().catch(o=>{this.log.error(o)})});let n;e.events.addEventListener("peer:discovery",()=>{clearTimeout(n),n=setTimeout(()=>{this.autoDial().catch(o=>{this.log.error(o)})},this.autoDialDiscoveredPeersDebounce)})}isStarted(){return this.started}start(){this.started=!0}afterStart(){this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})}stop(){this.queue.clear(),clearTimeout(this.autoDialInterval),this.started=!1,this.running=!1}async autoDial(){if(!this.started||this.running)return;let e=this.connectionManager.getConnectionsMap(),t=e.size;if(t>=this.minConnections){this.minConnections>0&&this.log.trace("have enough connections %d/%d",t,this.minConnections);return}if(this.queue.size>this.autoDialMaxQueueLength){this.log("not enough connections %d/%d but auto dial queue is full",t,this.minConnections),this.sheduleNextAutodial();return}this.running=!0,this.log("not enough connections %d/%d - will dial peers to increase the number of connections",t,this.minConnections);let n=new kt(this.connectionManager.getDialQueue().map(l=>l.peerId).filter(Boolean)),o=await this.peerStore.all({filters:[l=>l.addresses.length===0?(this.log.trace("not autodialing %p because they have no addresses",l.id),!1):e.has(l.id)?(this.log.trace("not autodialing %p because they are already connected",l.id),!1):n.has(l.id)?(this.log.trace("not autodialing %p because they are already being dialed",l.id),!1):this.queue.has(l.id)?(this.log.trace("not autodialing %p because they are already being autodialed",l.id),!1):!0]}),s=o.sort(()=>Math.random()>.5?1:-1),i=new st;for(let l of s)i.has(l.id)||i.set(l.id,[...l.tags.values()].reduce((d,u)=>d+u.value,0));let c=s.sort((l,d)=>{let u=i.get(l.id)??0,h=i.get(d.id)??0;return u>h?-1:u<h?1:0}).filter(l=>{let d=l.metadata.get(Fd);if(d==null)return!0;let u=parseInt(B(d));return isNaN(u)?!0:Date.now()-u>this.autoDialPeerRetryThresholdMs});this.log("selected %d/%d peers to dial",c.length,o.length);for(let l of c)this.queue.add(async()=>{let d=this.connectionManager.getConnectionsMap().size;if(d>=this.minConnections){this.log("got enough connections now %d/%d",d,this.minConnections),this.queue.clear();return}this.log("connecting to a peerStore stored peer %p",l.id),await this.connectionManager.openConnection(l.id,{priority:this.autoDialPriority})},{peerId:l.id}).catch(d=>{this.log.error("could not connect to peerStore stored peer",d)});this.running=!1,this.sheduleNextAutodial()}sheduleNextAutodial(){this.started&&(this.autoDialInterval=setTimeout(()=>{this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})},this.autoDialIntervalMs))}};var wT=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function ew(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??wT;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var tw={maxConnections:Kd,allow:[]},Gd=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??tw.maxConnections,this.allow=t.allow??tw.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),e.events.addEventListener("connection:open",()=>{this.maybePruneConnections().catch(n=>{this.log.error(n)})})}async maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length;if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;let n=new st;for(let a of e){let c=a.remotePeer;if(!n.has(c)){n.set(c,0);try{let l=await this.peerStore.get(c);n.set(c,[...l.tags.values()].reduce((d,u)=>d+u.value,0))}catch(l){l.code!=="ERR_NOT_FOUND"&&this.log.error("error loading peer tags",l)}}}let o=this.sortConnections(e,n),s=Math.max(t-this.maxConnections,0),i=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>a.remoteAddr.toString().startsWith(l.toString()))||i.push(a),i.length===s)break;await Promise.all(i.map(async a=>{await ew(a,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:i})}sortConnections(e,t){return e.sort((n,o)=>{let s=n.timeline.open,i=o.timeline.open;return s<i?1:s>i?-1:0}).sort((n,o)=>n.direction==="outbound"&&o.direction==="inbound"?1:n.direction==="inbound"&&o.direction==="outbound"?-1:0).sort((n,o)=>n.streams.length>o.streams.length?1:n.streams.length<o.streams.length?-1:0).sort((n,o)=>{let s=t.get(n.remotePeer)??0,i=t.get(o.remotePeer)??0;return s>i?1:s<i?-1:0})}};var Wd=class extends rr{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};async function rw(r,e){let t=!1;for(let o of vi.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}var hc={addressSorter:Xi,maxParallelDials:$d,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:Ts}},zd=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter??hc.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??hc.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??hc.maxDialQueueLength,this.dialTimeout=t.dialTimeout??hc.dialTimeout,this.connections=t.connections??new st,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal);for(let[n,o]of Object.entries(t.resolvers??{}))vi.set(n,o);this.queue=new Wd({concurrency:t.maxParallelDials??hc.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{this.log.error("error in dial queue",n.detail)})}start(){this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal)}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Ud(e),s=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(s!=null)return this.log("already connected to %a",s.remoteAddr),t.onProgress?.(new q("dial-queue:already-connected")),s;let i=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(i!=null){this.log("joining existing dial target for %p",n);for(let a of o)i.options.multiaddrs.add(a.toString());return t.onProgress?.(new q("dial-queue:already-in-dial-queue")),i.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new g("Dial queue is full","ERR_DIAL_QUEUE_FULL");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new q("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a?.onProgress?.(new q("dial-queue:start-dial"));let c=this.createDialAbortController(a?.signal),l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),a?.onProgress?.(new q("dial-queue:calculated-addresses",l)),l.map(({multiaddr:d})=>d.toString()).forEach(d=>{a?.multiaddrs.add(d)})}catch(d){throw c.clear(),d}try{let d=0,u=[];for(let h of l){if(d===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",d,n),new g("Peer had more than maxPeerAddrsToDial",Y.ERR_TOO_MANY_ADDRESSES);d++;try{let f=await this.components.transportManager.dial(h.multiaddr,{...a,signal:c});return this.log("dial to %a succeeded",h.multiaddr),f}catch(f){if(this.log.error("dial failed to %a",h.multiaddr,f),n!=null)try{await this.components.peerStore.patch(n,{metadata:{[Fd]:L(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}if(c.aborted)throw new g(f.message,_n);u.push(f)}}throw u.length===1?u[0]:new yc(u,"All multiaddr dials failed",Y.ERR_TRANSPORT_DIAL_FAILED)}finally{c.clear()}},{peerId:n,priority:t.priority??l3,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal,onProgress:t.onProgress})}createDialAbortController(e){let t=_e([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return K(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:j(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new g("Tried to dial self",Y.ERR_DIALED_SELF);if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new g("The dial request is blocked by gater.allowDialPeer",Y.ERR_PEER_DIAL_INTERCEPTED);if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:h})=>h.toString()))}catch(u){if(u.code!==Y.ERR_NOT_FOUND)throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:h})=>h.toString())),o.push(...u.multiaddrs.map(h=>({multiaddr:h,isCertified:!1})))}catch(u){u.code!==Y.ERR_NO_ROUTERS_AVAILABLE&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,u)}}}let s=(await Promise.all(o.map(async u=>{let h=await rw(u.multiaddr,{dns:this.components.dns,...n,log:this.log});return h.length===1&&h[0].equals(u.multiaddr)?u:h.map(f=>({multiaddr:f,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;s=s.map(h=>h.multiaddr.protos().pop()?.path===!0?h:h.multiaddr.getPeerId()==null?{multiaddr:h.multiaddr.encapsulate(u),isCertified:h.isCertified}:h)}let i=s.filter(u=>{if(this.components.transportManager.dialTransportForMultiaddr(u.multiaddr)==null)return!1;let h=u.multiaddr.getPeerId();return e!=null&&h!=null?e.equals(h):!0}),a=new Map;for(let u of i){let h=u.multiaddr.toString(),f=a.get(h);if(f!=null){f.isCertified=f.isCertified||u.isCertified||!1;continue}a.set(h,u)}let c=[...a.values()];if(c.length===0)throw new g("The dial request has no valid addresses",Y.ERR_NO_VALID_ADDRESSES);let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=l.sort(this.addressSorter);if(d.length===0)throw new g("The connection gater denied all addresses in the dial request",Y.ERR_NO_VALID_ADDRESSES);return this.log.trace("addresses for %p before filtering",e??"unknown peer",s.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnTransientConnection===!1?n.find(o=>!ys.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var l3=50,Qn={minConnections:Vd,maxConnections:Kd,inboundConnectionThreshold:5,maxIncomingPendingConnections:10,autoDialConcurrency:25,autoDialPriority:0,autoDialMaxQueueLength:100,autoDialPeerRetryThreshold:Hd,autoDialDiscoveredPeersDebounce:10},Yd=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;maxConnections;dialQueue;autoDial;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??Qn.maxConnections;let n=t.minConnections??Qn.minConnections;if(this.maxConnections<n)throw new g("Connection Manager maxConnections must be greater than minConnections",Y.ERR_INVALID_PARAMETERS);this.connections=new st,this.started=!1,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),this.allow=(t.allow??[]).map(o=>j(o)),this.deny=(t.deny??[]).map(o=>j(o)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??Qn.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new qi({points:t.inboundConnectionThreshold??Qn.inboundConnectionThreshold,duration:1}),this.autoDial=new qd({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{minConnections:n,autoDialConcurrency:t.autoDialConcurrency??Qn.autoDialConcurrency,autoDialPriority:t.autoDialPriority??Qn.autoDialPriority,autoDialPeerRetryThreshold:t.autoDialPeerRetryThreshold??Qn.autoDialPeerRetryThreshold,autoDialDiscoveredPeersDebounce:t.autoDialDiscoveredPeersDebounce??Qn.autoDialDiscoveredPeersDebounce,maxQueueLength:t.autoDialMaxQueueLength??Qn.autoDialMaxQueueLength}),this.connectionPruner=new Gd({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new zd(e,{addressSorter:t.addressSorter??Xi,maxParallelDials:t.maxParallelDials??$d,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:Ts},connections:this.connections})}[Symbol.toStringTag]="@libp2p/connection-manager";isStarted(){return this.started}async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,outbound:0};for(let t of this.connections.values())for(let n of t)n.direction==="inbound"?e.inbound++:e.outbound++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let s=`${o.direction} ${o.protocol??"unnegotiated"}`;e[s]=(e[s]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let s={};for(let i of o.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;s[a]=(s[a]??0)+1}for(let[i,a]of Object.entries(s))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((i,a)=>i-a);let s=Math.floor(o.length*.9);t[n]=o[s]}return t}}),this.dialQueue.start(),this.autoDial.start(),this.started=!0,this.log("started")}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(R3)]});await Promise.all(e.map(async t=>{await this.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)}),this.autoDial.afterStart()}async stop(){this.dialQueue.stop(),this.autoDial.stop();let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}let n=t.remotePeer,o=this.connections.get(n),s=!1;o!=null?o.push(t):(s=!0,this.connections.set(n,[t])),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),s&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e;if(!this.started)return;let n=t.remotePeer,o=this.connections.get(n);o!=null&&o.length>1?(o=o.filter(s=>s.id!==t.id),this.connections.set(n,o)):o!=null&&(this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.isStarted())throw new g("Not started",Y.ERR_NODE_NOT_STARTED);t.signal?.throwIfAborted();let{peerId:n}=Ud(e);if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>!c.transient);if(a!=null)return this.log("had an existing non-transient connection to %p",n),t.onProgress?.(new q("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??l3}),s=this.connections.get(o.remotePeer);s==null&&(s=[],this.connections.set(o.remotePeer,s));let i=!1;for(let a of s)a.id===o.id&&(i=!0);return i||s.push(o),o}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(s){o.abort(s)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>j(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var Xd=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e}[Symbol.toStringTag]="@libp2p/content-routing";isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new g("No content routers available",Y.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=new kt;for await(let s of Ot(...n.routers.map(i=>i.findProviders(e,t))))s!=null&&(s.multiaddrs.length>0&&await this.components.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id)&&(o.add(s.id),yield s))}async provide(e,t={}){if(this.routers.length===0)throw new g("No content routers available",Y.ERR_NO_ROUTERS_AVAILABLE);await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new g(Xn.NOT_STARTED_YET,Y.ERR_NODE_NOT_STARTED);await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new g(Xn.NOT_STARTED_YET,Y.ERR_NODE_NOT_STARTED);return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var Qd=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[]}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new g("No peer routers available",Y.ERR_NO_ROUTERS_AVAILABLE);if(e.toString()===this.peerId.toString())throw new g("Should not try to find self",Y.ERR_FIND_SELF);let n=this,o=Ot(...this.routers.map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),s;throw new g(Xn.NOT_FOUND,Y.ERR_NOT_FOUND)}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new g("No peer routers available",Y.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=Sa(1024);for await(let s of nn(async function*(){let i=Ot(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of i)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))s!=null&&(s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id.toBytes())&&(o.add(s.id.toBytes()),yield s))}};var Zd=class extends ge{peerRouting;log;walking;walkers;shutdownController;walkController;needNext;constructor(e){super(),this.log=e.logger.forComponent("libp2p:random-walk"),this.peerRouting=e.peerRouting,this.walkers=0,this.walking=!1,this.shutdownController=new AbortController,K(1/0,this.shutdownController.signal)}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,K(1/0,this.shutdownController.signal)}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=_e([this.shutdownController.signal,e?.signal]);K(1/0,t);try{for(;;)this.needNext?.resolve(),this.needNext=ee(),yield(await tr(this,"walk:peer",t,{errorEvent:"walk:error"})).detail}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,K(1/0,this.walkController.signal);let e=_e([this.walkController.signal,this.shutdownController.signal]);K(1/0,e);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=it(32),s=Date.now();for await(let i of this.peerRouting.getClosestPeers(o,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",i.id,Date.now()-s,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:i}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await ke(this.needNext.promise,e)),s=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("randomwalk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("randomwalk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var u3=32,d3=64,jd=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new g(`No handler registered for protocol ${e}`,Y.ERR_NO_HANDLER_FOR_PROTOCOL);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e))throw new g(`Handler already registered for protocol ${e}`,Y.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);let o=Hi.bind({ignoreUndefined:!0})({maxInboundStreams:u3,maxOutboundStreams:d3},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new g("invalid topology",Y.ERR_INVALID_PARAMETERS);let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let s=this.topologies.get(o);if(s!=null)for(let i of s.values())i.filter?.has(t)!==!1&&(i.filter?.remove(t),i.onDisconnect?.(t))}}).catch(n=>{n.code!==Y.ERR_NOT_FOUND&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(s=>!t.protocols.includes(s));for(let s of o){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),a.onDisconnect?.(t.id))}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let s of t){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())n.transient&&a.notifyOnTransient!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var Jd=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=new Map,this.listeners=Iu({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Zn.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new g("Transport must have a valid tag",Y.ERR_INVALID_KEY);if(this.transports.has(t))throw new g(`There is already a transport with the tag ${t}`,Y.ERR_DUPLICATE_TRANSPORT);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new g(`No transport available for address ${String(e)}`,Y.ERR_TRANSPORT_UNAVAILABLE);t?.onProgress?.(new q("transport-manager:selected-transport",n[Symbol.toStringTag]));try{return await n.dial(e,{...t,upgrader:this.components.upgrader})}catch(o){throw o.code==null&&(o.code=Y.ERR_TRANSPORT_DIAL_FAILED),o}}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new g("Not started",Y.ERR_NODE_NOT_STARTED);if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,o]of this.transports.entries()){let s=o.listenFilter(e),i=[];for(let l of s){this.log("creating listener for %s on %a",n,l);let d=o.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(n)??[];u==null&&(u=[],this.listeners.set(n,u)),u.push(d),d.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:d})}),d.addEventListener("close",()=>{let h=u.findIndex(f=>f===d);u.splice(h,1),this.components.events.safeDispatchEvent("transport:close",{detail:d})}),i.push(d.listen(l))}if(i.length===0){t.push(n);continue}if((await Promise.allSettled(i)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==Zn.NO_FATAL)throw new g(`Transport (${n}) could not listen on any available address`,Y.ERR_NO_VALID_ADDRESSES)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===Zn.FATAL_ALL)throw new g(n,Y.ERR_NO_VALID_ADDRESSES);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Rt="/multistream/1.0.0";var xT=L(`
39
- `);async function ks(r,e,t){await r.write(e,t)}async function nw(r,e,t){await r.writeV(e,t)}async function _T(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==xT[0])throw e.log.error("Invalid mss message - missing newline",t),new g("missing newline","ERR_INVALID_MULTISTREAM_SELECT_MESSAGE");return t.sublist(0,-1)}async function Uo(r,e){let t=await _T(r,e);return B(t.subarray())}async function pc(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return vT(r,e[0],t);let n=yn(r,{...t,maxDataLength:1024}),o=e.shift();if(o==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',Rt,o);let s=L(`${Rt}
38
+ `),r}var Iy=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Ty=r=>[...Array(r)].map(()=>Iy.at(Math.floor(Math.random()*Iy.length))).join("");var cT=1e4,joe=te("webrtc-direct").code,Ay=te("certhash").code,Pd=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}[un]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Te]=["@libp2p/transport"];async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw cy("WebRTCTransport.createListener")}listenFilter(e){return e.filter(q5.exactMatch)}dialFilter(e){return this.listenFilter(e)}async _connect(e,t){let n=new AbortController,o=n.signal,s=e.getPeerId();if(s===null)throw vd("we need to have the remote's PeerId");let i=pe(s),a=o3(Nd(e)),c=await ks.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:s3(a.code)}),l=new ks({...await pc(this.init.rtcConfiguration),certificates:[c]});try{let d=new Promise((S,I)=>{let F=l.createDataChannel("",{negotiated:!0,id:0}),O=setTimeout(()=>{let B=`Data channel was never opened: state: ${F.readyState}`;this.log.error(B),this.metrics?.dialerEvents.increment({open_error:!0}),I(Jp("data",B))},cT);F.onopen=B=>{clearTimeout(O),S(F)},F.onerror=B=>{clearTimeout(O);let D=`Error opening a data channel for handshaking: ${B.target?.toString()??"not specified"}`;this.log.error(D),this.metrics?.dialerEvents.increment({unknown_error:!0}),I(Jp("data",D))}}),u="libp2p+webrtc+v1/"+Ty(32),f=await l.createOffer(),h=Ry(f,u);await l.setLocalDescription(h);let p=Sy(e,u);await l.setRemoteDescription(p);let g=await d,y=this.components.peerId,w=this.generateNoisePrologue(l,a.code,e),b=Ti({prologueBytes:w})(this.components),E=Wi({channel:g,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),x={...E,sink:E.sink.bind(E),source:async function*(){for await(let S of E.source)for(let I of S)yield I}()},T=new Cs(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),C=hc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(C,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":T.close().catch(S=>{this.log.error("error closing connection",S)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let v=new $o(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await b.secureInbound(y,x,i),await t.upgrader.upgradeOutbound(T,{skipProtection:!0,skipEncryption:!0,muxerFactory:v})}catch(d){throw l.close(),d}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw fc("no local certificate");let o=vy(e,{log:this.log});if(o==null)throw fc("no local fingerprint found");let s=o.trim().toLowerCase().replaceAll(":",""),i=L(s,"hex"),a=ir(t,i),c=n3.decode(Nd(n)),l=L("libp2p-webrtc-noise:");return ve([l,a.bytes,c])}};function Cy(r){return e=>new Pd(e,r)}function ky(r){return e=>new Dd(e,r)}var Dy=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",s)}function o(){n(),e()}function s(i){n(),t(i.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",s)})};var Ny=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await Dy(r)}catch(s){if(s.message==="socket closed")break;throw s}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,s)=>{r.addEventListener("close",i=>{if(i.wasClean||i.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:i});s(a)}}),setTimeout(()=>{r.close()})})});var By=nt(Ly(),1);function Oy(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var My=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((s,i)=>{if(n){s();return}if(o!=null){i(o);return}let a=d=>{r.removeEventListener("open",c),r.removeEventListener("error",l),d()},c=()=>{a(s)},l=d=>{a(()=>{i(d.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let s=new By.EventIterator(({push:i,stop:a,fail:c})=>{let l=u=>{let f=null;typeof u.data=="string"&&(f=L(u.data)),Oy(u.data)&&(f=new Uint8Array(u.data)),u.data instanceof Uint8Array&&(f=u.data),f!=null&&i(f)},d=u=>{c(u.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",d),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",d),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let i of s)yield Oy(i)?new Uint8Array(i):i}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",s=>{n||(o=s.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var Uy=(r,e)=>{e=e??{};let t=My(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let i=new URL(r.url);n=i.hostname,o=parseInt(i.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:Ny(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(i=>{r.addEventListener("close",()=>{i()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var Fy=WebSocket;var uT={"http:":"ws:","https:":"wss:"},Vy="ws:",Ky=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Vy}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Vy,o=e.host,s=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${s}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(uT))t.protocol===n&&(t.protocol=o);return t};function $y(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=Ky(r,t),o=new Fy(n.toString(),e.websocket);return Uy(o,e)}function Hy(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Di.matches(t)||Ss.matches(t)})}function qy(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Ss.matches(t)})}function Gy(){throw new Error("WebSocket Servers can not be created in the browser!")}function Wy(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o=t.metrics,s=t.metricPrefix??"",i={log:n,async sink(a){try{await r.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let d=AbortSignal.timeout(500);a={...a,signal:d}}let l=()=>{let{host:d,port:u}=i.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",d,u,Date.now()-c),this.abort(new m("Socket close timeout","ERR_SOCKET_CLOSE_TIMEOUT"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(d){n.error("error closing WebSocket gracefully",d),this.abort(d)}finally{a.signal?.removeEventListener("abort",l),i.timeline.close=Date.now()}},abort(a){let{host:c,port:l}=i.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,l,a),r.destroy(),i.timeline.close=Date.now(),o?.increment({[`${s}error`]:!0})}};return r.socket.addEventListener("close",()=>{o?.increment({[`${s}close`]:!0}),i.timeline.close==null&&(i.timeline.close=Date.now())},{once:!0}),i}var c3=class{log;init;logger;metrics;components;constructor(e,t){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[un]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Te]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=Wy(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let s=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),s}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=ee(),s=$y(zu(e),this.init);s.socket.addEventListener("error",()=>{let i=new m(`Could not connect to ${e.toString()}`,"ERR_CONNECTION_FAILED");this.log.error("connection error:",i),this.metrics?.dialerEvents.increment({error:!0}),o.reject(i)});try{t.onProgress?.(new H("websockets:open-connection")),await Ce(Promise.race([s.connected(),o.promise]),t.signal)}catch(i){throw t.signal?.aborted===!0&&this.metrics?.dialerEvents.increment({abort:!0}),s.close().catch(a=>{this.log.error("error closing raw socket",a)}),i}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),s}createListener(e){return Gy({logger:this.logger,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):$1||H1?qy(e):Hy(e)}dialFilter(e){return this.listenFilter(e)}};function zy(r={}){return e=>new c3(e,r)}function l3(r){throw new Error("Not implemented")}var u3=class extends bn{writer;reader;constructor(e){super(e),this.writer=e.bidiStream.writable.getWriter(),this.reader=e.bidiStream.readable.getReader(),Promise.resolve().then(async()=>{for(;;){let t=await this.reader.read();if(t.done){e.log("remote closed write");return}t.value!=null&&this.sourcePush(new ae(t.value))}}).catch(t=>{e.log.error("error reading from stream",t),this.abort(t)}).finally(()=>{this.remoteCloseWrite()}),this.writer.closed.then(()=>{e.log("writer closed")}).catch(t=>{e.log("writer close promise rejected",t)}).finally(()=>{this.remoteCloseRead()})}sendNewStream(e){}async sendData(e,t){for await(let n of e)this.log("sendData waiting for writer to be ready"),await Ce(this.writer.ready,t?.signal),this.writer.write(n).catch(o=>{this.log.error("error sending stream data",o)})}async sendReset(e){this.log("sendReset aborting writer"),await Ce(this.writer.abort(),e?.signal),this.log("sendReset aborted writer")}async sendCloseWrite(e){this.log("sendCloseWrite closing writer"),await Ce(this.writer.close(),e?.signal),this.log("sendCloseWrite closed writer")}async sendCloseRead(e){this.log("sendCloseRead cancelling reader"),await Ce(this.reader.cancel(),e?.signal),this.log("sendCloseRead cancelled reader")}};async function d3(r,e,t,n,o,s){let i=s.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=new u3({bidiStream:r,id:e,direction:t,log:i,onEnd:()=>{let c=n.findIndex(l=>l===a);c!==-1&&n.splice(c,1),o?.(a)}});return a}function Bd(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function Yy(r,e,t,n){let o=0,s=t.forComponent("libp2p:webtransport:muxer");return{protocol:"webtransport",createStreamMuxer:i=>{typeof i=="function"&&(i={onIncomingStream:i});let a=[];Promise.resolve().then(async()=>{for(;;){let{done:l,value:d}=await e.read();if(l)break;if(a.length>=n.maxInboundStreams)s(`too many inbound streams open - ${a.length}/${n.maxInboundStreams}, closing new incoming stream`),d.writable.close().catch(u=>{s.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),d.readable.cancel().catch(u=>{s.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await d3(d,String(o++),"inbound",a,i?.onStreamEnd,t);a.push(u),i?.onIncomingStream?.(u)}}}).catch(l=>{s.error("could not create a new stream",l)});let c={protocol:"webtransport",streams:a,newStream:async l=>{s("new outgoing stream",l);let d=await r.createBidirectionalStream(),u=await d3(d,String(o++),i?.direction??"outbound",a,i?.onStreamEnd,t);return a.push(u),u},close:async()=>{s("closing webtransport muxer gracefully");try{r.close()}catch(l){c.abort(l)}},abort:l=>{s("closing webtransport muxer with err:",l);try{r.close()}catch(d){s.error("webtransport session threw error during close",d)}},...Bd()};return c}}}function Xy(r,e){return e.filter(n=>!!r.find(o=>J(n,o))).length===e.length}var pT=Object.values(xr).map(r=>r.decoder).reduce((r,e)=>r.or(e));function mT(r){return Bt.decode(pT.decode(r))}function f3(r){if(!Wu.matches(r))throw new m("Invalid multiaddr, was not a WebTransport address","ERR_INVALID_MULTIADDR");let e=r.stringTuples(),t=e.filter(([i,a])=>i===te("certhash").code).map(([i,a])=>mT(a??"")),n=e.filter(([i,a])=>i===te("p2p").code).map(([i,a])=>pe(a??""))[0],o=r.toOptions(),s=o.host;return o.family===6&&s?.includes(":")&&(s=`[${s}]`),{url:`https://${s}:${o.port}`,certhashes:t,remotePeer:n}}var Qy=globalThis.WebTransport;var h3=class{log;components;config;metrics;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webtransport"),this.components=e,this.config={...t,maxInboundStreams:t.maxInboundStreams??1e3,certificates:t.certificates??[]},e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webtransport_dialer_events_total",{label:"event",help:"Total count of WebTransport dialer events by type"})})}[Symbol.toStringTag]="@libp2p/webtransport";[un]=!0;[Te]=["@libp2p/transport"];async dial(e,t){if(t?.signal?.aborted===!0)throw new dn;this.log("dialing %s",e);let n=this.components.peerId;if(n===void 0)throw new m("Need a local peerid","ERR_INVALID_PARAMETERS");t=t??{};let{url:o,certhashes:s,remotePeer:i}=f3(e),a,c,l=()=>{},d=!1,u=!1,f=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let h=new Qy(`${o}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:s.map(p=>({algorithm:"sha-256",value:p.digest}))});if(l=p=>{if(!d)try{this.metrics?.dialerEvents.increment({[p]:!0}),h.close()}catch(g){this.log.error("error closing wt session",g)}finally{c!=null&&(c.timeline.close=Date.now()),d=!0}},a=()=>{l(u?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",a,{once:!0}),this.log("wait for session to be ready"),t.onProgress?.(new H("webtransport:wait-for-session")),await Promise.race([h.closed,h.ready]),this.log("session became ready"),u=!0,this.metrics?.dialerEvents.increment({ready:!0}),h.closed.catch(p=>{this.log.error("error on remote wt session close",p)}).finally(()=>{l("remote_close")}),f=await Ce(this.authenticateWebTransport({wt:h,localPeer:n,remotePeer:i,certhashes:s,...t}),t.signal),!f)throw new m("Failed to authenticate webtransport","ERR_AUTHENTICATION_FAILED");return this.metrics?.dialerEvents.increment({open:!0}),c={close:async()=>{this.log("closing webtransport"),l("close")},abort:p=>{this.log("aborting webtransport due to passed err",p),l("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...Bd()},await t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:Yy(h,h.incomingBidirectionalStreams.getReader(),this.components.logger,this.config),skipProtection:!0,onProgress:t.onProgress})}catch(h){throw this.log.error("caught wt session err",h),l(f?"upgrade_error":u?"noise_error":"ready_error"),h}finally{a!=null&&t.signal?.removeEventListener("abort",a)}}async authenticateWebTransport({wt:e,localPeer:t,remotePeer:n,certhashes:o,onProgress:s,signal:i}){i?.throwIfAborted(),s?.(new H("webtransport:open-authentication-stream"));let a=await e.createBidirectionalStream(),c=a.writable.getWriter(),l=a.readable.getReader(),d={source:async function*(){for(;;){let h=await l.read();if(h.value!=null&&(yield h.value),h.done)break}}(),sink:async h=>{for await(let p of h){await Ce(c.ready,i);let g=p instanceof Uint8Array?p:p.subarray();c.write(g).catch(y=>{this.log.error("could not write chunk during authentication of WebTransport stream",y)})}}},u=Ti()(this.components);s?.(new H("webtransport:secure-outbound-connection"));let{remoteExtensions:f}=await u.secureOutbound(t,d,n);if(s?.(new H("webtransport:close-authentication-stream")),c.close().catch(h=>{this.log.error(`Failed to close authentication stream writer: ${h.message}`)}),l.cancel().catch(h=>{this.log.error(`Failed to close authentication stream reader: ${h.message}`)}),!Xy(f?.webtransportCerthashes??[],o.map(h=>h.bytes)))throw new Error("Our certhashes are not a subset of the remote's reported certhashes");return!0}createListener(e){return l3(this.components,{...e,certificates:this.config.certificates,maxInboundStreams:this.config.maxInboundStreams})}listenFilter(){return[]}dialFilter(e){return globalThis.WebTransport==null?[]:e.filter(t=>{if(!Wu.exactMatch(t))return!1;let{url:n,certhashes:o}=f3(t);return n!=null&&o.length>0})}};function Zy(r={}){return e=>new h3(e,r)}var p3=nt(e1(),1);function jy(r,e){let t=e.map((n,o)=>({record:wn(n),index:o}));return t.sort((n,o)=>{let s=n.record.sequence,i=o.record.sequence;if(s>i)return-1;if(s<i)return 1;if(n.record.validityType===Jt.ValidityType.EOL&&o.record.validityType===Jt.ValidityType.EOL){let a=p3.default.fromString(n.record.validity).toDate(),c=p3.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var Md="1.9.4",Ud="libp2p";var ew="4.2.6",tw="helia";var rw={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function Fd(r={}){let e=`${tw}/${ew} ${Ud}/${Md} UserAgent=${globalThis.navigator.userAgent}`;return{peerId:r.peerId,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[Rp({discoverRelays:1}),ky(),Cy(),Zy(),zy()],connectionEncryption:[Ti()],streamMuxers:[f7(),ry()],peerDiscovery:[T7(rw)],services:{autoNAT:g7(),dcutr:H7(),delegatedRouting:()=>mg("https://delegated-ipfs.dev"),dht:C9({clientMode:!0,validators:{ipns:n1},selectors:{ipns:jy}}),identify:n9({agentVersion:e}),identifyPush:o9({agentVersion:e}),keychain:Ed(r.keychain),ping:ay()}}}var nw=async()=>{let r=await xa("Ed25519"),e=await gT(r);if(e.type==="Ed25519")return e;throw new Error(`Generated unexpected PeerId type "${e.type}"`)};async function gT(r){return ut(e0(r.public),t0(r))}var St={ERR_INVALID_PARAMETERS:"ERR_INVALID_PARAMETERS"};var zi;(function(r){let e;(function(o){let s;o.codec=()=>(s==null&&(s=oe((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&i.value.byteLength>0&&(a.uint32(18),a.bytes(i.value)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:"",value:new Uint8Array(0)},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=i.bytes();break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>ne(i,o.codec()),o.decode=i=>re(i,o.codec())})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let s;o.codec=()=>(s==null&&(s=oe((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&(a.uint32(18),Kd.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:""},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=Kd.codec().decode(i,i.uint32());break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>ne(i,o.codec()),o.decode=i=>re(i,o.codec())})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.addresses!=null)for(let a of o.addresses)s.uint32(10),Vd.codec().encode(a,s);if(o.protocols!=null)for(let a of o.protocols)s.uint32(18),s.string(a);if(o.publicKey!=null&&(s.uint32(34),s.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(s.uint32(42),s.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())s.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},s);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())s.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},s);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={addresses:[],protocols:[],metadata:new Map,tags:new Map},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.addresses.push(Vd.codec().decode(o,o.uint32()));break;case 2:i.protocols.push(o.string());break;case 4:i.publicKey=o.bytes();break;case 5:i.peerRecordEnvelope=o.bytes();break;case 6:{let l=r.Peer$metadataEntry.codec().decode(o,o.uint32());i.metadata.set(l.key,l.value);break}case 7:{let l=r.Peer$tagsEntry.codec().decode(o,o.uint32());i.tags.set(l.key,l.value);break}default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ne(o,r.codec()),r.decode=o=>re(o,r.codec())})(zi||(zi={}));var Vd;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={multiaddr:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.multiaddr=t.bytes();break;case 2:o.isCertified=t.bool();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Vd||(Vd={}));var Kd;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.value=t.uint32();break;case 2:o.expiry=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Kd||(Kd={}));function Yi(r,e){let t=zi.decode(e);t.publicKey!=null&&r.publicKey==null&&(r=Tm({...r,publicKey:r.publicKey}));let n=new Map,o=BigInt(Date.now());for(let[s,i]of t.tags.entries())i.expiry!=null&&i.expiry<o||n.set(s,i);return{...t,id:r,addresses:t.addresses.map(({multiaddr:s,isCertified:i})=>({multiaddr:Z(s),isCertified:i??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var m3="/peers/";function Xi(r){if(!to(r)||r.type==null)throw new m("Invalid PeerId",St.ERR_INVALID_PARAMETERS);let e=r.toCID().toString();return new De(`${m3}${e}`)}async function ow(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=Z(o.multiaddr)),!ko(o.multiaddr))throw new m("Multiaddr was invalid",St.ERR_INVALID_PARAMETERS);if(!await e(r,o.multiaddr))continue;let s=o.isCertified??!1,i=o.multiaddr.toString(),a=n.get(i);a!=null?o.isCertified=a.isCertified||s:n.set(i,{multiaddr:o.multiaddr,isCertified:s})}return[...n.values()].sort((o,s)=>o.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:o,multiaddr:s})=>({isCertified:o,multiaddr:s.bytes}))}async function Hd(r,e,t,n){if(e==null)throw new m("Invalid PeerData",St.ERR_INVALID_PARAMETERS);if(e.publicKey!=null&&r.publicKey!=null&&!J(e.publicKey,r.publicKey))throw new m("publicKey bytes do not match peer id publicKey bytes",St.ERR_INVALID_PARAMETERS);let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new m("peer id did not match existing peer id",St.ERR_INVALID_PARAMETERS);let s=o?.addresses??[],i=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(s=[],e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=$d(u,{validate:sw})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=$d(u,{validate:iw,map:aw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...e.protocols])),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[f,h]of u)h==null?a.delete(f):a.set(f,h);a=$d([...a.entries()],{validate:sw})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),f=new Map(c);for(let[h,p]of u)p==null?f.delete(h):f.set(h,p);c=$d([...f.entries()],{validate:iw,map:aw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d={addresses:await ow(r,n.addressFilter??(async()=>!0),s),protocols:[...i.values()].sort((u,f)=>u.localeCompare(f)),metadata:a,tags:c,publicKey:o?.id.publicKey??e.publicKey??r.publicKey,peerRecordEnvelope:l};return r.type!=="RSA"&&delete d.publicKey,d}function $d(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([s],[i])=>s.localeCompare(i)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function sw(r,e){if(typeof r!="string")throw new m("Metadata key must be a string",St.ERR_INVALID_PARAMETERS);if(!(e instanceof Uint8Array))throw new m("Metadata value must be a Uint8Array",St.ERR_INVALID_PARAMETERS)}function iw(r,e){if(typeof r!="string")throw new m("Tag name must be a string",St.ERR_INVALID_PARAMETERS);if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new m("Tag value must be an integer",St.ERR_INVALID_PARAMETERS);if(e.value<0||e.value>100)throw new m("Tag value must be between 0-100",St.ERR_INVALID_PARAMETERS)}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new m("Tag ttl must be an integer",St.ERR_INVALID_PARAMETERS);if(e.ttl<0)throw new m("Tag ttl must be between greater than 0",St.ERR_INVALID_PARAMETERS)}}function aw(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function qd(r,e,t){let n=r.toString().split("/")[2],o=lt.decode(n),s=Ze(o),i=t.get(s);if(i!=null)return i;let a=Yi(s,e);return t.set(s,a),a}function yT(r,e){return r==null?{}:{prefix:m3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(qd(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(qd(n.key,n.value,e),qd(o.key,o.value,e)))}}var Gd=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=Ma({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(Xi(e))}async delete(e){if(this.peerId.equals(e))throw new m("Cannot delete self peer",St.ERR_INVALID_PARAMETERS);await this.datastore.delete(Xi(e))}async load(e){let t=await this.datastore.get(Xi(e));return Yi(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Hd(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,s,n,o)}async patch(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Hd(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async merge(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Hd(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async*all(e){let t=new st;for await(let{key:n,value:o}of this.datastore.query(yT(e??{},t))){let s=qd(n,o,t);s.id.equals(this.peerId)||(yield s)}}async#e(e){try{let t=await this.datastore.get(Xi(e)),n=Yi(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.code!=="ERR_NOT_FOUND")throw t}return{}}async#t(e,t,n,o){let s=zi.encode(t);return n!=null&&J(s,n)?{peer:Yi(e,s),previous:o,updated:!1}:(await this.datastore.put(Xi(e),s),{peer:Yi(e,s),previous:o,updated:!0})}};var Wd=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new Gd(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await Ya(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await mr.openAndCertify(e,Kt.DOMAIN);if(t?.equals(n.peerId)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,n.peerId),!1;let o=Kt.createFromProtobuf(n.payload),s;try{s=await this.get(n.peerId)}catch(i){if(i.code!=="ERR_NOT_FOUND")throw i}if(s?.peerRecordEnvelope!=null){let i=await mr.createFromProtobuf(s.peerRecordEnvelope),a=Kt.createFromProtobuf(i.payload);if(a.seqNumber>=o.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",a.seqNumber,o.seqNumber),!1}return await this.patch(o.peerId,{peerRecordEnvelope:e,addresses:o.multiaddrs.map(i=>({isCertified:!0,multiaddr:i}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function cw(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var wT=r=>r;function g3(r,e){let t=r.getPeerId();return t!=null&&pe(t).equals(e)&&(r=r.decapsulate(Z(`/p2p/${e.toString()}`))),r}var zd=class{log;components;listen;announce;observed;announceFilter;constructor(e,t={}){let{listen:n=[],announce:o=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.observed=new Map,this.announceFilter=t.announceFilter??wT,this._updatePeerStoreAddresses=cw(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAnnounceAddrs().concat(this.components.transportManager.getAddrs()).concat([...this.observed.entries()].filter(([t,n])=>n.confident).map(([t])=>Z(t))).map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>Z(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>Z(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>Z(e))}addObservedAddr(e){e=g3(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=g3(e,this.components.peerId);let t=e.toString(),o=(this.observed.get(t)??{confident:!1}).confident;this.observed.set(t,{confident:!0}),o||this._updatePeerStoreAddresses()}removeObservedAddr(e){e=g3(e,this.components.peerId);let t=e.toString();this.observed.delete(t)}getAddresses(){let e=this.getAnnounceAddrs().map(n=>n.toString());e.length===0&&(e=this.components.transportManager.getAddrs().map(n=>n.toString())),e=e.concat(Array.from(this.observed).filter(([n,o])=>o.confident).map(([n])=>n));let t=new Set(e);return this.announceFilter(Array.from(t).map(n=>Z(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var y3=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=So())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>xc(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},ET=["metrics","connectionProtector","dns"],bT=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function lw(r={}){let e=new y3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!bT.includes(o)){let i=e.components[o];if(i==null&&!ET.includes(o))throw new m(`${o} not set`,"ERR_SERVICE_MISSING");return i}return Reflect.get(n,o,s)},set(n,o,s){return typeof o=="string"?e.components[o]=s:Reflect.set(n,o,s),!0}})}function uw(r){let e={};for(let t of Object.values(r.components))for(let n of xT(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of _T(t))if(e[n]!==!0)throw new m(`Service "${vT(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`,"ERR_UNMET_SERVICE_DEPENDENCIES")}function xT(r){return Array.isArray(r?.[Te])?r[Te]:[]}function _T(r){return Array.isArray(r?.[Mr])?r[Mr]:[]}function vT(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function dw(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!Zt(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function w3(r){try{let{address:e}=r.nodeAddress();return!!Zt(e)}catch{return!0}}function ST(r,e){let t=w3(r.multiaddr),n=w3(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function RT(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function AT(r,e){let t=bs.exactMatch(r.multiaddr),n=bs.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Qi(r,e){let t=ST(r,e);if(t!==0)return t;let n=AT(r,e);return n!==0?n:RT(r,e)}var IT=32,{code:TT}=te("dnsaddr"),E3=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},Ds=async function(e,t={}){let n=t.maxRecursiveDepth??IT;if(n===0)throw new E3("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===TT)??[],i=await(t?.dns??su()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[lr.TXT]}),a=e.getPeerId(),c=[];for(let l of i.Answer){let d=l.data.replace(/["']/g,"").trim().split("=")[1];if(d==null||a!=null&&!d.includes(a))continue;let u=Z(d);if(d.startsWith("/dnsaddr")){let f=await u.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(h=>h.toString()))}else c.push(u.toString())}return c};var Jn;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.ERR_PROTECTOR_REQUIRED="Private network is enforced, but no protector was provided",r.NOT_FOUND="Not found"})(Jn||(Jn={}));var Y;(function(r){r.ERR_PROTECTOR_REQUIRED="ERR_PROTECTOR_REQUIRED",r.ERR_PEER_DIAL_INTERCEPTED="ERR_PEER_DIAL_INTERCEPTED",r.ERR_CONNECTION_INTERCEPTED="ERR_CONNECTION_INTERCEPTED",r.ERR_INVALID_PROTOCOLS_FOR_STREAM="ERR_INVALID_PROTOCOLS_FOR_STREAM",r.ERR_CONNECTION_ENDED="ERR_CONNECTION_ENDED",r.ERR_CONNECTION_FAILED="ERR_CONNECTION_FAILED",r.ERR_NODE_NOT_STARTED="ERR_NODE_NOT_STARTED",r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_TOO_MANY_ADDRESSES="ERR_TOO_MANY_ADDRESSES",r.ERR_NO_VALID_ADDRESSES="ERR_NO_VALID_ADDRESSES",r.ERR_RELAYED_DIAL="ERR_RELAYED_DIAL",r.ERR_DIALED_SELF="ERR_DIALED_SELF",r.ERR_DISCOVERED_SELF="ERR_DISCOVERED_SELF",r.ERR_DUPLICATE_TRANSPORT="ERR_DUPLICATE_TRANSPORT",r.ERR_ENCRYPTION_FAILED="ERR_ENCRYPTION_FAILED",r.ERR_HOP_REQUEST_FAILED="ERR_HOP_REQUEST_FAILED",r.ERR_INVALID_KEY="ERR_INVALID_KEY",r.ERR_INVALID_MESSAGE="ERR_INVALID_MESSAGE",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_PEER="ERR_INVALID_PEER",r.ERR_MUXER_UNAVAILABLE="ERR_MUXER_UNAVAILABLE",r.ERR_NOT_FOUND="ERR_NOT_FOUND",r.ERR_TRANSPORT_UNAVAILABLE="ERR_TRANSPORT_UNAVAILABLE",r.ERR_TRANSPORT_DIAL_FAILED="ERR_TRANSPORT_DIAL_FAILED",r.ERR_UNSUPPORTED_PROTOCOL="ERR_UNSUPPORTED_PROTOCOL",r.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED="ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_SIGNATURE_NOT_VALID="ERR_SIGNATURE_NOT_VALID",r.ERR_FIND_SELF="ERR_FIND_SELF",r.ERR_NO_ROUTERS_AVAILABLE="ERR_NO_ROUTERS_AVAILABLE",r.ERR_CONNECTION_NOT_MULTIPLEXED="ERR_CONNECTION_NOT_MULTIPLEXED",r.ERR_NO_DIAL_TOKENS="ERR_NO_DIAL_TOKENS",r.ERR_INVALID_CMS="ERR_INVALID_CMS",r.ERR_MISSING_KEYS="ERR_MISSING_KEYS",r.ERR_NO_KEY="ERR_NO_KEY",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_MISSING_PUBLIC_KEY="ERR_MISSING_PUBLIC_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_WRONG_PING_ACK="ERR_WRONG_PING_ACK",r.ERR_INVALID_RECORD="ERR_INVALID_RECORD",r.ERR_ALREADY_SUCCEEDED="ERR_ALREADY_SUCCEEDED",r.ERR_NO_HANDLER_FOR_PROTOCOL="ERR_NO_HANDLER_FOR_PROTOCOL",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_CONNECTION_DENIED="ERR_CONNECTION_DENIED",r.ERR_TRANSFER_LIMIT_EXCEEDED="ERR_TRANSFER_LIMIT_EXCEEDED"})(Y||(Y={}));var CT={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Ds},addressSorter:Qi},transportManager:{faultTolerance:ro.FATAL_ALL}};async function fw(r){let e=qi(CT,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new m(Jn.ERR_PROTECTOR_REQUIRED,Y.ERR_PROTECTOR_REQUIRED);if(e.privateKey!=null&&!(await ut(e.privateKey.public.bytes,e.privateKey.bytes)).equals(e.peerId))throw new m("Private key doesn't match peer id",Y.ERR_INVALID_KEY);return e}function Yd(r){if(to(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:pe(t),r.forEach(n=>{if(!ko(n))throw new m("Invalid Multiaddr",Y.ERR_INVALID_MULTIADDR);let o=n.getPeerId();if(o==null){if(e!=null)throw new m("Multiaddrs must all have the same peer id or have no peer id",Y.ERR_INVALID_PARAMETERS)}else{let s=pe(o);if(e?.equals(s)!==!0)throw new m("Multiaddrs must all have the same peer id or have no peer id",Y.ERR_INVALID_PARAMETERS)}})}return{peerId:e,multiaddrs:r}}var Xd="last-dial-failure";var Qd=5,Zd=100,jd=50,Jd=1e3*60*7;var Ns={minConnections:Qd,maxQueueLength:100,autoDialConcurrency:25,autoDialPriority:0,autoDialInterval:5e3,autoDialPeerRetryThreshold:Jd,autoDialDiscoveredPeersDebounce:10},ef=class{connectionManager;peerStore;queue;minConnections;autoDialPriority;autoDialIntervalMs;autoDialMaxQueueLength;autoDialPeerRetryThresholdMs;autoDialDiscoveredPeersDebounce;autoDialInterval;started;running;log;constructor(e,t){this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.minConnections=t.minConnections??Ns.minConnections,this.autoDialPriority=t.autoDialPriority??Ns.autoDialPriority,this.autoDialIntervalMs=t.autoDialInterval??Ns.autoDialInterval,this.autoDialMaxQueueLength=t.maxQueueLength??Ns.maxQueueLength,this.autoDialPeerRetryThresholdMs=t.autoDialPeerRetryThreshold??Ns.autoDialPeerRetryThreshold,this.autoDialDiscoveredPeersDebounce=t.autoDialDiscoveredPeersDebounce??Ns.autoDialDiscoveredPeersDebounce,this.log=e.logger.forComponent("libp2p:connection-manager:auto-dial"),this.started=!1,this.running=!1,this.queue=new qt({concurrency:t.autoDialConcurrency??Ns.autoDialConcurrency,metricName:"libp2p_autodial_queue",metrics:e.metrics}),this.queue.addEventListener("error",o=>{this.log.error("error during auto-dial",o.detail)}),e.events.addEventListener("connection:close",()=>{this.autoDial().catch(o=>{this.log.error(o)})});let n;e.events.addEventListener("peer:discovery",()=>{clearTimeout(n),n=setTimeout(()=>{this.autoDial().catch(o=>{this.log.error(o)})},this.autoDialDiscoveredPeersDebounce)})}isStarted(){return this.started}start(){this.started=!0}afterStart(){this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})}stop(){this.queue.clear(),clearTimeout(this.autoDialInterval),this.started=!1,this.running=!1}async autoDial(){if(!this.started||this.running)return;let e=this.connectionManager.getConnectionsMap(),t=e.size;if(t>=this.minConnections){this.minConnections>0&&this.log.trace("have enough connections %d/%d",t,this.minConnections);return}if(this.queue.size>this.autoDialMaxQueueLength){this.log("not enough connections %d/%d but auto dial queue is full",t,this.minConnections),this.sheduleNextAutodial();return}this.running=!0,this.log("not enough connections %d/%d - will dial peers to increase the number of connections",t,this.minConnections);let n=new Ct(this.connectionManager.getDialQueue().map(l=>l.peerId).filter(Boolean)),o=await this.peerStore.all({filters:[l=>l.addresses.length===0?(this.log.trace("not autodialing %p because they have no addresses",l.id),!1):e.has(l.id)?(this.log.trace("not autodialing %p because they are already connected",l.id),!1):n.has(l.id)?(this.log.trace("not autodialing %p because they are already being dialed",l.id),!1):this.queue.has(l.id)?(this.log.trace("not autodialing %p because they are already being autodialed",l.id),!1):!0]}),s=o.sort(()=>Math.random()>.5?1:-1),i=new st;for(let l of s)i.has(l.id)||i.set(l.id,[...l.tags.values()].reduce((d,u)=>d+u.value,0));let c=s.sort((l,d)=>{let u=i.get(l.id)??0,f=i.get(d.id)??0;return u>f?-1:u<f?1:0}).filter(l=>{let d=l.metadata.get(Xd);if(d==null)return!0;let u=parseInt(U(d));return isNaN(u)?!0:Date.now()-u>this.autoDialPeerRetryThresholdMs});this.log("selected %d/%d peers to dial",c.length,o.length);for(let l of c)this.queue.add(async()=>{let d=this.connectionManager.getConnectionsMap().size;if(d>=this.minConnections){this.log("got enough connections now %d/%d",d,this.minConnections),this.queue.clear();return}this.log("connecting to a peerStore stored peer %p",l.id),await this.connectionManager.openConnection(l.id,{priority:this.autoDialPriority})},{peerId:l.id}).catch(d=>{this.log.error("could not connect to peerStore stored peer",d)});this.running=!1,this.sheduleNextAutodial()}sheduleNextAutodial(){this.started&&(this.autoDialInterval=setTimeout(()=>{this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})},this.autoDialIntervalMs))}};var DT=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function hw(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??DT;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var pw={maxConnections:Zd,allow:[]},tf=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??pw.maxConnections,this.allow=t.allow??pw.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),e.events.addEventListener("connection:open",()=>{this.maybePruneConnections().catch(n=>{this.log.error(n)})})}async maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length;if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;let n=new st;for(let a of e){let c=a.remotePeer;if(!n.has(c)){n.set(c,0);try{let l=await this.peerStore.get(c);n.set(c,[...l.tags.values()].reduce((d,u)=>d+u.value,0))}catch(l){l.code!=="ERR_NOT_FOUND"&&this.log.error("error loading peer tags",l)}}}let o=this.sortConnections(e,n),s=Math.max(t-this.maxConnections,0),i=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>a.remoteAddr.toString().startsWith(l.toString()))||i.push(a),i.length===s)break;await Promise.all(i.map(async a=>{await hw(a,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:i})}sortConnections(e,t){return e.sort((n,o)=>{let s=n.timeline.open,i=o.timeline.open;return s<i?1:s>i?-1:0}).sort((n,o)=>n.direction==="outbound"&&o.direction==="inbound"?1:n.direction==="inbound"&&o.direction==="outbound"?-1:0).sort((n,o)=>n.streams.length>o.streams.length?1:n.streams.length<o.streams.length?-1:0).sort((n,o)=>{let s=t.get(n.remotePeer)??0,i=t.get(o.remotePeer)??0;return s>i?1:s<i?-1:0})}};var rf=class extends or{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};async function mw(r,e){let t=!1;for(let o of vi.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}var gc={addressSorter:Qi,maxParallelDials:jd,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:Ds}},nf=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter??gc.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??gc.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??gc.maxDialQueueLength,this.dialTimeout=t.dialTimeout??gc.dialTimeout,this.connections=t.connections??new st,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal);for(let[n,o]of Object.entries(t.resolvers??{}))vi.set(n,o);this.queue=new rf({concurrency:t.maxParallelDials??gc.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{this.log.error("error in dial queue",n.detail)})}start(){this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal)}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Yd(e),s=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(s!=null)return this.log("already connected to %a",s.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),s;let i=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(i!=null){this.log("joining existing dial target for %p",n);for(let a of o)i.options.multiaddrs.add(a.toString());return t.onProgress?.(new H("dial-queue:already-in-dial-queue")),i.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new m("Dial queue is full","ERR_DIAL_QUEUE_FULL");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new H("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a?.onProgress?.(new H("dial-queue:start-dial"));let c=this.createDialAbortController(a?.signal),l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),a?.onProgress?.(new H("dial-queue:calculated-addresses",l)),l.map(({multiaddr:d})=>d.toString()).forEach(d=>{a?.multiaddrs.add(d)})}catch(d){throw c.clear(),d}try{let d=0,u=[];for(let f of l){if(d===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",d,n),new m("Peer had more than maxPeerAddrsToDial",Y.ERR_TOO_MANY_ADDRESSES);d++;try{let h=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});return this.log("dial to %a succeeded",f.multiaddr),h}catch(h){if(this.log.error("dial failed to %a",f.multiaddr,h),n!=null)try{await this.components.peerStore.patch(n,{metadata:{[Xd]:L(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}if(c.aborted)throw new m(h.message,fn);u.push(h)}}throw u.length===1?u[0]:new bc(u,"All multiaddr dials failed",Y.ERR_TRANSPORT_DIAL_FAILED)}finally{c.clear()}},{peerId:n,priority:t.priority??I3,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal,onProgress:t.onProgress})}createDialAbortController(e){let t=_e([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return K(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:Z(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new m("Tried to dial self",Y.ERR_DIALED_SELF);if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new m("The dial request is blocked by gater.allowDialPeer",Y.ERR_PEER_DIAL_INTERCEPTED);if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(u){if(u.code!==Y.ERR_NOT_FOUND)throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...u.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(u){u.code!==Y.ERR_NO_ROUTERS_AVAILABLE&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,u)}}}let s=(await Promise.all(o.map(async u=>{let f=await mw(u.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(u.multiaddr)?u:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;s=s.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(u),isCertified:f.isCertified}:f)}let i=s.filter(u=>{if(this.components.transportManager.dialTransportForMultiaddr(u.multiaddr)==null)return!1;let f=u.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let u of i){let f=u.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||u.isCertified||!1;continue}a.set(f,u)}let c=[...a.values()];if(c.length===0)throw new m("The dial request has no valid addresses",Y.ERR_NO_VALID_ADDRESSES);let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=l.sort(this.addressSorter);if(d.length===0)throw new m("The connection gater denied all addresses in the dial request",Y.ERR_NO_VALID_ADDRESSES);return this.log.trace("addresses for %p before filtering",e??"unknown peer",s.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnTransientConnection===!1?n.find(o=>!bs.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var I3=50,eo={minConnections:Qd,maxConnections:Zd,inboundConnectionThreshold:5,maxIncomingPendingConnections:10,autoDialConcurrency:25,autoDialPriority:0,autoDialMaxQueueLength:100,autoDialPeerRetryThreshold:Jd,autoDialDiscoveredPeersDebounce:10},of=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;maxConnections;dialQueue;autoDial;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??eo.maxConnections;let n=t.minConnections??eo.minConnections;if(this.maxConnections<n)throw new m("Connection Manager maxConnections must be greater than minConnections",Y.ERR_INVALID_PARAMETERS);this.connections=new st,this.started=!1,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),this.allow=(t.allow??[]).map(o=>Z(o)),this.deny=(t.deny??[]).map(o=>Z(o)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??eo.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new Gi({points:t.inboundConnectionThreshold??eo.inboundConnectionThreshold,duration:1}),this.autoDial=new ef({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{minConnections:n,autoDialConcurrency:t.autoDialConcurrency??eo.autoDialConcurrency,autoDialPriority:t.autoDialPriority??eo.autoDialPriority,autoDialPeerRetryThreshold:t.autoDialPeerRetryThreshold??eo.autoDialPeerRetryThreshold,autoDialDiscoveredPeersDebounce:t.autoDialDiscoveredPeersDebounce??eo.autoDialDiscoveredPeersDebounce,maxQueueLength:t.autoDialMaxQueueLength??eo.autoDialMaxQueueLength}),this.connectionPruner=new tf({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new nf(e,{addressSorter:t.addressSorter??Qi,maxParallelDials:t.maxParallelDials??jd,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:Ds},connections:this.connections})}[Symbol.toStringTag]="@libp2p/connection-manager";isStarted(){return this.started}async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,outbound:0};for(let t of this.connections.values())for(let n of t)n.direction==="inbound"?e.inbound++:e.outbound++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let s=`${o.direction} ${o.protocol??"unnegotiated"}`;e[s]=(e[s]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let s={};for(let i of o.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;s[a]=(s[a]??0)+1}for(let[i,a]of Object.entries(s))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((i,a)=>i-a);let s=Math.floor(o.length*.9);t[n]=o[s]}return t}}),this.dialQueue.start(),this.autoDial.start(),this.started=!0,this.log("started")}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has($3)]});await Promise.all(e.map(async t=>{await this.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)}),this.autoDial.afterStart()}async stop(){this.dialQueue.stop(),this.autoDial.stop();let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}let n=t.remotePeer,o=this.connections.get(n),s=!1;o!=null?o.push(t):(s=!0,this.connections.set(n,[t])),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),s&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e;if(!this.started)return;let n=t.remotePeer,o=this.connections.get(n);o!=null&&o.length>1?(o=o.filter(s=>s.id!==t.id),this.connections.set(n,o)):o!=null&&(this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.isStarted())throw new m("Not started",Y.ERR_NODE_NOT_STARTED);t.signal?.throwIfAborted();let{peerId:n}=Yd(e);if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>!c.transient);if(a!=null)return this.log("had an existing non-transient connection to %p",n),t.onProgress?.(new H("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??I3}),s=this.connections.get(o.remotePeer);s==null&&(s=[],this.connections.set(o.remotePeer,s));let i=!1;for(let a of s)a.id===o.id&&(i=!0);return i||s.push(o),o}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(s){o.abort(s)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>Z(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var LT=1e4,OT="1.0.0",BT="ping",MT="ipfs",gw=32,sf=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??MT}/${BT}/${OT}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??LT,this.timeout=new Fi({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Te]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now();try{let n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal}),o=await e.newStream(this.protocol,{signal:n,runOnTransientConnection:!0}),s=f1(o);t=Date.now(),await Promise.all([s.write(je(gw),{signal:n}),s.read(gw,{signal:n})]),e.rtt=Date.now()-t,await s.unwrap().close({signal:n})}catch(n){if(n.code!=="ERR_UNSUPPORTED_PROTOCOL")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat, aborting connection",t),e.abort(t)})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var af=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e}[Symbol.toStringTag]="@libp2p/content-routing";isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new m("No content routers available",Y.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=new Ct;for await(let s of Ot(...n.routers.map(i=>i.findProviders(e,t))))s!=null&&(s.multiaddrs.length>0&&await this.components.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id)&&(o.add(s.id),yield s))}async provide(e,t={}){if(this.routers.length===0)throw new m("No content routers available",Y.ERR_NO_ROUTERS_AVAILABLE);await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new m(Jn.NOT_STARTED_YET,Y.ERR_NODE_NOT_STARTED);await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new m(Jn.NOT_STARTED_YET,Y.ERR_NODE_NOT_STARTED);return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var cf=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[]}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new m("No peer routers available",Y.ERR_NO_ROUTERS_AVAILABLE);if(e.toString()===this.peerId.toString())throw new m("Should not try to find self",Y.ERR_FIND_SELF);let n=this,o=Ot(...this.routers.map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),s;throw new m(Jn.NOT_FOUND,Y.ERR_NOT_FOUND)}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new m("No peer routers available",Y.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=Ia(1024);for await(let s of on(async function*(){let i=Ot(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of i)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))s!=null&&(s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id.toBytes())&&(o.add(s.id.toBytes()),yield s))}};var lf=class extends me{peerRouting;log;walking;walkers;shutdownController;walkController;needNext;constructor(e){super(),this.log=e.logger.forComponent("libp2p:random-walk"),this.peerRouting=e.peerRouting,this.walkers=0,this.walking=!1,this.shutdownController=new AbortController,K(1/0,this.shutdownController.signal)}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,K(1/0,this.shutdownController.signal)}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=_e([this.shutdownController.signal,e?.signal]);K(1/0,t);try{for(;;)this.needNext?.resolve(),this.needNext=ee(),yield(await nr(this,"walk:peer",t,{errorEvent:"walk:error"})).detail}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,K(1/0,this.walkController.signal);let e=_e([this.walkController.signal,this.shutdownController.signal]);K(1/0,e);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=je(32),s=Date.now();for await(let i of this.peerRouting.getClosestPeers(o,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",i.id,Date.now()-s,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:i}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await Ce(this.needNext.promise,e)),s=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("randomwalk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("randomwalk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var T3=32,C3=64,uf=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new m(`No handler registered for protocol ${e}`,Y.ERR_NO_HANDLER_FOR_PROTOCOL);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e))throw new m(`Handler already registered for protocol ${e}`,Y.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);let o=qi.bind({ignoreUndefined:!0})({maxInboundStreams:T3,maxOutboundStreams:C3},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new m("invalid topology",Y.ERR_INVALID_PARAMETERS);let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let s=this.topologies.get(o);if(s!=null)for(let i of s.values())i.filter?.has(t)!==!1&&(i.filter?.remove(t),i.onDisconnect?.(t))}}).catch(n=>{n.code!==Y.ERR_NOT_FOUND&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(s=>!t.protocols.includes(s));for(let s of o){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),a.onDisconnect?.(t.id))}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let s of t){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())n.transient&&a.notifyOnTransient!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var df=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=new Map,this.listeners=Pu({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ro.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new m("Transport must have a valid tag",Y.ERR_INVALID_KEY);if(this.transports.has(t))throw new m(`There is already a transport with the tag ${t}`,Y.ERR_DUPLICATE_TRANSPORT);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new m(`No transport available for address ${String(e)}`,Y.ERR_TRANSPORT_UNAVAILABLE);t?.onProgress?.(new H("transport-manager:selected-transport",n[Symbol.toStringTag]));try{return await n.dial(e,{...t,upgrader:this.components.upgrader})}catch(o){throw o.code==null&&(o.code=Y.ERR_TRANSPORT_DIAL_FAILED),o}}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new m("Not started",Y.ERR_NODE_NOT_STARTED);if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,o]of this.transports.entries()){let s=o.listenFilter(e),i=[];for(let l of s){this.log("creating listener for %s on %a",n,l);let d=o.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(n)??[];u==null&&(u=[],this.listeners.set(n,u)),u.push(d),d.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:d})}),d.addEventListener("close",()=>{let f=u.findIndex(h=>h===d);u.splice(f,1),this.components.events.safeDispatchEvent("transport:close",{detail:d})}),i.push(d.listen(l))}if(i.length===0){t.push(n);continue}if((await Promise.allSettled(i)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==ro.NO_FATAL)throw new m(`Transport (${n}) could not listen on any available address`,Y.ERR_NO_VALID_ADDRESSES)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===ro.FATAL_ALL)throw new m(n,Y.ERR_NO_VALID_ADDRESSES);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Rt="/multistream/1.0.0";var UT=L(`
39
+ `);async function Ps(r,e,t){await r.write(e,t)}async function yw(r,e,t){await r.writeV(e,t)}async function FT(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==UT[0])throw e.log.error("Invalid mss message - missing newline",t),new m("missing newline","ERR_INVALID_MULTISTREAM_SELECT_MESSAGE");return t.sublist(0,-1)}async function Ho(r,e){let t=await FT(r,e);return U(t.subarray())}async function yc(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return VT(r,e[0],t);let n=En(r,{...t,maxDataLength:1024}),o=e.shift();if(o==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',Rt,o);let s=L(`${Rt}
40
40
  `),i=L(`${o}
41
- `);await nw(n,[s,i],t),t.log.trace("select: reading multistream-select header");let a=await Uo(n,t);if(t.log.trace('select: read "%s"',a),a===Rt&&(t.log.trace("select: reading protocol response"),a=await Uo(n,t),t.log.trace('select: read "%s"',a)),a===o)return{stream:n.unwrap(),protocol:o};for(let c of e){t.log.trace('select: write "%s"',c),await ks(n,L(`${c}
42
- `),t),t.log.trace("select: reading protocol response");let l=await Uo(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new g("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}function vT(r,e,t){let n=r.sink.bind(r),o=r.source,s=!1,i=!1,a=ee(),c=!1,l=!1,d=ee(),u=!1,h=!1,f=ee(),p=yn({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async b=>{let{sink:E}=p.unwrap();await E(async function*(){let x=!1;for await(let _ of b){if(l&&await d.promise,c)yield _;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',Rt,e,_.byteLength);let I=`${e}
43
- `;yield new ce(Uint8Array.from([19]),L(`${Rt}
44
- `),Ve(I.length),L(I),_).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',Rt,e,_.byteLength),c=!0,l=!1,d.resolve(),m().catch(A=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,A)})}x=!0}x||await m()}())};async function m(){if(i){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}i=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await y()),u||(t.log.trace("optimistic: doing read protocol for %s stream",e),await w())}finally{i=!1,s=!0,a.resolve()}}async function y(){if(l){await d.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',Rt,e),await p.writeV([L(`${Rt}
41
+ `);await yw(n,[s,i],t),t.log.trace("select: reading multistream-select header");let a=await Ho(n,t);if(t.log.trace('select: read "%s"',a),a===Rt&&(t.log.trace("select: reading protocol response"),a=await Ho(n,t),t.log.trace('select: read "%s"',a)),a===o)return{stream:n.unwrap(),protocol:o};for(let c of e){t.log.trace('select: write "%s"',c),await Ps(n,L(`${c}
42
+ `),t),t.log.trace("select: reading protocol response");let l=await Ho(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new m("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}function VT(r,e,t){let n=r.sink.bind(r),o=r.source,s=!1,i=!1,a=ee(),c=!1,l=!1,d=ee(),u=!1,f=!1,h=ee(),p=En({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async b=>{let{sink:E}=p.unwrap();await E(async function*(){let x=!1;for await(let T of b){if(l&&await d.promise,c)yield T;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',Rt,e,T.byteLength);let C=`${e}
43
+ `;yield new ae(Uint8Array.from([19]),L(`${Rt}
44
+ `),Ve(C.length),L(C),T).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',Rt,e,T.byteLength),c=!0,l=!1,d.resolve(),g().catch(v=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,v)})}x=!0}x||await g()}())};async function g(){if(i){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}i=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await y()),u||(t.log.trace("optimistic: doing read protocol for %s stream",e),await w())}finally{i=!1,s=!0,a.resolve()}}async function y(){if(l){await d.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',Rt,e),await p.writeV([L(`${Rt}
45
45
  `),L(`${e}
46
- `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Rt,e)}finally{c=!0,l=!1,d.resolve()}}async function w(){if(h){await f.promise;return}h=!0;try{t.log.trace("optimistic: reading multistream select header");let b=await Uo(p,t);if(t.log.trace('optimistic: read multistream select header "%s"',b),b===Rt&&(b=await Uo(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',b,e),b!==e)throw new g("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}finally{u=!0,h=!1,f.resolve()}}if(r.source=async function*(){await m(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*p.unwrap().source}(),r.closeRead!=null){let b=r.closeRead.bind(r);r.closeRead=async E=>{s||await m().catch(x=>{t.log.error("could not negotiate protocol before close read",x)}),await b(E)}}if(r.closeWrite!=null){let b=r.closeWrite.bind(r);r.closeWrite=async E=>{s||await m().catch(x=>{t.log.error("could not negotiate protocol before close write",x)}),await b(E)}}if(r.close!=null){let b=r.close.bind(r);r.close=async E=>{let x=[];l&&x.push(d.promise),h&&x.push(f.promise),x.length>0?await ke(Promise.all(x),E?.signal):(s=!0,i=!1,a.resolve()),await b(E)}}return{stream:r,protocol:e}}async function mc(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=yn(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Uo(n,t);if(t.log.trace('handle: read "%s"',o),o===Rt){t.log.trace('handle: respond with "%s" for "%s"',Rt,o),await ks(n,L(`${Rt}
47
- `),t),t.log.trace('handle: responded with "%s" for "%s"',Rt,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await ks(n,L(`${o}
48
- `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let s=new ce(...e.map(i=>Ht.single(L(`${i}
46
+ `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Rt,e)}finally{c=!0,l=!1,d.resolve()}}async function w(){if(f){await h.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let b=await Ho(p,t);if(t.log.trace('optimistic: read multistream select header "%s"',b),b===Rt&&(b=await Ho(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',b,e),b!==e)throw new m("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}finally{u=!0,f=!1,h.resolve()}}if(r.source=async function*(){await g(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*p.unwrap().source}(),r.closeRead!=null){let b=r.closeRead.bind(r);r.closeRead=async E=>{s||await g().catch(x=>{t.log.error("could not negotiate protocol before close read",x)}),await b(E)}}if(r.closeWrite!=null){let b=r.closeWrite.bind(r);r.closeWrite=async E=>{s||await g().catch(x=>{t.log.error("could not negotiate protocol before close write",x)}),await b(E)}}if(r.close!=null){let b=r.close.bind(r);r.close=async E=>{let x=[];l&&x.push(d.promise),f&&x.push(h.promise),x.length>0?await Ce(Promise.all(x),E?.signal):(s=!0,i=!1,a.resolve()),await b(E)}}return{stream:r,protocol:e}}async function wc(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=En(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Ho(n,t);if(t.log.trace('handle: read "%s"',o),o===Rt){t.log.trace('handle: respond with "%s" for "%s"',Rt,o),await Ps(n,L(`${Rt}
47
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',Rt,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Ps(n,L(`${o}
48
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let s=new ae(...e.map(i=>Wt.single(L(`${i}
49
49
  `))),L(`
50
- `));t.log.trace('handle: respond with "%s" for %s',e,o),await ks(n,s,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log('handle: respond with "na" for "%s"',o),await ks(n,L(`na
51
- `),t),t.log('handle: responded with "na" for "%s"',o)}}var RT=500,h3=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;transient;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:s,abort:i,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.transient=e.transient??!1,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=s,this._abort=i,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[S3]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new g("the connection is being closed","ERR_CONNECTION_BEING_CLOSED");if(this.status==="closed")throw new g("the connection is closed","ERR_CONNECTION_CLOSED");if(Array.isArray(e)||(e=[e]),this.transient&&t?.runOnTransientConnection!==!0)throw new g("Cannot open protocol stream on transient connection","ERR_TRANSIENT_CONNECTION");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(RT);K(1/0,t),e={...e,signal:t}}try{this.log.trace("closing all streams"),await Promise.all(this.streams.map(async t=>t.close(e))),this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this.streams.forEach(t=>{t.abort(e)}),this.log.error("all streams aborted",this.streams.length),this._abort(e),this.timeline.close=Date.now(),this.status="closed"}};function sw(r){return new h3(r)}var AT=3e4;function IT(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.code!==Y.ERR_NO_HANDLER_FOR_PROTOCOL)throw t}return u3}function TT(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.code!==Y.ERR_NO_HANDLER_FOR_PROTOCOL)throw n}return t.maxOutboundStreams??d3}function iw(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var ef=class{components;connectionEncryption;muxers;inboundUpgradeTimeout;events;constructor(e,t){this.components=e,this.connectionEncryption=new Map,t.connectionEncryption.forEach(n=>{this.connectionEncryption.set(n.protocol,n)}),this.muxers=new Map,t.muxers.forEach(n=>{this.muxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??2e3,this.events=e.events}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,t,n){let o=this.components.connectionGater[n];if(o!==void 0&&await o(e,t))throw new g(`The multiaddr connection is blocked by gater.${n}`,Y.ERR_CONNECTION_INTERCEPTED)}async upgradeInbound(e,t){if(!await this.components.connectionManager.acceptIncomingConnection(e))throw new g("connection denied",Y.ERR_CONNECTION_DENIED);let o,s,i,a,c,l=AbortSignal.timeout(this.inboundUpgradeTimeout),d=()=>{e.abort(new g("inbound upgrade timeout",_n))};l.addEventListener("abort",d,{once:!0}),K(1/0,l);try{if(await this.components.connectionGater.denyInboundConnection?.(e)===!0)throw new g("The multiaddr connection is blocked by gater.acceptConnection",Y.ERR_CONNECTION_INTERCEPTED);this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the inbound connection upgrade");let u=e;if(t?.skipProtection!==!0){let h=this.components.connectionProtector;h!=null&&(e.log("protecting the inbound connection"),u=await h.protect(e))}try{if(o=u,t?.skipEncryption!==!0){t?.onProgress?.(new q("upgrader:encrypt-inbound-connection")),{conn:o,remotePeer:s,protocol:c}=await this._encryptInbound(u);let h={...u,...o};await this.shouldBlockConnection(s,h,"denyInboundEncryptedConnection")}else{let h=e.remoteAddr.getPeerId();if(h==null)throw new g("inbound connection that skipped encryption must have a peer id",Y.ERR_INVALID_MULTIADDR);let f=me(h);c="native",s=f}if(i=o,t?.muxerFactory!=null)a=t.muxerFactory;else if(this.muxers.size>0){t?.onProgress?.(new q("upgrader:multiplex-inbound-connection"));let h=await this._multiplexInbound({...u,...o},this.muxers);a=h.muxerFactory,i=h.stream}}catch(h){throw e.log.error("failed to upgrade inbound connection",h),h}return await this.shouldBlockConnection(s,e,"denyInboundUpgradedConnection"),e.log("successfully upgraded inbound connection"),this._createConnection({cryptoProtocol:c,direction:"inbound",maConn:e,upgradedConn:i,muxerFactory:a,remotePeer:s,transient:t?.transient})}finally{l.removeEventListener("abort",d),this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=me(n),await this.shouldBlockConnection(o,e,"denyOutboundConnection"));let s,i,a,c,l;this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the outbound connection upgrade");let d=e;if(t?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(d=await u.protect(e))}try{if(s=d,t?.skipEncryption!==!0){({conn:s,remotePeer:i,protocol:c}=await this._encryptOutbound(d,o));let u={...d,...s};await this.shouldBlockConnection(i,u,"denyOutboundEncryptedConnection")}else{if(o==null)throw new g("Encryption was skipped but no peer id was passed",Y.ERR_INVALID_PEER);c="native",i=o}if(a=s,t?.muxerFactory!=null)l=t.muxerFactory;else if(this.muxers.size>0){let u=await this._multiplexOutbound({...d,...s},this.muxers);l=u.muxerFactory,a=u.stream}}catch(u){throw e.log.error("failed to upgrade outbound connection",u),await e.close(u),u}return await this.shouldBlockConnection(i,e,"denyOutboundUpgradedConnection"),e.log("successfully upgraded outbound connection"),this._createConnection({cryptoProtocol:c,direction:"outbound",maConn:e,upgradedConn:a,muxerFactory:l,remotePeer:i,transient:t?.transient})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:s,remotePeer:i,muxerFactory:a,transient:c}=e,l,d,u;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{u!=null&&Promise.resolve().then(async()=>{let m=this.components.registrar.getProtocols(),{stream:y,protocol:w}=await mc(p,m,{log:p.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",w);let b=IT(w,this.components.registrar);if(iw(w,"inbound",u)===b){let x=new g(`Too many inbound protocol streams for protocol "${w}" - limit ${b}`,Y.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS);throw p.abort(x),x}p.source=y.source,p.sink=y.sink,p.protocol=w,y.closeWrite!=null&&(p.closeWrite=y.closeWrite),y.closeRead!=null&&(p.closeRead=y.closeRead),y.close!=null&&(p.close=y.close),await this.components.peerStore.merge(i,{protocols:[w]}),this.components.metrics?.trackProtocolStream(p,u),this._onStream({connection:u,stream:p,protocol:w})}).catch(async m=>{u.log.error("error handling incoming stream id %s",p.id,m.message,m.code,m.stack),p.timeline.close==null&&await p.close()})}}),d=async(p,m={})=>{if(l==null)throw new g("Stream is not multiplexed",Y.ERR_MUXER_UNAVAILABLE);u.log("starting new stream for protocols %s",p);let y=await l.newStream();u.log.trace("started new stream %s for protocols %s",y.id,p);try{if(m.signal==null){y.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let _=AbortSignal.timeout(AT);K(1/0,_),m={...m,signal:_}}y.log.trace("selecting protocol from protocols %s",p);let{stream:w,protocol:b}=await pc(y,p,{...m,log:y.log,yieldBytes:!0});y.log("selected protocol %s",b);let E=TT(b,this.components.registrar,m),x=iw(b,"outbound",u);if(x>=E){let _=new g(`Too many outbound protocol streams for protocol "${b}" - ${x}/${E}`,Y.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS);throw y.abort(_),_}return await this.components.peerStore.merge(i,{protocols:[b]}),y.source=w.source,y.sink=w.sink,y.protocol=b,w.closeWrite!=null&&(y.closeWrite=w.closeWrite),w.closeRead!=null&&(y.closeRead=w.closeRead),w.close!=null&&(y.close=w.close),this.components.metrics?.trackProtocolStream(y,u),y}catch(w){throw u.log.error("could not create new stream for protocols %s",p,w),y.timeline.close==null&&y.abort(w),w.code!=null?w:new g(String(w),Y.ERR_UNSUPPORTED_PROTOCOL)}},Promise.all([l.sink(s.source),s.sink(l.source)]).catch(p=>{u.log.error("error piping data through muxer",p)}));let h=o.timeline;o.timeline=new Proxy(h,{set:(...p)=>(u!=null&&p[1]==="close"&&p[2]!=null&&h.close==null&&(async()=>{try{u.status==="open"&&await u.close()}catch(m){u.log.error("error closing connection after timeline close",m)}finally{this.events.safeDispatchEvent("connection:close",{detail:u})}})().catch(m=>{u.log.error("error thrown while dispatching connection:close event",m)}),Reflect.set(...p))}),o.timeline.upgraded=Date.now();let f=()=>{throw new g("connection is not multiplexed",Y.ERR_CONNECTION_NOT_MULTIPLEXED)};return u=sw({remoteAddr:o.remoteAddr,remotePeer:i,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,transient:c,logger:this.components.logger,newStream:d??f,getStreams:()=>l!=null?l.streams:[],close:async p=>{l!=null&&(u.log.trace("close muxer"),await l.close(p)),u.log.trace("close maconn"),await o.close(p),u.log.trace("closed maconn")},abort:p=>{o.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:u}),u}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:s,options:i}=this.components.registrar.getHandler(o);if(t.transient&&i.runOnTransientConnection!==!0)throw new g("Cannot open protocol stream on transient connection","ERR_TRANSIENT_CONNECTION");s({connection:t,stream:n})}async _encryptInbound(e){let t=Array.from(this.connectionEncryption.keys());e.log("handling inbound crypto protocol selection",t);try{let{stream:n,protocol:o}=await mc(e,t,{log:e.log}),s=this.connectionEncryption.get(o);if(s==null)throw new Error(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using",o),{...await s.secureInbound(this.components.peerId,n),protocol:o}}catch(n){throw e.log.error("encrypting inbound connection failed",n),new g(n.message,Y.ERR_ENCRYPTION_FAILED)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncryption.keys());e.log("selecting outbound crypto protocol",n);try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:s}=await pc(e,n,{log:e.log,yieldBytes:!0}),i=this.connectionEncryption.get(s);if(i==null)throw new Error(`no crypto module found for ${s}`);return e.log("encrypting outbound connection to %p using %s",t,i),{...await i.secureOutbound(this.components.peerId,o,t),protocol:s}}catch(o){throw e.log.error("encrypting outbound connection to %p failed",t,o),new g(o.message,Y.ERR_ENCRYPTION_FAILED)}}async _multiplexOutbound(e,t){let n=Array.from(t.keys());e.log("outbound selecting muxer %s",n);try{e.log.trace("selecting stream muxer from %s",n);let{stream:o,protocol:s}=await pc(e,n,{log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing outbound connection",o),new g(String(o),Y.ERR_MUXER_UNAVAILABLE)}}async _multiplexInbound(e,t){let n=Array.from(t.keys());e.log("inbound handling muxers %s",n);try{let{stream:o,protocol:s}=await mc(e,n,{log:e.log}),i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing inbound connection",o),new g(String(o),Y.ERR_MUXER_UNAVAILABLE)}}};var p3=class extends ge{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new ge,n=t.dispatchEvent.bind(t);t.dispatchEvent=a=>{let c=n(a),l=this.dispatchEvent(new Pt(a.type,{detail:a.detail}));return c||l},K(1/0,t),this.peerId=e.peerId,this.logger=e.logger??Eo(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=Qy({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:Td,version:Id},logger:this.logger,events:t,datastore:e.datastore??new Es,connectionGater:jy(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",new Bd(o,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),o.events.addEventListener("peer:update",a=>{if(a.detail.previous==null){let c={id:a.detail.peer.id,multiaddrs:a.detail.peer.addresses.map(l=>l.multiaddr)};o.events.safeDispatchEvent("peer:discovery",{detail:c})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(o)),this.components.upgrader=new ef(this.components,{connectionEncryption:(e.connectionEncryption??[]).map((a,c)=>this.configureComponent(`connection-encryption-${c}`,a(this.components))),muxers:(e.streamMuxers??[]).map((a,c)=>this.configureComponent(`stream-muxers-${c}`,a(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout}),this.configureComponent("transportManager",new Jd(this.components,e.transportManager)),this.configureComponent("connectionManager",new Yd(this.components,e.connectionManager)),this.configureComponent("registrar",new jd(this.components)),this.configureComponent("addressManager",new Md(this.components,e.addresses));let s=(e.peerRouters??[]).map((a,c)=>this.configureComponent(`peer-router-${c}`,a(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new Qd(this.components,{routers:s}));let i=(e.contentRouters??[]).map((a,c)=>this.configureComponent(`content-router-${c}`,a(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new Xd(this.components,{routers:i})),this.configureComponent("randomWalk",new Zd(this.components)),(e.peerDiscovery??[]).forEach((a,c)=>{this.configureComponent(`peer-discovery-${c}`,a(this.components)).addEventListener("peer",d=>{this.#e(d)})}),e.transports?.forEach((a,c)=>{this.components.transportManager.add(this.configureComponent(`transport-${c}`,a(this.components)))}),e.services!=null)for(let a of Object.keys(e.services)){let c=e.services[a],l=c(this.components);if(l==null){this.log.error("service factory %s returned null or undefined instance",a);continue}this.services[a]=l,this.configureComponent(a,l),l[an]!=null&&(this.log("registering service %s for content routing",a),i.push(l[an])),l[cn]!=null&&(this.log("registering service %s for peer routing",a),s.push(l[cn])),l[Vo]!=null&&(this.log("registering service %s for peer discovery",a),l[Vo].addEventListener?.("peer",d=>{this.#e(d)}))}Zy(o)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new kt;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new g("no protocols were provided to open a stream",Y.ERR_INVALID_PROTOCOLS_FOR_STREAM);if(t=Array.isArray(t)?t:[t],t.length===0)throw new g("no protocols were provided to open a stream",Y.ERR_INVALID_PROTOCOLS_FOR_STREAM);return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){Ro(e)&&(e=me(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}let n=ve([L("/pk/"),e.multihash.digest]),o=await this.contentRouting.get(n,t);return Xr(o),await this.peerStore.patch(e,{publicKey:o}),o}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error(new Error(Y.ERR_DISCOVERED_SELF));return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function aw(r={}){let e=r.peerId??=await qy();if(e.privateKey==null)throw new g("peer id was missing private key","ERR_MISSING_PRIVATE_KEY");return r.privateKey??=await Ir(e.privateKey),new p3(await Jy(r))}async function cw(r={}){let e=await aw(r);return r.start!==!1&&await e.start(),e}async function lw(r){let e=r.libp2p?.peerId,t=r.logger??Eo(),n=new Ne("/pkcs8/self"),o;e==null&&r.datastore!=null&&(o=ud(r.keychain)({datastore:r.datastore,logger:t}),await r.datastore.has(n)&&(r.libp2p=r.libp2p??{},r.libp2p.peerId=await o.exportPeerId("self")));let s=Cd(r);s.datastore=s.datastore??r.datastore,r=r??{};let i=await cw({...s,...r.libp2p,start:!1});return e==null&&o!=null&&!await r.datastore.has(n)&&await o.importPeer("self",i.peerId),i}async function CT(r={}){let e=r.datastore??new Es,t=r.blockstore??new Ba,n;kT(r.libp2p)?n=r.libp2p:n=await lw({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new o1({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[J0(),k0()],routers:[m2(n),h2()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function kT(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return vw(DT);})();
50
+ `));t.log.trace('handle: respond with "%s" for %s',e,o),await Ps(n,s,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log('handle: respond with "na" for "%s"',o),await Ps(n,L(`na
51
+ `),t),t.log('handle: responded with "na" for "%s"',o)}}var $T=500,D3=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;transient;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:s,abort:i,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.transient=e.transient??!1,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=s,this._abort=i,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[K3]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new m("the connection is being closed","ERR_CONNECTION_BEING_CLOSED");if(this.status==="closed")throw new m("the connection is closed","ERR_CONNECTION_CLOSED");if(Array.isArray(e)||(e=[e]),this.transient&&t?.runOnTransientConnection!==!0)throw new m("Cannot open protocol stream on transient connection","ERR_TRANSIENT_CONNECTION");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout($T);K(1/0,t),e={...e,signal:t}}try{this.log.trace("closing all streams"),await Promise.all(this.streams.map(async t=>t.close(e))),this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this.streams.forEach(t=>{t.abort(e)}),this.log.error("all streams aborted",this.streams.length),this._abort(e),this.timeline.close=Date.now(),this.status="closed"}};function Ew(r){return new D3(r)}var HT=3e4;function qT(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.code!==Y.ERR_NO_HANDLER_FOR_PROTOCOL)throw t}return T3}function GT(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.code!==Y.ERR_NO_HANDLER_FOR_PROTOCOL)throw n}return t.maxOutboundStreams??C3}function bw(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var ff=class{components;connectionEncryption;muxers;inboundUpgradeTimeout;events;constructor(e,t){this.components=e,this.connectionEncryption=new Map,t.connectionEncryption.forEach(n=>{this.connectionEncryption.set(n.protocol,n)}),this.muxers=new Map,t.muxers.forEach(n=>{this.muxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??2e3,this.events=e.events}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,t,n){let o=this.components.connectionGater[n];if(o!==void 0&&await o(e,t))throw new m(`The multiaddr connection is blocked by gater.${n}`,Y.ERR_CONNECTION_INTERCEPTED)}async upgradeInbound(e,t){if(!await this.components.connectionManager.acceptIncomingConnection(e))throw new m("connection denied",Y.ERR_CONNECTION_DENIED);let o,s,i,a,c,l=AbortSignal.timeout(this.inboundUpgradeTimeout),d=()=>{e.abort(new m("inbound upgrade timeout",fn))};l.addEventListener("abort",d,{once:!0}),K(1/0,l);try{if(await this.components.connectionGater.denyInboundConnection?.(e)===!0)throw new m("The multiaddr connection is blocked by gater.acceptConnection",Y.ERR_CONNECTION_INTERCEPTED);this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the inbound connection upgrade");let u=e;if(t?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(e.log("protecting the inbound connection"),u=await f.protect(e))}try{if(o=u,t?.skipEncryption!==!0){t?.onProgress?.(new H("upgrader:encrypt-inbound-connection")),{conn:o,remotePeer:s,protocol:c}=await this._encryptInbound(u);let f={...u,...o};await this.shouldBlockConnection(s,f,"denyInboundEncryptedConnection")}else{let f=e.remoteAddr.getPeerId();if(f==null)throw new m("inbound connection that skipped encryption must have a peer id",Y.ERR_INVALID_MULTIADDR);let h=pe(f);c="native",s=h}if(i=o,t?.muxerFactory!=null)a=t.muxerFactory;else if(this.muxers.size>0){t?.onProgress?.(new H("upgrader:multiplex-inbound-connection"));let f=await this._multiplexInbound({...u,...o},this.muxers);a=f.muxerFactory,i=f.stream}}catch(f){throw e.log.error("failed to upgrade inbound connection",f),f}return await this.shouldBlockConnection(s,e,"denyInboundUpgradedConnection"),e.log("successfully upgraded inbound connection"),this._createConnection({cryptoProtocol:c,direction:"inbound",maConn:e,upgradedConn:i,muxerFactory:a,remotePeer:s,transient:t?.transient})}finally{l.removeEventListener("abort",d),this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=pe(n),await this.shouldBlockConnection(o,e,"denyOutboundConnection"));let s,i,a,c,l;this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the outbound connection upgrade");let d=e;if(t?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(d=await u.protect(e))}try{if(s=d,t?.skipEncryption!==!0){({conn:s,remotePeer:i,protocol:c}=await this._encryptOutbound(d,o));let u={...d,...s};await this.shouldBlockConnection(i,u,"denyOutboundEncryptedConnection")}else{if(o==null)throw new m("Encryption was skipped but no peer id was passed",Y.ERR_INVALID_PEER);c="native",i=o}if(a=s,t?.muxerFactory!=null)l=t.muxerFactory;else if(this.muxers.size>0){let u=await this._multiplexOutbound({...d,...s},this.muxers);l=u.muxerFactory,a=u.stream}}catch(u){throw e.log.error("failed to upgrade outbound connection",u),await e.close(u),u}return await this.shouldBlockConnection(i,e,"denyOutboundUpgradedConnection"),e.log("successfully upgraded outbound connection"),this._createConnection({cryptoProtocol:c,direction:"outbound",maConn:e,upgradedConn:a,muxerFactory:l,remotePeer:i,transient:t?.transient})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:s,remotePeer:i,muxerFactory:a,transient:c}=e,l,d,u;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{u!=null&&Promise.resolve().then(async()=>{let g=this.components.registrar.getProtocols(),{stream:y,protocol:w}=await wc(p,g,{log:p.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",w);let b=qT(w,this.components.registrar);if(bw(w,"inbound",u)===b){let x=new m(`Too many inbound protocol streams for protocol "${w}" - limit ${b}`,Y.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS);throw p.abort(x),x}p.source=y.source,p.sink=y.sink,p.protocol=w,y.closeWrite!=null&&(p.closeWrite=y.closeWrite),y.closeRead!=null&&(p.closeRead=y.closeRead),y.close!=null&&(p.close=y.close),await this.components.peerStore.merge(i,{protocols:[w]}),this.components.metrics?.trackProtocolStream(p,u),this._onStream({connection:u,stream:p,protocol:w})}).catch(async g=>{u.log.error("error handling incoming stream id %s",p.id,g.message,g.code,g.stack),p.timeline.close==null&&await p.close()})}}),d=async(p,g={})=>{if(l==null)throw new m("Stream is not multiplexed",Y.ERR_MUXER_UNAVAILABLE);u.log("starting new stream for protocols %s",p);let y=await l.newStream();u.log.trace("started new stream %s for protocols %s",y.id,p);try{if(g.signal==null){y.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let T=AbortSignal.timeout(HT);K(1/0,T),g={...g,signal:T}}y.log.trace("selecting protocol from protocols %s",p);let{stream:w,protocol:b}=await yc(y,p,{...g,log:y.log,yieldBytes:!0});y.log("selected protocol %s",b);let E=GT(b,this.components.registrar,g),x=bw(b,"outbound",u);if(x>=E){let T=new m(`Too many outbound protocol streams for protocol "${b}" - ${x}/${E}`,Y.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS);throw y.abort(T),T}return await this.components.peerStore.merge(i,{protocols:[b]}),y.source=w.source,y.sink=w.sink,y.protocol=b,w.closeWrite!=null&&(y.closeWrite=w.closeWrite),w.closeRead!=null&&(y.closeRead=w.closeRead),w.close!=null&&(y.close=w.close),this.components.metrics?.trackProtocolStream(y,u),y}catch(w){throw u.log.error("could not create new stream for protocols %s",p,w),y.timeline.close==null&&y.abort(w),w.code!=null?w:new m(String(w),Y.ERR_UNSUPPORTED_PROTOCOL)}},Promise.all([l.sink(s.source),s.sink(l.source)]).catch(p=>{u.log.error("error piping data through muxer",p)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...p)=>(u!=null&&p[1]==="close"&&p[2]!=null&&f.close==null&&(async()=>{try{u.status==="open"&&await u.close()}catch(g){u.log.error("error closing connection after timeline close",g)}finally{this.events.safeDispatchEvent("connection:close",{detail:u})}})().catch(g=>{u.log.error("error thrown while dispatching connection:close event",g)}),Reflect.set(...p))}),o.timeline.upgraded=Date.now();let h=()=>{throw new m("connection is not multiplexed",Y.ERR_CONNECTION_NOT_MULTIPLEXED)};return u=Ew({remoteAddr:o.remoteAddr,remotePeer:i,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,transient:c,logger:this.components.logger,newStream:d??h,getStreams:()=>l!=null?l.streams:[],close:async p=>{l!=null&&(u.log.trace("close muxer"),await l.close(p)),u.log.trace("close maconn"),await o.close(p),u.log.trace("closed maconn")},abort:p=>{o.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:u}),u}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:s,options:i}=this.components.registrar.getHandler(o);if(t.transient&&i.runOnTransientConnection!==!0)throw new m("Cannot open protocol stream on transient connection","ERR_TRANSIENT_CONNECTION");s({connection:t,stream:n})}async _encryptInbound(e){let t=Array.from(this.connectionEncryption.keys());e.log("handling inbound crypto protocol selection",t);try{let{stream:n,protocol:o}=await wc(e,t,{log:e.log}),s=this.connectionEncryption.get(o);if(s==null)throw new Error(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using",o),{...await s.secureInbound(this.components.peerId,n),protocol:o}}catch(n){throw e.log.error("encrypting inbound connection failed",n),new m(n.message,Y.ERR_ENCRYPTION_FAILED)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncryption.keys());e.log("selecting outbound crypto protocol",n);try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:s}=await yc(e,n,{log:e.log,yieldBytes:!0}),i=this.connectionEncryption.get(s);if(i==null)throw new Error(`no crypto module found for ${s}`);return e.log("encrypting outbound connection to %p using %s",t,i),{...await i.secureOutbound(this.components.peerId,o,t),protocol:s}}catch(o){throw e.log.error("encrypting outbound connection to %p failed",t,o),new m(o.message,Y.ERR_ENCRYPTION_FAILED)}}async _multiplexOutbound(e,t){let n=Array.from(t.keys());e.log("outbound selecting muxer %s",n);try{e.log.trace("selecting stream muxer from %s",n);let{stream:o,protocol:s}=await yc(e,n,{log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing outbound connection",o),new m(String(o),Y.ERR_MUXER_UNAVAILABLE)}}async _multiplexInbound(e,t){let n=Array.from(t.keys());e.log("inbound handling muxers %s",n);try{let{stream:o,protocol:s}=await wc(e,n,{log:e.log}),i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing inbound connection",o),new m(String(o),Y.ERR_MUXER_UNAVAILABLE)}}};var N3=class extends me{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new me,n=t.dispatchEvent.bind(t);t.dispatchEvent=a=>{let c=n(a),l=this.dispatchEvent(new Pt(a.type,{detail:a.detail}));return c||l},K(1/0,t),this.peerId=e.peerId,this.logger=e.logger??So(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=lw({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:Ud,version:Md},logger:this.logger,events:t,datastore:e.datastore??new _s,connectionGater:dw(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",new Wd(o,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),o.events.addEventListener("peer:update",a=>{if(a.detail.previous==null){let c={id:a.detail.peer.id,multiaddrs:a.detail.peer.addresses.map(l=>l.multiaddr)};o.events.safeDispatchEvent("peer:discovery",{detail:c})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(o)),this.components.upgrader=new ff(this.components,{connectionEncryption:(e.connectionEncryption??[]).map((a,c)=>this.configureComponent(`connection-encryption-${c}`,a(this.components))),muxers:(e.streamMuxers??[]).map((a,c)=>this.configureComponent(`stream-muxers-${c}`,a(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout}),this.configureComponent("transportManager",new df(this.components,e.transportManager)),this.configureComponent("connectionManager",new of(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new sf(this.components,e.connectionMonitor)),this.configureComponent("registrar",new uf(this.components)),this.configureComponent("addressManager",new zd(this.components,e.addresses));let s=(e.peerRouters??[]).map((a,c)=>this.configureComponent(`peer-router-${c}`,a(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new cf(this.components,{routers:s}));let i=(e.contentRouters??[]).map((a,c)=>this.configureComponent(`content-router-${c}`,a(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new af(this.components,{routers:i})),this.configureComponent("randomWalk",new lf(this.components)),(e.peerDiscovery??[]).forEach((a,c)=>{this.configureComponent(`peer-discovery-${c}`,a(this.components)).addEventListener("peer",d=>{this.#e(d)})}),e.transports?.forEach((a,c)=>{this.components.transportManager.add(this.configureComponent(`transport-${c}`,a(this.components)))}),e.services!=null)for(let a of Object.keys(e.services)){let c=e.services[a],l=c(this.components);if(l==null){this.log.error("service factory %s returned null or undefined instance",a);continue}this.services[a]=l,this.configureComponent(a,l),l[cn]!=null&&(this.log("registering service %s for content routing",a),i.push(l[cn])),l[ln]!=null&&(this.log("registering service %s for peer routing",a),s.push(l[ln])),l[qo]!=null&&(this.log("registering service %s for peer discovery",a),l[qo].addEventListener?.("peer",d=>{this.#e(d)}))}uw(o)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new Ct;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new m("no protocols were provided to open a stream",Y.ERR_INVALID_PROTOCOLS_FOR_STREAM);if(t=Array.isArray(t)?t:[t],t.length===0)throw new m("no protocols were provided to open a stream",Y.ERR_INVALID_PROTOCOLS_FOR_STREAM);return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){ko(e)&&(e=pe(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}let n=ve([L("/pk/"),e.multihash.digest]),o=await this.contentRouting.get(n,t);return Qr(o),await this.peerStore.patch(e,{publicKey:o}),o}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error(new Error(Y.ERR_DISCOVERED_SELF));return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function xw(r={}){let e=r.peerId??=await nw();if(e.privateKey==null)throw new m("peer id was missing private key","ERR_MISSING_PRIVATE_KEY");return r.privateKey??=await Ir(e.privateKey),new N3(await fw(r))}async function _w(r={}){let e=await xw(r);return r.start!==!1&&await e.start(),e}async function vw(r){let e=r.libp2p?.peerId,t=r.logger??So(),n=new De("/pkcs8/self"),o;e==null&&r.datastore!=null&&(o=Ed(r.keychain)({datastore:r.datastore,logger:t}),await r.datastore.has(n)&&(r.libp2p=r.libp2p??{},r.libp2p.peerId=await o.exportPeerId("self")));let s=Fd(r);s.datastore=s.datastore??r.datastore,r=r??{};let i=await _w({...s,...r.libp2p,start:!1});return e==null&&o!=null&&!await r.datastore.has(n)&&await o.importPeer("self",i.peerId),i}async function WT(r={}){let e=r.datastore??new _s,t=r.blockstore??new Fa,n;zT(r.libp2p)?n=r.libp2p:n=await vw({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new u1({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[m2(),G0()],routers:[D2(n),C2()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function zT(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return Mw(YT);})();
52
52
  /*! Bundled license information:
53
53
 
54
54
  pvtsutils/build/index.js: