helia 4.2.6-9de08ef → 4.2.6-c04dbf5

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 Vc=Object.defineProperty;var zw=Object.getOwnPropertyDescriptor;var Gw=Object.getOwnPropertyNames;var Yw=Object.getPrototypeOf,Qw=Object.prototype.hasOwnProperty;var st=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),yt=(r,e)=>{for(var t in e)Vc(r,t,{get:e[t],enumerable:!0})},ym=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Gw(e))!Qw.call(r,o)&&o!==t&&Vc(r,o,{get:()=>e[o],enumerable:!(n=zw(e,o))||n.enumerable});return r};var kt=(r,e,t)=>(t=r!=null?Ww(Yw(r)):{},ym(e||!r||!r.__esModule?Vc(t,"default",{value:r,enumerable:!0}):t,r)),Xw=r=>ym(Vc({},"__esModule",{value:!0}),r);var I4=st(Qs=>{"use strict";var zE="[object ArrayBuffer]",Un=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===zE}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}},N0="string",GE=/^[0-9a-f]+$/i,YE=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,QE=/^[a-zA-Z0-9-_]+$/,Rl=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=Un.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=Un.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}},Ll=class r{static isHex(e){return typeof e===N0&&GE.test(e)}static isBase64(e){return typeof e===N0&&YE.test(e)}static isBase64Url(e){return typeof e===N0&&QE.test(e)}static ToString(e,t="utf8"){let n=Un.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=Un.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 Rl.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 Rl.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=Un.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Un.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,"")||""}};Ll.DEFAULT_UTF8_ENCODING="utf8";function XE(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 jE(...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 ZE(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}Qs.BufferSourceConverter=Un;Qs.Convert=Ll;Qs.assign=XE;Qs.combine=jE;Qs.isEqual=ZE});var q6=st((Ua,ku)=>{(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 m=[0,0,0,0];return m[3]+=h[3]+p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=h[2]+p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=h[1]+p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=h[0]+p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[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 m=[0,0,0,0];return m[3]+=h[3]*p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=h[2]*p[3],m[1]+=m[2]>>>16,m[2]&=65535,m[2]+=h[3]*p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=h[1]*p[3],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=h[2]*p[2],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=h[3]*p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=h[0]*p[3]+h[1]*p[2]+h[2]*p[1]+h[3]*p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[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 m=h.length%4,g=h.length-m,y=p,b=0,w=3432918353,x=461845907,k=0;k<g;k=k+4)b=h[k]|h[k+1]<<8|h[k+2]<<16|h[k+3]<<24,b=o(b,w),b=s(b,15),b=o(b,x),y^=b,y=s(y,13),y=o(y,5)+3864292196;switch(b=0,m){case 3:b^=h[k+2]<<16;case 2:b^=h[k+1]<<8;case 1:b^=h[k],b=o(b,w),b=s(b,15),b=o(b,x),y^=b}return y^=h.length,y=i(y),y>>>0},t.x86.hash128=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var m=h.length%16,g=h.length-m,y=p,b=p,w=p,x=p,k=0,T=0,E=0,S=0,_=597399067,F=2869860233,N=951274213,M=2716044179,B=0;B<g;B=B+16)k=h[B]|h[B+1]<<8|h[B+2]<<16|h[B+3]<<24,T=h[B+4]|h[B+5]<<8|h[B+6]<<16|h[B+7]<<24,E=h[B+8]|h[B+9]<<8|h[B+10]<<16|h[B+11]<<24,S=h[B+12]|h[B+13]<<8|h[B+14]<<16|h[B+15]<<24,k=o(k,_),k=s(k,15),k=o(k,F),y^=k,y=s(y,19),y+=b,y=o(y,5)+1444728091,T=o(T,F),T=s(T,16),T=o(T,N),b^=T,b=s(b,17),b+=w,b=o(b,5)+197830471,E=o(E,N),E=s(E,17),E=o(E,M),w^=E,w=s(w,15),w+=x,w=o(w,5)+2530024501,S=o(S,M),S=s(S,18),S=o(S,_),x^=S,x=s(x,13),x+=y,x=o(x,5)+850148119;switch(k=0,T=0,E=0,S=0,m){case 15:S^=h[B+14]<<16;case 14:S^=h[B+13]<<8;case 13:S^=h[B+12],S=o(S,M),S=s(S,18),S=o(S,_),x^=S;case 12:E^=h[B+11]<<24;case 11:E^=h[B+10]<<16;case 10:E^=h[B+9]<<8;case 9:E^=h[B+8],E=o(E,N),E=s(E,17),E=o(E,M),w^=E;case 8:T^=h[B+7]<<24;case 7:T^=h[B+6]<<16;case 6:T^=h[B+5]<<8;case 5:T^=h[B+4],T=o(T,F),T=s(T,16),T=o(T,N),b^=T;case 4:k^=h[B+3]<<24;case 3:k^=h[B+2]<<16;case 2:k^=h[B+1]<<8;case 1:k^=h[B],k=o(k,_),k=s(k,15),k=o(k,F),y^=k}return y^=h.length,b^=h.length,w^=h.length,x^=h.length,y+=b,y+=w,y+=x,b+=y,w+=y,x+=y,y=i(y),b=i(b),w=i(w),x=i(x),y+=b,y+=w,y+=x,b+=y,w+=y,x+=y,("00000000"+(y>>>0).toString(16)).slice(-8)+("00000000"+(b>>>0).toString(16)).slice(-8)+("00000000"+(w>>>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 m=h.length%16,g=h.length-m,y=[0,p],b=[0,p],w=[0,0],x=[0,0],k=[2277735313,289559509],T=[1291169091,658871167],E=0;E<g;E=E+16)w=[h[E+4]|h[E+5]<<8|h[E+6]<<16|h[E+7]<<24,h[E]|h[E+1]<<8|h[E+2]<<16|h[E+3]<<24],x=[h[E+12]|h[E+13]<<8|h[E+14]<<16|h[E+15]<<24,h[E+8]|h[E+9]<<8|h[E+10]<<16|h[E+11]<<24],w=c(w,k),w=l(w,31),w=c(w,T),y=u(y,w),y=l(y,27),y=a(y,b),y=a(c(y,[0,5]),[0,1390208809]),x=c(x,T),x=l(x,33),x=c(x,k),b=u(b,x),b=l(b,31),b=a(b,y),b=a(c(b,[0,5]),[0,944331445]);switch(w=[0,0],x=[0,0],m){case 15:x=u(x,d([0,h[E+14]],48));case 14:x=u(x,d([0,h[E+13]],40));case 13:x=u(x,d([0,h[E+12]],32));case 12:x=u(x,d([0,h[E+11]],24));case 11:x=u(x,d([0,h[E+10]],16));case 10:x=u(x,d([0,h[E+9]],8));case 9:x=u(x,[0,h[E+8]]),x=c(x,T),x=l(x,33),x=c(x,k),b=u(b,x);case 8:w=u(w,d([0,h[E+7]],56));case 7:w=u(w,d([0,h[E+6]],48));case 6:w=u(w,d([0,h[E+5]],40));case 5:w=u(w,d([0,h[E+4]],32));case 4:w=u(w,d([0,h[E+3]],24));case 3:w=u(w,d([0,h[E+2]],16));case 2:w=u(w,d([0,h[E+1]],8));case 1:w=u(w,[0,h[E]]),w=c(w,k),w=l(w,31),w=c(w,T),y=u(y,w)}return y=u(y,[0,h.length]),b=u(b,[0,h.length]),y=a(y,b),b=a(b,y),y=f(y),b=f(b),y=a(y,b),b=a(b,y),("00000000"+(y[0]>>>0).toString(16)).slice(-8)+("00000000"+(y[1]>>>0).toString(16)).slice(-8)+("00000000"+(b[0]>>>0).toString(16)).slice(-8)+("00000000"+(b[1]>>>0).toString(16)).slice(-8)},typeof Ua<"u"?(typeof ku<"u"&&ku.exports&&(Ua=ku.exports=t),Ua.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)})(Ua)});var Tu=st((AB,W6)=>{W6.exports=q6()});var Z6=st((KO,s2)=>{"use strict";var zv=Object.prototype.hasOwnProperty,Ut="~";function Ha(){}Object.create&&(Ha.prototype=Object.create(null),new Ha().__proto__||(Ut=!1));function Gv(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function j6(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new Gv(t,n||r,o),i=Ut?Ut+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 Mu(r,e){--r._eventsCount===0?r._events=new Ha:delete r._events[e]}function Dt(){this._events=new Ha,this._eventsCount=0}Dt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)zv.call(t,n)&&e.push(Ut?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Dt.prototype.listeners=function(e){var t=Ut?Ut+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=Ut?Ut+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=Ut?Ut+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 j6(this,e,t,n,!1)};Dt.prototype.once=function(e,t,n){return j6(this,e,t,n,!0)};Dt.prototype.removeListener=function(e,t,n,o){var s=Ut?Ut+e:e;if(!this._events[s])return this;if(!t)return Mu(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&Mu(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:Mu(this,s)}return this};Dt.prototype.removeAllListeners=function(e){var t;return e?(t=Ut?Ut+e:e,this._events[t]&&Mu(this,t)):(this._events=new Ha,this._eventsCount=0),this};Dt.prototype.off=Dt.prototype.removeListener;Dt.prototype.addListener=Dt.prototype.on;Dt.prefixed=Ut;Dt.EventEmitter=Dt;typeof s2<"u"&&(s2.exports=Dt)});var d2=st((dM,r8)=>{r8.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 $5=st(Ja=>{(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(m){throw u=m,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(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,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}(),Ja.ip2long=i,Ja.long2ip=a,Ja.Netmask=r}).call(Ja)});var O1=st((IH,dp)=>{var AH=function(){typeof dp<"u"&&(dp.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(S){var _=S-S%1;return _==0&&(S<0||S===0&&1/S!=1/0)?-0:_},d=m.prototype,u=(m.fromDate=function(S){return new m(+S)},m.fromInt64BE=x(0,1,2,3,0,4),m.fromInt64LE=x(3,2,1,0,4,0),m.fromString=function(N){var _,F=new m,N=(N+="").replace(/^\s*[+\-]?\d+/,function(B){var B=+B,L=1970+(B-1970)%400;return F.year=B-L,L}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(M,B,L){return B<0&&(L*=-1),_=6e4*(60*+B+ +L),""}).replace(/\.\d+$/,function(M){return F.nano=+(M+c).substr(1,9),""}).split(/\D+/);if(1<N.length?N[1]--:N[1]=0,F.time=_=Date.UTC.apply(Date,N)-(_||0),isNaN(_))throw new TypeError("Invalid Date");return g(F)},m.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=g(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},d.getTimeT=function(){var _=g(this),S=Math.floor(_.time/1e3),_=_.year;return _&&(S+=_*t*r/e),S},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return y(g(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(S){var _=this,F=_.toDate(),N={H:function(){return T(F.getUTCHours())},L:function(){return E(F.getUTCMilliseconds(),3)},M:function(){return T(F.getUTCMinutes())},N:function(){return E(_.getNano(),9)},S:function(){return T(F.getUTCSeconds())},Y:function(){var M=_.getYear();return 999999<M?"+"+M:9999<M?"+"+E(M,6):0<=M?E(M,4):-999999<=M?"-"+E(-M,6):M},a:function(){return h[F.getUTCDay()]},b:function(){return f[F.getUTCMonth()]},d:function(){return T(F.getUTCDate())},e:function(){return function(M){return(9<M?"":" ")+(0|M)}(F.getUTCDate())},m:function(){return T(F.getUTCMonth()+1)}};return function M(B){return B.replace(/%./g,function(L){var I=L[1],D=p[I],I=N[I];return D?M(D):I?I():L})}(S||u)},d.writeInt64BE=w(0,1,2,3,0,4),d.writeInt64LE=w(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 m;function m(S,_,F){var N=this;if(!(N instanceof m))return new m(S,_,F);N.time=+S||0,N.nano=+_||0,N.year=+F||0,g(N)}function g(S){var _,F,N,M=S.year,B=S.time,L=S.nano,D=((L<0||a<=L)&&(L-=(F=Math.floor(L/a))*a,B+=F,F=1),M%e);return(B<-s||s<B||D)&&((_=l(B/o))&&(M+=_*e,B-=_*o),(N=y(B)).setUTCFullYear(D+N.getUTCFullYear()),N=(B=+N)+(_=l((M-=D)/e))*o,_&&-s<=N&&N<=s&&(M-=_*e,B=N),F=1),F&&(S.year=M,S.time=B,S.nano=L),S}function y(S){var _=new Date(0);return _.setTime(S),_}function b(M,N){M=+M||0;var F=l((N=(N|0)*i)/n)+l(M/n),N=N%n+M%n,M=l(N/n);return M&&(F+=M,N-=M*n),new m(1e3*N,0,F*e)}function w(S,_,F,N,M,B){return function(D,I){var R=g(this);D=D||new Array(8),k(D,I|=0);var P=Math.floor(R.time/1e3),R=R.year*(t*r/e),A=l(R/i)+l(P/i),R=R%i+P%i,P=Math.floor(R/i);return P&&(A+=P,R-=P*i),L(D,I+M,A),L(D,I+B,R),D};function L(D,I,A){D[I+S]=A>>24&255,D[I+_]=A>>16&255,D[I+F]=A>>8&255,D[I+N]=255&A}}function x(S,_,F,N,M,B){return function(D,I){k(D,I|=0);var A=L(D,I+M);return b(L(D,I+B),A)};function L(D,I){return 16777216*D[I+S]+(D[I+_]<<16|D[I+F]<<8|D[I+N])}}function k(S,_){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<_+8)throw new RangeError("Out of range")}function T(S){return(9<S?"":"0")+(0|S)}function E(S,_){return(c+(0|S)).substr(-_)}}()});var t9=st((rZ,e9)=>{function a_(){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)}e9.exports=a_});var O9=st((Pre,B9)=>{"use strict";B9.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var K9=st(($9,V9)=>{"use strict";var cf=O9(),{hasOwnProperty:U9}=Object.prototype,{propertyIsEnumerable:V_}=Object,Fi=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),K_=$9,M9={concatArrays:!1,ignoreUndefined:!1},lf=r=>{let e=[];for(let t in r)U9.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)V_.call(r,n)&&e.push(n)}return e};function $i(r){return Array.isArray(r)?H_(r):cf(r)?q_(r):r}function H_(r){let e=r.slice(0,0);return lf(r).forEach(t=>{Fi(e,t,$i(r[t]))}),e}function q_(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return lf(r).forEach(t=>{Fi(e,t,$i(r[t]))}),e}var F9=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Fi(r,o,x3(r[o],e[o],n)):Fi(r,o,$i(e[o])))}),r),W_=(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++)U9.call(s,a)&&(i.push(String(a)),s===r?Fi(n,o++,s[a]):Fi(n,o++,$i(s[a])));n=F9(n,s,lf(s).filter(a=>!i.includes(a)),t)}),n};function x3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?W_(r,e,t):!cf(e)||!cf(r)?$i(e):F9(r,e,lf(e),t)}V9.exports=function(...r){let e=x3($i(M9),this!==K_&&this||{},M9),t={_:{}};for(let n of r)if(n!==void 0){if(!cf(n))throw new TypeError("`"+n+"` is not an Option Object");t=x3(t,{_:n},e)}return t._}});var W9=st((Lre,q9)=>{"use strict";function z_(r){return r>=55296&&r<=56319}function G_(r){return r>=56320&&r<=57343}q9.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],z_(i)&&G_(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 G9=st((Dre,z9)=>{"use strict";function Y_(r){return r>=55296&&r<=56319}function Q_(r){return r>=56320&&r<=57343}z9.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),Q_(o)?s!=null&&Y_(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=st((Nre,Y9)=>{"use strict";var X_=W9(),j_=G9();Y9.exports=X_.bind(null,j_)});var Z9=st((Bre,j9)=>{"use strict";var Z_=Q9(),J_=/[\/\?<>\\:\*\|"]/g,ek=/[\x00-\x1f\x80-\x9f]/g,tk=/^\.+$/,rk=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,nk=/[\. ]+$/;function X9(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(J_,e).replace(ek,e).replace(tk,e).replace(rk,e).replace(nk,e);return Z_(t,255)}j9.exports=function(r,e){var t=e&&e.replacement||"",n=X9(r,t);return t===""?n:X9(n,"")}});var Uy=st(Df=>{"use strict";Object.defineProperty(Df,"__esModule",{value:!0});var U3=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}))}}},Lf=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new U3;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)}};Df.EventIterator=Lf;Df.default=Lf});var Fy=st(Lc=>{"use strict";Object.defineProperty(Lc,"__esModule",{value:!0});var F3=Uy();Lc.EventIterator=F3.EventIterator;function tT(r,e,t){return new F3.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}Lc.subscribe=tT;Lc.default=F3.EventIterator});var Aw=st((gle,Sw)=>{function Ur(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}Sw.exports=Ur;Ur.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};Ur.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};Ur.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};Ur.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Ur.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Ur.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Ur.prototype.start=Ur.prototype.try;Ur.prototype.errors=function(){return this._errors};Ur.prototype.attempts=function(){return this._attempts};Ur.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],s=o.message,i=(r[s]||0)+1;r[s]=i,i>=t&&(e=o,t=i)}return e}});var Iw=st(ks=>{var ST=Aw();ks.operation=function(r){var e=ks.timeouts(r);return new ST(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};ks.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(s,i){return s-i}),n};ks.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};ks.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var s=t[o],i=r[s];r[s]=function(c){var l=ks.operation(e),d=Array.prototype.slice.call(arguments,1),u=d.pop();d.push(function(f){l.retry(f)||(f&&(arguments[0]=l.mainError()),u.apply(this,arguments))}),l.attempt(function(){c.apply(r,d)})}.bind(r,i),r[s].options=e}}});var kw=st((wle,_w)=>{_w.exports=Iw()});var qT={};yt(qT,{DEFAULT_SESSION_MAX_PROVIDERS:()=>v2,DEFAULT_SESSION_MIN_PROVIDERS:()=>E2,InsufficientProvidersError:()=>ja,NoRoutersAvailableError:()=>Io,createHelia:()=>KT,libp2pDefaults:()=>Mf});var wm=Symbol.for("@libp2p/connection");var cn=Symbol.for("@libp2p/content-routing");var Vo=Symbol.for("@libp2p/peer-discovery");var Kc=Symbol.for("@libp2p/peer-id");function Hc(r){return!!r?.[Kc]}var ln=Symbol.for("@libp2p/peer-routing");var gh="keep-alive";var un=Symbol.for("@libp2p/transport");var eo;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(eo||(eo={}));var dt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},qc=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},Wc=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},C=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},Tn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},Ji=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var zc=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},Gc=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},Cs=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},dn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},Yc=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},Ko=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Be=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},Qc=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},to=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Xc=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},ro=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Ho=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},ue=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},ea=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},ar=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Fr=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Cn=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},jc=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},Ps=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Zc=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},no=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},$r=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var V=(r,...e)=>{try{[...e]}catch{}};var pe=class extends EventTarget{#e=new Map;constructor(){super(),V(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 CustomEvent(e,t))}};function Jc(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function Ht(...r){let e=[];for(let t of r)Jc(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 qt(...r){let e=[];for(let t of r)Jc(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 Se=Symbol.for("@libp2p/service-capabilities"),Vr=Symbol.for("@libp2p/service-dependencies");function xe(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 Z(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var el=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}},Rs=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new el(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 el(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 yh=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Tt(r={}){return jw(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 jw(r,e){e=e??{};let t=e.onEnd,n=new Rs,o,s,i,a=Z(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((g,y)=>{s=b=>{s=null,n.push(b);try{g(r(n))}catch(w){y(w)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=Z()})}},l=g=>s!=null?s(g):(n.push(g),o),d=g=>(n=new Rs,s!=null?s({error:g}):(n.push({error:g}),o)),u=g=>{if(i)return o;if(e?.objectMode!==!0&&g?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:g})},f=g=>i?o:(i=!0,g!=null?d(g):l({done:!0})),h=()=>(n=new Rs,f(),{done:!0}),p=g=>(f(g),{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 g=>{let y=g?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let b,w;y!=null&&(b=new Promise((x,k)=>{w=()=>{k(new yh)},y.addEventListener("abort",w)}));try{await Promise.race([a.promise,b])}finally{w!=null&&y!=null&&y?.removeEventListener("abort",w)}}},t==null)return o;let m=o;return o={[Symbol.asyncIterator](){return this},next(){return m.next()},throw(g){return m.throw(g),t!=null&&(t(g),t=void 0),{done:!0}},return(){return m.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(g){return m.end(g),t!=null&&(t(g),t=void 0),o},get readableLength(){return m.readableLength},onEmpty:g=>m.onEmpty(g)},o}var wh=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 cr(r,e,t,n){let o=new wh(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 tl=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 ke(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new tl(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new tl(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 rl=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Z(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new dt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function Zw(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var nl=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=Zw(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,V(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 dt),this.cleanup())}async join(e={}){let t=new rl(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 lr=class extends pe{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 nl(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 dt)}),this.clear()}async onEmpty(e){this.size!==0&&await cr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await cr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await cr(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=Tt({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 dt("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 Wt=class extends lr{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function Jw(r){return r[Symbol.asyncIterator]!=null}function eb(r){if(Jw(r))return(async()=>{for await(let e of r);})();for(let e of r);}var zt=eb;function ie(r=0){return new Uint8Array(r)}function We(r=0){return new Uint8Array(r)}var tb=Math.pow(2,7),rb=Math.pow(2,14),nb=Math.pow(2,21),bh=Math.pow(2,28),xh=Math.pow(2,35),Eh=Math.pow(2,42),vh=Math.pow(2,49),_e=128,Ct=127;function he(r){if(r<tb)return 1;if(r<rb)return 2;if(r<nb)return 3;if(r<bh)return 4;if(r<xh)return 5;if(r<Eh)return 6;if(r<vh)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Sh(r,e,t=0){switch(he(r)){case 8:e[t++]=r&255|_e,r/=128;case 7:e[t++]=r&255|_e,r/=128;case 6:e[t++]=r&255|_e,r/=128;case 5:e[t++]=r&255|_e,r/=128;case 4:e[t++]=r&255|_e,r>>>=7;case 3:e[t++]=r&255|_e,r>>>=7;case 2:e[t++]=r&255|_e,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function ob(r,e,t=0){switch(he(r)){case 8:e.set(t++,r&255|_e),r/=128;case 7:e.set(t++,r&255|_e),r/=128;case 6:e.set(t++,r&255|_e),r/=128;case 5:e.set(t++,r&255|_e),r/=128;case 4:e.set(t++,r&255|_e),r>>>=7;case 3:e.set(t++,r&255|_e),r>>>=7;case 2:e.set(t++,r&255|_e),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function Ah(r,e){let t=r[e],n=0;if(n+=t&Ct,t<_e||(t=r[e+1],n+=(t&Ct)<<7,t<_e)||(t=r[e+2],n+=(t&Ct)<<14,t<_e)||(t=r[e+3],n+=(t&Ct)<<21,t<_e)||(t=r[e+4],n+=(t&Ct)*bh,t<_e)||(t=r[e+5],n+=(t&Ct)*xh,t<_e)||(t=r[e+6],n+=(t&Ct)*Eh,t<_e)||(t=r[e+7],n+=(t&Ct)*vh,t<_e))return n;throw new RangeError("Could not decode varint")}function sb(r,e){let t=r.get(e),n=0;if(n+=t&Ct,t<_e||(t=r.get(e+1),n+=(t&Ct)<<7,t<_e)||(t=r.get(e+2),n+=(t&Ct)<<14,t<_e)||(t=r.get(e+3),n+=(t&Ct)<<21,t<_e)||(t=r.get(e+4),n+=(t&Ct)*bh,t<_e)||(t=r.get(e+5),n+=(t&Ct)*xh,t<_e)||(t=r.get(e+6),n+=(t&Ct)*Eh,t<_e)||(t=r.get(e+7),n+=(t&Ct)*vh,t<_e))return n;throw new RangeError("Could not decode varint")}function $e(r,e,t=0){return e==null&&(e=We(he(r))),e instanceof Uint8Array?Sh(r,e,t):ob(r,e,t)}function Bt(r,e=0){return r instanceof Uint8Array?Ah(r,e):sb(r,e)}function Pe(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=We(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function ee(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 xm=Symbol.for("@achingbrain/uint8arraylist");function bm(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 ol(r){return!!r?.[xm]}var ce=class r{bufs;length;[xm]=!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(ol(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(ol(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=bm(this.bufs,e);return t.buf[t.index]}set(e,t){let n=bm(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(ol(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 Pe(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Pe(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(!ol(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=We(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=ie(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=ie(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=ie(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=We(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=ie(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=ie(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=ie(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=ie(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=ie(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(!ee(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 sl(r){return r[Symbol.asyncIterator]!=null}var il=r=>{let e=he(r),t=We(e);return $e(r,t),il.bytes=e,t};il.bytes=0;function Gt(r,e){e=e??{};let t=e.lengthEncoder??il;function*n(o){let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return sl(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}Gt.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??il;return new ce(t(r.byteLength),r)};var al=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},cl=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},ll=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},ta=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var ab=8,cb=1024*1024*4,qo;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(qo||(qo={}));var Ih=r=>{let e=Bt(r);return Ih.bytes=he(e),e};Ih.bytes=0;function Yt(r,e){let t=new ce,n=qo.LENGTH,o=-1,s=e?.lengthDecoder??Ih,i=e?.maxLengthLength??ab,a=e?.maxDataLength??cb;function*c(){for(;t.byteLength>0;){if(n===qo.LENGTH)try{if(o=s(t),o<0)throw new al("Invalid message length");if(o>a)throw new cl("Message length too long");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=qo.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw new ll("Message length length too long");break}throw l}if(n===qo.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=qo.LENGTH}}}return sl(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ta("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ta("Unexpected end of input")}()}Yt.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 Yt(n,{...e??{},onLength:s=>{t=s}})};function lb(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 Ls=lb;function ub(r){return r[Symbol.asyncIterator]!=null}function db(r,e){let t=0;if(ub(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Ls(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 Qt=db;function fb(r){return r[Symbol.asyncIterator]!=null}function hb(...r){let e=[];for(let t of r)fb(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=Tt({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=hb;function Ve(r,...e){if(r==null)throw new Error("Empty pipeline");if(_h(r)){let n=r;r=()=>n.source}else if(vm(r)||Em(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&_h(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++)_h(t[n])&&(t[n]=mb(t[n]));return pb(...t)}var pb=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},Em=r=>r?.[Symbol.asyncIterator]!=null,vm=r=>r?.[Symbol.iterator]!=null,_h=r=>r==null?!1:r.sink!=null&&r.source!=null,mb=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Tt({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(Em(s))o=async function*(){yield*s,n.end()};else if(vm(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 gb(r){return r[Symbol.asyncIterator]!=null}function yb(r,e){return gb(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 oo=yb;var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var ra="/ipfs/bitswap/1.2.0";var kh=new Float32Array([-0]),so=new Uint8Array(kh.buffer);function Sm(r,e,t){kh[0]=r,e[t]=so[0],e[t+1]=so[1],e[t+2]=so[2],e[t+3]=so[3]}function Am(r,e){return so[0]=r[e],so[1]=r[e+1],so[2]=r[e+2],so[3]=r[e+3],kh[0]}var Th=new Float64Array([-0]),Pt=new Uint8Array(Th.buffer);function Im(r,e,t){Th[0]=r,e[t]=Pt[0],e[t+1]=Pt[1],e[t+2]=Pt[2],e[t+3]=Pt[3],e[t+4]=Pt[4],e[t+5]=Pt[5],e[t+6]=Pt[6],e[t+7]=Pt[7]}function _m(r,e){return Pt[0]=r[e],Pt[1]=r[e+1],Pt[2]=r[e+2],Pt[3]=r[e+3],Pt[4]=r[e+4],Pt[5]=r[e+5],Pt[6]=r[e+6],Pt[7]=r[e+7],Th[0]}var wb=BigInt(Number.MAX_SAFE_INTEGER),bb=BigInt(Number.MIN_SAFE_INTEGER),ur=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<wb&&e>bb)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>km&&(o=0n,++n>km&&(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 ur(0,0);Wo.toBigInt=function(){return 0n};Wo.zzEncode=Wo.zzDecode=function(){return this};Wo.length=function(){return 1};var km=4294967296n;function Tm(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 Cm(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 Ch(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 Kr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function dl(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var Ph=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,Kr(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 Kr(this,4);return dl(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Kr(this,4);return dl(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Kr(this,4);let e=Am(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Kr(this,4);let e=_m(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 Kr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return Cm(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Kr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Kr(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 ur(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 Kr(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 Kr(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 Kr(this,8);let e=dl(this.buf,this.pos+=4),t=dl(this.buf,this.pos+=4);return new ur(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=Ah(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 Rh(r){return new Ph(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=Rh(r);return e.decode(n,void 0,t)}var Oh={};yt(Oh,{base10:()=>Ib});var UP=new Uint8Array(0);function Rm(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 Rn(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 Lm(r){return new TextEncoder().encode(r)}function Dm(r){return new TextDecoder().decode(r)}function xb(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,g=0,y=0,b=p.length;y!==b&&p[y]===0;)y++,m++;for(var w=(b-y)*d+1>>>0,x=new Uint8Array(w);y!==b;){for(var k=p[y],T=0,E=w-1;(k!==0||T<g)&&E!==-1;E--,T++)k+=256*x[E]>>>0,x[E]=k%a>>>0,k=k/a>>>0;if(k!==0)throw new Error("Non-zero carry");g=T,y++}for(var S=w-g;S!==w&&x[S]===0;)S++;for(var _=c.repeat(m);S<w;++S)_+=r.charAt(x[S]);return _}function f(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 g=0,y=0;p[m]===c;)g++,m++;for(var b=(p.length-m)*l+1>>>0,w=new Uint8Array(b);p[m];){var x=t[p.charCodeAt(m)];if(x===255)return;for(var k=0,T=b-1;(x!==0||k<y)&&T!==-1;T--,k++)x+=a*w[T]>>>0,w[T]=x%256>>>0,x=x/256>>>0;if(x!==0)throw new Error("Non-zero carry");y=k,m++}if(p[m]!==" "){for(var E=b-y;E!==b&&w[E]===0;)E++;for(var S=new Uint8Array(g+(b-E)),_=g;E!==b;)S[_++]=w[E++];return S}}}function h(p){var m=f(p);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var Eb=xb,vb=Eb,Bm=vb;var Lh=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")}},Dh=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,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 Om(this,e)}},Nh=class{decoders;constructor(e){this.decoders=e}or(e){return Om(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 Om(r,e){return new Nh({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Bh=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 Lh(e,t,n),this.decoder=new Dh(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Ds({name:r,prefix:e,encode:t,decode:n}){return new Bh(r,e,t,n)}function io({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=Bm(t,r);return Ds({prefix:e,name:r,encode:n,decode:s=>Rn(o(s))})}function Sb(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 Ab(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 Ds({prefix:e,name:r,encode(o){return Ab(o,n,t)},decode(o){return Sb(o,n,t,r)}})}var Ib=io({prefix:"9",name:"base10",alphabet:"0123456789"});var Mh={};yt(Mh,{base16:()=>_b,base16upper:()=>kb});var _b=Qe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),kb=Qe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Uh={};yt(Uh,{base2:()=>Tb});var Tb=Qe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Fh={};yt(Fh,{base256emoji:()=>Db});var Mm=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}"),Cb=Mm.reduce((r,e,t)=>(r[t]=e,r),[]),Pb=Mm.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function Rb(r){return r.reduce((e,t)=>(e+=Cb[t],e),"")}function Lb(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=Pb[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var Db=Ds({prefix:"\u{1F680}",name:"base256emoji",encode:Rb,decode:Lb});var $h={};yt($h,{base32:()=>it,base32hex:()=>Mb,base32hexpad:()=>Fb,base32hexpadupper:()=>$b,base32hexupper:()=>Ub,base32pad:()=>Bb,base32padupper:()=>Ob,base32upper:()=>Nb,base32z:()=>Vb});var it=Qe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Nb=Qe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Bb=Qe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Ob=Qe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Mb=Qe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Ub=Qe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Fb=Qe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),$b=Qe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Vb=Qe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Vh={};yt(Vh,{base36:()=>fn,base36upper:()=>Kb});var fn=io({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Kb=io({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Kh={};yt(Kh,{base58btc:()=>Ee,base58flickr:()=>Hb});var Ee=io({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Hb=io({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var qh={};yt(qh,{base64:()=>rt,base64pad:()=>qb,base64url:()=>Hh,base64urlpad:()=>Wb});var rt=Qe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),qb=Qe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Hh=Qe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Wb=Qe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Wh={};yt(Wh,{base8:()=>zb});var zb=Qe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var zh={};yt(zh,{identity:()=>Gb});var Gb=Ds({prefix:"\0",name:"identity",encode:r=>Dm(r),decode:r=>Lm(r)});var eR=new TextEncoder,tR=new TextDecoder;var Um=512;var fl=85;var Xh={};yt(Xh,{identity:()=>dr});var ze={};yt(ze,{Digest:()=>zo,create:()=>Xt,decode:()=>Te,equals:()=>Qh,hasCode:()=>fx});var Yb=Km,$m=128,Qb=127,Xb=~Qb,jb=Math.pow(2,31);function Km(r,e,t){e=e||[],t=t||0;for(var n=t;r>=jb;)e[t++]=r&255|$m,r/=128;for(;r&Xb;)e[t++]=r&255|$m,r>>>=7;return e[t]=r|0,Km.bytes=t-n+1,e}var Zb=Yh,Jb=128,Vm=127;function Yh(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Yh.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&Vm)<<o:(i&Vm)*Math.pow(2,o),o+=7}while(i>=Jb);return Yh.bytes=s-n,t}var ex=Math.pow(2,7),tx=Math.pow(2,14),rx=Math.pow(2,21),nx=Math.pow(2,28),ox=Math.pow(2,35),sx=Math.pow(2,42),ix=Math.pow(2,49),ax=Math.pow(2,56),cx=Math.pow(2,63),lx=function(r){return r<ex?1:r<tx?2:r<rx?3:r<nx?4:r<ox?5:r<sx?6:r<ix?7:r<ax?8:r<cx?9:10},ux={encode:Yb,decode:Zb,encodingLength:lx},dx=ux,na=dx;function oa(r,e=0){return[na.decode(r,e),na.decode.bytes]}function Ns(r,e,t=0){return na.encode(r,e,t),e}function Bs(r){return na.encodingLength(r)}function Xt(r,e){let t=e.byteLength,n=Bs(r),o=n+Bs(t),s=new Uint8Array(o+t);return Ns(r,s,0),Ns(t,s,n),s.set(e,o),new zo(r,t,e,s)}function Te(r){let e=Rn(r),[t,n]=oa(e),[o,s]=oa(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 Qh(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&Rm(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}};function fx(r,e){return r.code===e}var Hm=0,hx="identity",qm=Rn;function px(r){return Xt(Hm,qm(r))}var dr={code:Hm,name:hx,encode:qm,digest:px};var e0={};yt(e0,{sha256:()=>ft,sha512:()=>Jh});function Zh({name:r,code:e,encode:t}){return new jh(r,e,t)}var jh=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?Xt(this.code,t):t.then(n=>Xt(this.code,n))}else throw Error("Unknown type, must be binary type")}};function zm(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var ft=Zh({name:"sha2-256",code:18,encode:zm("SHA-256")}),Jh=Zh({name:"sha2-512",code:19,encode:zm("SHA-512")});function Gm(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return gx(t,t0(r),e??Ee.encoder);default:return yx(t,t0(r),e??it.encoder)}}var Ym=new WeakMap;function t0(r){let e=Ym.get(r);if(e==null){let t=new Map;return Ym.set(r,t),t}return e}var re=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!==sa)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==wx)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=Xt(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&&Qh(e.multihash,n.multihash)}toString(e){return Gm(this,e)}toJSON(){return{"/":Gm(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??Qm(n,o,s.bytes))}else if(t[bx]===!0){let{version:n,multihash:o,code:s}=t,i=Te(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!==sa)throw new Error(`Version 0 CID must use dag-pb (code: ${sa}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=Qm(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,sa,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=Rn(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]=oa(e.subarray(t));return t+=f,u},o=n(),s=sa;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]=mx(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 t0(s).set(n,e),s}};function mx(r,e){switch(r[0]){case"Q":{let t=e??Ee;return[Ee.prefix,t.decode(`${Ee.prefix}${r}`)]}case Ee.prefix:{let t=e??Ee;return[Ee.prefix,t.decode(r)]}case it.prefix:{let t=e??it;return[it.prefix,t.decode(r)]}case fn.prefix:{let t=e??fn;return[fn.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 gx(r,e,t){let{prefix:n}=t;if(n!==Ee.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 yx(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 sa=112,wx=18;function Qm(r,e,t){let n=Bs(r),o=n+Bs(e),s=new Uint8Array(o+t.byteLength);return Ns(r,s,0),Ns(e,s,n),s.set(t,o),s}var bx=Symbol.for("@ipld/js-cid/CID");var Ln={...zh,...Uh,...Wh,...Oh,...Mh,...$h,...Vh,...Kh,...qh,...Fh},SR={...e0,...Xh};function jm(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Xm=jm("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),r0=jm("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=We(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),xx={utf8:Xm,"utf-8":Xm,hex:Ln.base16,latin1:r0,ascii:r0,binary:r0,...Ln},pl=xx;function O(r,e="utf8"){let t=pl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function n0(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return We(i);o+i>e&&(n=We(e),o=0);let a=n.subarray(o,o+=i);return o&7&&(o=(o|7)+1),a}}var Go=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function o0(){}var i0=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},Ex=n0();function vx(r){return globalThis.Buffer!=null?We(r):Ex(r)}var aa=class{len;head;tail;states;constructor(){this.len=0,this.head=new Go(o0,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Go(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new a0((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(ml,10,ur.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=ur.fromBigInt(e);return this._push(ml,t.length(),t)}uint64Number(e){return this._push(Sh,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=ur.fromBigInt(e).zzEncode();return this._push(ml,t.length(),t)}sint64Number(e){let t=ur.fromNumber(e).zzEncode();return this._push(ml,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(s0,1,e?1:0)}fixed32(e){return this._push(ia,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=ur.fromBigInt(e);return this._push(ia,4,t.lo)._push(ia,4,t.hi)}fixed64Number(e){let t=ur.fromNumber(e);return this._push(ia,4,t.lo)._push(ia,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(Sm,4,e)}double(e){return this._push(Im,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(s0,1,0):this.uint32(t)._push(Ax,t,e)}string(e){let t=Tm(e);return t!==0?this.uint32(t)._push(Ch,t,e):this._push(s0,1,0)}fork(){return this.states=new i0(this),this.head=this.tail=new Go(o0,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 Go(o0,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=vx(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function s0(r,e,t){e[t]=r&255}function Sx(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var a0=class extends Go{next;constructor(e,t){super(Sx,e,t),this.next=void 0}};function ml(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 ia(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 Ax(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(aa.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(Ix,e,r),this},aa.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(_x,e,r),this});function Ix(r,e,t){e.set(r,t)}function _x(r,e,t){r.length<40?Ch(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(O(r),t)}function c0(){return new aa}function ne(r,e){let t=c0();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Os;(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"})(Os||(Os={}));function gl(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 gl("enum",Os.VARINT,t,n)}function oe(r,e){return gl("message",Os.LENGTH_DELIMITED,r,e)}var Oe=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},ca=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var je;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(je||(je={}));var l0;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(l0||(l0={}));(function(r){r.codec=()=>Ke(l0)})(je||(je={}));var Ms;(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),je.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:ie(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=je.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)=>te(t,r.codec(),n)})(Ms||(Ms={}));var yl;(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),Ms.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 Oe('Decode error - map field "entries" had too many elements');s.entries.push(Ms.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)=>te(t,r.codec(),n)})(yl||(yl={}));var Us;(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:ie(0),data:ie(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)=>te(t,r.codec(),n)})(Us||(Us={}));var Er;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(Er||(Er={}));var wl;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(wl||(wl={}));(function(r){r.codec=()=>Ke(wl)})(Er||(Er={}));var Fs;(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&&wl[t.type]!==0&&(n.uint32(16),Er.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:ie(0),type:Er.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=Er.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Fs||(Fs={}));var Yo;(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),yl.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),Us.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),Fs.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=yl.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 Oe('Decode error - map field "blocks" had too many elements');s.blocks.push(Us.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 Oe('Decode error - map field "blockPresences" had too many elements');s.blockPresences.push(Fs.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)=>te(t,r.codec(),n)})(Yo||(Yo={}));function Zm(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 bl=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var kx=4193648,Tx=kx+16;function*Jm(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=Yo.encode(l).byteLength,{added:u,hasMore:f,newSize:h}=u0(o,l.blocks,a,e,d,Cx);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=u0(n,l.blockPresences,i,e,d,Px)),i+=u,d=h;let m=f;if({added:u,hasMore:f,newSize:h}=u0(t,l.wantlist.entries,s,e,d,Rx),s+=u,d=h,c=!p&&!m&&!f,c||(l.wantlist.full=!1),yield Yo.encode(l),c)break}}function u0(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>Tx)throw new bl("Cannot send block as after encoding it is over the max message size");let u=o+d;if(u>n){a=!0;break}e.push(l),i++,o=u}return{hasMore:a,added:i,newSize:o}}function Cx(r){return d0(3,Us.encode(r))}function Px(r){return d0(4,Fs.encode(r))}function Rx(r){return d0(1,Ms.encode(r))}function d0(r,e){let t=he(r),n=he(e.byteLength);return t+n+e.byteLength}var xl=class extends pe{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnLimitedConnections;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??[ra],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.runOnLimitedConnections=t.runOnLimitedConnections??!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 Wt({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,runOnLimitedConnection:this.runOnLimitedConnections});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 ar(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},s=AbortSignal.timeout(this.messageReceiveTimeout);V(1/0,s),s.addEventListener("abort",o),await t.closeWrite(),await Ve(t,i=>Yt(i,{maxDataLength:this.maxIncomingMessageSize}),async i=>{for await(let a of i)try{let c=Yo.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),V(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,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await zt(Qt(oo(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=Zm(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 C("No message to send");this.log("sendMessage to %p",e),s?.onProgress?.(new H("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,ra,s);await a.closeRead();try{await Ve(Jm(i,this.maxOutgoingMessageSize),c=>Gt(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 Fr("Network isn't running");t?.onProgress?.(new H("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),cr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(ra))return!0;throw new Ho(`${e} did not support ${ra}`)}})]);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 ao(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function $x(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function $s(r,...e){if(!$x(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 Qo(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");ao(r.outputLen),ao(r.blockLen)}function Vs(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 e4(r,e){$s(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Xo=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var jo=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Hr=(r,e)=>r<<32-e|r>>>e,El=(r,e)=>r<<e|r>>>32-e>>>0,IL=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var Vx=async()=>{};async function t4(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 Vx(),n+=s)}}function r4(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function qr(r){return typeof r=="string"&&(r=r4(r)),$s(r),r}function f0(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];$s(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 Ks=class{clone(){return this._cloneInto()}},Kx={}.toString;function n4(r,e){if(e!==void 0&&Kx.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Hs(r){let e=n=>r().update(qr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Zo(r=32){if(Xo&&typeof Xo.getRandomValues=="function")return Xo.getRandomValues(new Uint8Array(r));if(Xo&&typeof Xo.randomBytes=="function")return Xo.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function Hx(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 vl=(r,e,t)=>r&e^~r&t,Sl=(r,e,t)=>r&e^r&t^e&t,co=class extends Ks{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){Vs(this);let{view:t,buffer:n,blockLen:o}=this;e=qr(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){Vs(this),e4(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;Hx(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 Al=BigInt(4294967295),h0=BigInt(32);function o4(r,e=!1){return e?{h:Number(r&Al),l:Number(r>>h0&Al)}:{h:Number(r>>h0&Al)|0,l:Number(r&Al)|0}}function qx(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}=o4(r[o],e);[t[o],n[o]]=[s,i]}return[t,n]}var Wx=(r,e)=>BigInt(r>>>0)<<h0|BigInt(e>>>0),zx=(r,e,t)=>r>>>t,Gx=(r,e,t)=>r<<32-t|e>>>t,Yx=(r,e,t)=>r>>>t|e<<32-t,Qx=(r,e,t)=>r<<32-t|e>>>t,Xx=(r,e,t)=>r<<64-t|e>>>t-32,jx=(r,e,t)=>r>>>t-32|e<<64-t,Zx=(r,e)=>e,Jx=(r,e)=>r,eE=(r,e,t)=>r<<t|e>>>32-t,tE=(r,e,t)=>e<<t|r>>>32-t,rE=(r,e,t)=>e<<t-32|r>>>64-t,nE=(r,e,t)=>r<<t-32|e>>>64-t;function oE(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var sE=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),iE=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,aE=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),cE=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,lE=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),uE=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var dE={fromBig:o4,split:qx,toBig:Wx,shrSH:zx,shrSL:Gx,rotrSH:Yx,rotrSL:Qx,rotrBH:Xx,rotrBL:jx,rotr32H:Zx,rotr32L:Jx,rotlSH:eE,rotlSL:tE,rotlBH:rE,rotlBL:nE,add:oE,add3L:sE,add3H:iE,add4L:aE,add4H:cE,add5H:uE,add5L:lE},de=dE;var[fE,hE]=de.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))),lo=new Uint32Array(80),uo=new Uint32Array(80),p0=class extends co{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:m,Hl:g}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,h,p,m,g]}set(e,t,n,o,s,i,a,c,l,d,u,f,h,p,m,g){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=m|0,this.Hl=g|0}process(e,t){for(let w=0;w<16;w++,t+=4)lo[w]=e.getUint32(t),uo[w]=e.getUint32(t+=4);for(let w=16;w<80;w++){let x=lo[w-15]|0,k=uo[w-15]|0,T=de.rotrSH(x,k,1)^de.rotrSH(x,k,8)^de.shrSH(x,k,7),E=de.rotrSL(x,k,1)^de.rotrSL(x,k,8)^de.shrSL(x,k,7),S=lo[w-2]|0,_=uo[w-2]|0,F=de.rotrSH(S,_,19)^de.rotrBH(S,_,61)^de.shrSH(S,_,6),N=de.rotrSL(S,_,19)^de.rotrBL(S,_,61)^de.shrSL(S,_,6),M=de.add4L(E,N,uo[w-7],uo[w-16]),B=de.add4H(M,T,F,lo[w-7],lo[w-16]);lo[w]=B|0,uo[w]=M|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:m,Gl:g,Hh:y,Hl:b}=this;for(let w=0;w<80;w++){let x=de.rotrSH(u,f,14)^de.rotrSH(u,f,18)^de.rotrBH(u,f,41),k=de.rotrSL(u,f,14)^de.rotrSL(u,f,18)^de.rotrBL(u,f,41),T=u&h^~u&m,E=f&p^~f&g,S=de.add5L(b,k,E,hE[w],uo[w]),_=de.add5H(S,y,x,T,fE[w],lo[w]),F=S|0,N=de.rotrSH(n,o,28)^de.rotrBH(n,o,34)^de.rotrBH(n,o,39),M=de.rotrSL(n,o,28)^de.rotrBL(n,o,34)^de.rotrBL(n,o,39),B=n&s^n&a^s&a,L=o&i^o&c^i&c;y=m|0,b=g|0,m=h|0,g=p|0,h=u|0,p=f|0,{h:u,l:f}=de.add(l|0,d|0,_|0,F|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let D=de.add3L(F,M,L);n=de.add3H(D,_,N,B),o=D|0}({h:n,l:o}=de.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=de.add(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=de.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=de.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=de.add(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=de.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:m,l:g}=de.add(this.Gh|0,this.Gl|0,m|0,g|0),{h:y,l:b}=de.add(this.Hh|0,this.Hl|0,y|0,b|0),this.set(n,o,s,i,a,c,l,d,u,f,h,p,m,g,y,b)}roundClean(){lo.fill(0),uo.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 fo=Hs(()=>new p0);var _l={};yt(_l,{aInRange:()=>wt,abool:()=>Wr,abytes:()=>qs,bitGet:()=>bE,bitLen:()=>b0,bitMask:()=>ua,bitSet:()=>xE,bytesToHex:()=>Nn,bytesToNumberBE:()=>Bn,bytesToNumberLE:()=>zr,concatBytes:()=>Mn,createHmacDrbg:()=>x0,ensureBytes:()=>Me,equalBytes:()=>yE,hexToBytes:()=>es,hexToNumber:()=>w0,inRange:()=>la,isBytes:()=>ho,memoized:()=>ts,notImplemented:()=>vE,numberToBytesBE:()=>po,numberToBytesLE:()=>On,numberToHexUnpadded:()=>Jo,numberToVarBytesBE:()=>gE,utf8ToBytes:()=>wE,validateObject:()=>vr});var y0=BigInt(0),Il=BigInt(1),pE=BigInt(2);function ho(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function qs(r){if(!ho(r))throw new Error("Uint8Array expected")}function Wr(r,e){if(typeof e!="boolean")throw new Error(`${r} must be valid boolean, got "${e}".`)}var mE=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Nn(r){qs(r);let e="";for(let t=0;t<r.length;t++)e+=mE[r[t]];return e}function Jo(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function w0(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var Dn={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function s4(r){if(r>=Dn._0&&r<=Dn._9)return r-Dn._0;if(r>=Dn._A&&r<=Dn._F)return r-(Dn._A-10);if(r>=Dn._a&&r<=Dn._f)return r-(Dn._a-10)}function es(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=s4(r.charCodeAt(s)),a=s4(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 Bn(r){return w0(Nn(r))}function zr(r){return qs(r),w0(Nn(Uint8Array.from(r).reverse()))}function po(r,e){return es(r.toString(16).padStart(e*2,"0"))}function On(r,e){return po(r,e).reverse()}function gE(r){return es(Jo(r))}function Me(r,e,t){let n;if(typeof e=="string")try{n=es(e)}catch(s){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${s}`)}else if(ho(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 Mn(...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}function yE(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 wE(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}var m0=r=>typeof r=="bigint"&&y0<=r;function la(r,e,t){return m0(r)&&m0(e)&&m0(t)&&e<=r&&r<t}function wt(r,e,t,n){if(!la(e,t,n))throw new Error(`expected valid ${r}: ${t} <= n < ${n}, got ${typeof e} ${e}`)}function b0(r){let e;for(e=0;r>y0;r>>=Il,e+=1);return e}function bE(r,e){return r>>BigInt(e)&Il}function xE(r,e,t){return r|(t?Il:y0)<<BigInt(e)}var ua=r=>(pE<<BigInt(r-1))-Il,g0=r=>new Uint8Array(r),i4=r=>Uint8Array.from(r);function x0(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=g0(r),o=g0(r),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...u)=>t(o,n,...u),c=(u=g0())=>{o=a(i4([0]),u),n=a(),u.length!==0&&(o=a(i4([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 Mn(...f)};return(u,f)=>{i(),c(u);let h;for(;!(h=f(l()));)c();return i(),h}}var EE={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"||ho(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 vr(r,e,t={}){let n=(o,s,i)=>{let a=EE[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 vE=()=>{throw new Error("not implemented")};function ts(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 at=BigInt(0),He=BigInt(1),rs=BigInt(2),SE=BigInt(3),E0=BigInt(4),a4=BigInt(5),c4=BigInt(8),AE=BigInt(9),IE=BigInt(16);function Ae(r,e){let t=r%e;return t>=at?t:e+t}function v0(r,e,t){if(t<=at||e<at)throw new Error("Expected power/modulo > 0");if(t===He)return at;let n=He;for(;e>at;)e&He&&(n=n*r%t),r=r*r%t,e>>=He;return n}function Ue(r,e,t){let n=r;for(;e-- >at;)n*=n,n%=t;return n}function kl(r,e){if(r===at||e<=at)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=Ae(r,e),n=e,o=at,s=He,i=He,a=at;for(;t!==at;){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 Ae(o,e)}function _E(r){let e=(r-He)/rs,t,n,o;for(t=r-He,n=0;t%rs===at;t/=rs,n++);for(o=rs;o<r&&v0(o,e,r)!==r-He;o++);if(n===1){let i=(r+He)/E0;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),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 m=a.sqr(f);h<l&&!a.eql(m,a.ONE);h++)m=a.sqr(m);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 kE(r){if(r%E0===SE){let e=(r+He)/E0;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%c4===a4){let e=(r-a4)/c4;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%IE,_E(r)}var l4=(r,e)=>(Ae(r,e)&He)===He,TE=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function S0(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=TE.reduce((n,o)=>(n[o]="function",n),e);return vr(r,t)}function CE(r,e,t){if(t<at)throw new Error("Expected power > 0");if(t===at)return r.ONE;if(t===He)return e;let n=r.ONE,o=e;for(;t>at;)t&He&&(n=r.mul(n,o)),o=r.sqr(o),t>>=He;return n}function PE(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 A0(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function mo(r,e,t=!1,n={}){if(r<=at)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:s}=A0(r,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=kE(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:s,MASK:ua(o),ZERO:at,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 at<=c&&c<r},is0:c=>c===at,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)=>CE(a,c,l),div:(c,l)=>Ae(c*kl(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>kl(c,r),sqrt:n.sqrt||(c=>i(a,c)),invertBatch:c=>PE(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?On(c,s):po(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return t?zr(c):Bn(c)}});return Object.freeze(a)}function u4(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 I0(r){let e=u4(r);return e+Math.ceil(e/2)}function d4(r,e,t=!1){let n=r.length,o=u4(e),s=I0(e);if(n<16||n<s||n>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let i=t?Bn(r):zr(r),a=Ae(i,e-He)+He;return t?On(a,o):po(a,o)}var LE=BigInt(0),_0=BigInt(1),k0=new WeakMap,f4=new WeakMap;function Tl(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>LE;)i&_0&&(a=a.add(c)),c=c.double(),i>>=_0;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 m=0;m<c;m++){let g=m*l,y=Number(a&f);a>>=p,y>l&&(y-=h,a+=_0);let b=g,w=g+Math.abs(y)-1,x=m%2!==0,k=y<0;y===0?u=u.add(t(x,i[b])):d=d.add(t(k,i[w]))}return{p:d,f:u}},wNAFCached(s,i,a){let c=f4.get(s)||1,l=k0.get(s);return l||(l=this.precomputeWindow(s,c),c!==1&&k0.set(s,a(l))),this.wNAF(c,l,i)},setWindowSize(s,i){n(i),f4.set(s,i),k0.delete(s)}}}function Cl(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=b0(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 da(r){return S0(r.Fp),vr(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...A0(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Gr=BigInt(0),jt=BigInt(1),Pl=BigInt(2),DE=BigInt(8),NE={zip215:!0};function BE(r){let e=da(r);return vr(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function h4(r){let e=BE(r),{Fp:t,n,prehash:o,hash:s,randomBytes:i,nByteLength:a,h:c}=e,l=Pl<<BigInt(a*8)-jt,d=t.create,u=mo(e.n,e.nBitLength),f=e.uvRatio||((I,A)=>{try{return{isValid:!0,value:t.sqrt(I*t.inv(A))}}catch{return{isValid:!1,value:Gr}}}),h=e.adjustScalarBytes||(I=>I),p=e.domain||((I,A,R)=>{if(Wr("phflag",R),A.length||R)throw new Error("Contexts/pre-hash are not supported");return I});function m(I,A){wt("coordinate "+I,A,Gr,l)}function g(I){if(!(I instanceof w))throw new Error("ExtendedPoint expected")}let y=ts((I,A)=>{let{ex:R,ey:P,ez:q}=I,z=I.is0();A==null&&(A=z?DE:t.inv(q));let j=d(R*A),ae=d(P*A),le=d(q*A);if(z)return{x:Gr,y:jt};if(le!==jt)throw new Error("invZ was invalid");return{x:j,y:ae}}),b=ts(I=>{let{a:A,d:R}=e;if(I.is0())throw new Error("bad point: ZERO");let{ex:P,ey:q,ez:z,et:j}=I,ae=d(P*P),le=d(q*q),fe=d(z*z),be=d(fe*fe),De=d(ae*A),Ne=d(fe*d(De+le)),Fe=d(be+d(R*d(ae*le)));if(Ne!==Fe)throw new Error("bad point: equation left != right (1)");let Nt=d(P*q),ot=d(z*j);if(Nt!==ot)throw new Error("bad point: equation left != right (2)");return!0});class w{constructor(A,R,P,q){this.ex=A,this.ey=R,this.ez=P,this.et=q,m("x",A),m("y",R),m("z",P),m("t",q),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(A){if(A instanceof w)throw new Error("extended point not allowed");let{x:R,y:P}=A||{};return m("x",R),m("y",P),new w(R,P,jt,d(R*P))}static normalizeZ(A){let R=t.invertBatch(A.map(P=>P.ez));return A.map((P,q)=>P.toAffine(R[q])).map(w.fromAffine)}static msm(A,R){return Cl(w,u,A,R)}_setWindowSize(A){T.setWindowSize(this,A)}assertValidity(){b(this)}equals(A){g(A);let{ex:R,ey:P,ez:q}=this,{ex:z,ey:j,ez:ae}=A,le=d(R*ae),fe=d(z*q),be=d(P*ae),De=d(j*q);return le===fe&&be===De}is0(){return this.equals(w.ZERO)}negate(){return new w(d(-this.ex),this.ey,this.ez,d(-this.et))}double(){let{a:A}=e,{ex:R,ey:P,ez:q}=this,z=d(R*R),j=d(P*P),ae=d(Pl*d(q*q)),le=d(A*z),fe=R+P,be=d(d(fe*fe)-z-j),De=le+j,Ne=De-ae,Fe=le-j,Nt=d(be*Ne),ot=d(De*Fe),Kt=d(be*Fe),kn=d(Ne*De);return new w(Nt,ot,kn,Kt)}add(A){g(A);let{a:R,d:P}=e,{ex:q,ey:z,ez:j,et:ae}=this,{ex:le,ey:fe,ez:be,et:De}=A;if(R===BigInt(-1)){let um=d((z-q)*(fe+le)),dm=d((z+q)*(fe-le)),mh=d(dm-um);if(mh===Gr)return this.double();let fm=d(j*Pl*De),hm=d(ae*Pl*be),pm=hm+fm,mm=dm+um,gm=hm-fm,Vw=d(pm*mh),Kw=d(mm*gm),Hw=d(pm*gm),qw=d(mh*mm);return new w(Vw,Kw,qw,Hw)}let Ne=d(q*le),Fe=d(z*fe),Nt=d(ae*P*De),ot=d(j*be),Kt=d((q+z)*(le+fe)-Ne-Fe),kn=ot-Nt,ji=ot+Nt,Zi=d(Fe-R*Ne),Mw=d(Kt*kn),Uw=d(ji*Zi),Fw=d(Kt*Zi),$w=d(kn*ji);return new w(Mw,Uw,$w,Fw)}subtract(A){return this.add(A.negate())}wNAF(A){return T.wNAFCached(this,A,w.normalizeZ)}multiply(A){let R=A;wt("scalar",R,jt,n);let{p:P,f:q}=this.wNAF(R);return w.normalizeZ([P,q])[0]}multiplyUnsafe(A){let R=A;return wt("scalar",R,Gr,n),R===Gr?k:this.equals(k)||R===jt?this:this.equals(x)?this.wNAF(R).p:T.unsafeLadder(this,R)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return T.unsafeLadder(this,n).is0()}toAffine(A){return y(this,A)}clearCofactor(){let{h:A}=e;return A===jt?this:this.multiplyUnsafe(A)}static fromHex(A,R=!1){let{d:P,a:q}=e,z=t.BYTES;A=Me("pointHex",A,z),Wr("zip215",R);let j=A.slice(),ae=A[z-1];j[z-1]=ae&-129;let le=zr(j),fe=R?l:t.ORDER;wt("pointHex.y",le,Gr,fe);let be=d(le*le),De=d(be-jt),Ne=d(P*be-q),{isValid:Fe,value:Nt}=f(De,Ne);if(!Fe)throw new Error("Point.fromHex: invalid y coordinate");let ot=(Nt&jt)===jt,Kt=(ae&128)!==0;if(!R&&Nt===Gr&&Kt)throw new Error("Point.fromHex: x=0 and x_0=1");return Kt!==ot&&(Nt=d(-Nt)),w.fromAffine({x:Nt,y:le})}static fromPrivateKey(A){return _(A).point}toRawBytes(){let{x:A,y:R}=this.toAffine(),P=On(R,t.BYTES);return P[P.length-1]|=A&jt?128:0,P}toHex(){return Nn(this.toRawBytes())}}w.BASE=new w(e.Gx,e.Gy,jt,d(e.Gx*e.Gy)),w.ZERO=new w(Gr,jt,jt,Gr);let{BASE:x,ZERO:k}=w,T=Tl(w,a*8);function E(I){return Ae(I,n)}function S(I){return E(zr(I))}function _(I){let A=a;I=Me("private key",I,A);let R=Me("hashed private key",s(I),2*A),P=h(R.slice(0,A)),q=R.slice(A,2*A),z=S(P),j=x.multiply(z),ae=j.toRawBytes();return{head:P,prefix:q,scalar:z,point:j,pointBytes:ae}}function F(I){return _(I).pointBytes}function N(I=new Uint8Array,...A){let R=Mn(...A);return S(s(p(R,Me("context",I),!!o)))}function M(I,A,R={}){I=Me("message",I),o&&(I=o(I));let{prefix:P,scalar:q,pointBytes:z}=_(A),j=N(R.context,P,I),ae=x.multiply(j).toRawBytes(),le=N(R.context,ae,z,I),fe=E(j+le*q);wt("signature.s",fe,Gr,n);let be=Mn(ae,On(fe,t.BYTES));return Me("result",be,a*2)}let B=NE;function L(I,A,R,P=B){let{context:q,zip215:z}=P,j=t.BYTES;I=Me("signature",I,2*j),A=Me("message",A),z!==void 0&&Wr("zip215",z),o&&(A=o(A));let ae=zr(I.slice(j,2*j)),le,fe,be;try{le=w.fromHex(R,z),fe=w.fromHex(I.slice(0,j),z),be=x.multiplyUnsafe(ae)}catch{return!1}if(!z&&le.isSmallOrder())return!1;let De=N(q,fe.toRawBytes(),le.toRawBytes(),A);return fe.add(le.multiplyUnsafe(De)).subtract(be).clearCofactor().equals(w.ZERO)}return x._setWindowSize(8),{CURVE:e,getPublicKey:F,sign:M,verify:L,ExtendedPoint:w,utils:{getExtendedPublicKey:_,randomPrivateKey:()=>i(t.BYTES),precompute(I=8,A=w.BASE){return A._setWindowSize(I),A.multiply(BigInt(3)),A}}}}var Ws=BigInt(0),T0=BigInt(1);function OE(r){return vr(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function p4(r){let e=OE(r),{P:t}=e,n=b=>Ae(b,t),o=e.montgomeryBits,s=Math.ceil(o/8),i=e.nByteLength,a=e.adjustScalarBytes||(b=>b),c=e.powPminus2||(b=>v0(b,t-BigInt(2),t));function l(b,w,x){let k=n(b*(w-x));return w=n(w-k),x=n(x+k),[w,x]}let d=(e.a-BigInt(2))/BigInt(4);function u(b,w){wt("u",b,Ws,t),wt("scalar",w,Ws,t);let x=w,k=b,T=T0,E=Ws,S=b,_=T0,F=Ws,N;for(let B=BigInt(o-1);B>=Ws;B--){let L=x>>B&T0;F^=L,N=l(F,T,S),T=N[0],S=N[1],N=l(F,E,_),E=N[0],_=N[1],F=L;let D=T+E,I=n(D*D),A=T-E,R=n(A*A),P=I-R,q=S+_,z=S-_,j=n(z*D),ae=n(q*A),le=j+ae,fe=j-ae;S=n(le*le),_=n(k*n(fe*fe)),T=n(I*R),E=n(P*(I+n(d*P)))}N=l(F,T,S),T=N[0],S=N[1],N=l(F,E,_),E=N[0],_=N[1];let M=c(E);return n(T*M)}function f(b){return On(n(b),s)}function h(b){let w=Me("u coordinate",b,s);return i===32&&(w[31]&=127),zr(w)}function p(b){let w=Me("scalar",b),x=w.length;if(x!==s&&x!==i)throw new Error(`Expected ${s} or ${i} bytes, got ${x}`);return zr(a(w))}function m(b,w){let x=h(w),k=p(b),T=u(x,k);if(T===Ws)throw new Error("Invalid private or public key received");return f(T)}let g=f(e.Gu);function y(b){return m(b,g)}return{scalarMult:m,scalarMultBase:y,getSharedSecret:(b,w)=>m(b,w),getPublicKey:b=>y(b),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:g}}var fa=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),m4=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),ZL=BigInt(0),ME=BigInt(1),g4=BigInt(2),UE=BigInt(3),FE=BigInt(5),$E=BigInt(8);function y4(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=fa,a=r*r%s*r%s,c=Ue(a,g4,s)*a%s,l=Ue(c,ME,s)*r%s,d=Ue(l,FE,s)*l%s,u=Ue(d,e,s)*d%s,f=Ue(u,t,s)*u%s,h=Ue(f,n,s)*f%s,p=Ue(h,o,s)*h%s,m=Ue(p,o,s)*h%s,g=Ue(m,e,s)*d%s;return{pow_p_5_8:Ue(g,g4,s)*r%s,b2:a}}function w4(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function VE(r,e){let t=fa,n=Ae(e*e*e,t),o=Ae(n*n*e,t),s=y4(r*o).pow_p_5_8,i=Ae(r*n*s,t),a=Ae(e*i*i,t),c=i,l=Ae(i*m4,t),d=a===r,u=a===Ae(-r,t),f=a===Ae(-r*m4,t);return d&&(i=c),(u||f)&&(i=l),l4(i,t)&&(i=Ae(-i,t)),{isValid:d||u,value:i}}var KE=mo(fa,void 0,!0),HE={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:KE,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:$E,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:fo,randomBytes:Zo,adjustScalarBytes:w4,uvRatio:VE},ha=h4(HE);var pa=p4({P:fa,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=fa,{pow_p_5_8:t,b2:n}=y4(r);return Ae(Ue(t,UE,e)*n,e)},adjustScalarBytes:w4,randomBytes:Zo});var zs=32,hn=64,C0=32;function b4(){let r=ha.utils.randomPrivateKey(),e=ha.getPublicKey(r);return{privateKey:qE(r,e),publicKey:e}}function x4(r,e){let t=r.subarray(0,C0);return ha.sign(e instanceof Uint8Array?e:e.subarray(),t)}function E4(r,e,t){return ha.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function qE(r,e){let t=new Uint8Array(hn);for(let n=0;n<C0;n++)t[n]=r[n],t[C0+n]=e[n];return t}var ma=class{type="Ed25519";raw;constructor(e){this.raw=Ys(e,zs)}toMultihash(){return dr.digest(Rt(this))}toCID(){return re.createV1(114,this.toMultihash())}toString(){return Ee.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t){return E4(this.raw,t,e)}},Gs=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Ys(e,hn),this.publicKey=new ma(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e){return x4(this.raw,e)}};function P0(r){if(r.length>hn){r=Ys(r,hn+zs);let n=r.subarray(0,hn),o=r.subarray(hn,r.length);return new Gs(n,o)}r=Ys(r,hn);let e=r.subarray(0,hn),t=r.subarray(zs);return new Gs(e,t)}function R0(r){return r=Ys(r,zs),new ma(r)}async function S4(){let{privateKey:r,publicKey:e}=b4();return new Gs(r,e)}function Ys(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new C(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var Ge;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1"})(Ge||(Ge={}));var L0;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(L0||(L0={}));(function(r){r.codec=()=>Ke(L0)})(Ge||(Ge={}));var pn;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ge.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(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.Type=Ge.codec().decode(t);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)=>te(t,r.codec(),n)})(pn||(pn={}));var ga;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ge.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(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.Type=Ge.codec().decode(t);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)=>te(t,r.codec(),n)})(ga||(ga={}));var ka={};yt(ka,{MAX_RSA_KEY_SIZE:()=>xu,generateRSAKeyPair:()=>H0,jwkToJWKKeyPair:()=>b6,jwkToPkcs1:()=>sv,jwkToPkix:()=>V0,jwkToRSAPrivateKey:()=>w6,pkcs1ToJwk:()=>g6,pkcs1ToRSAPrivateKey:()=>Eu,pkixToJwk:()=>y6,pkixToRSAPublicKey:()=>K0});var WE=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]),go=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),yo=new Uint32Array(64),D0=class extends co{constructor(){super(64,32,8,!1),this.A=go[0]|0,this.B=go[1]|0,this.C=go[2]|0,this.D=go[3]|0,this.E=go[4]|0,this.F=go[5]|0,this.G=go[6]|0,this.H=go[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)yo[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=yo[u-15],h=yo[u-2],p=Hr(f,7)^Hr(f,18)^f>>>3,m=Hr(h,17)^Hr(h,19)^h>>>10;yo[u]=m+yo[u-7]+p+yo[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=Hr(a,6)^Hr(a,11)^Hr(a,25),h=d+f+vl(a,c,l)+WE[u]+yo[u]|0,m=(Hr(n,2)^Hr(n,13)^Hr(n,22))+Sl(n,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=n,n=h+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(){yo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Sr=Hs(()=>new D0);var me=kt(I4());function ns(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 wo(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 Dl(...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 B0(){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=ns(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,ns(s,8)-n}function _4(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=wo(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=wo(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 k4(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 Zt(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 wD=Math.log(2);function Nl(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function O0(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 Hn(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 wa=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return O0(this.items)}},ya=[new Uint8Array([1])],T4="0123456789";var js="",Yr=new ArrayBuffer(0),M0=new Uint8Array(0),ba="EndOfContent",P4="OCTET STRING",R4="BIT STRING";function qn(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?me.BufferSourceConverter.toUint8Array(s.valueHex):M0}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(!Hn(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:me.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Fn=class{constructor({blockLength:e=0,error:t=js,warnings:n=[],valueBeforeDecode:o=M0}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=me.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:me.Convert.ToHex(this.valueBeforeDecodeView)}}};Fn.NAME="baseBlock";var Lt=class extends Fn{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'")}};Lt.NAME="valueBlock";var Bl=class extends qn(Fn){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?me.BufferSourceConverter.toUint8Array(e.valueHex):M0,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=wo(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=me.BufferSourceConverter.toUint8Array(e);if(!Hn(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=ns(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}}};Bl.NAME="identificationBlock";var Ol=class extends Fn{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=me.BufferSourceConverter.toUint8Array(e);if(!Hn(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=ns(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=wo(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}}};Ol.NAME="lengthBlock";var G={},bt=class extends Fn{constructor({name:e=js,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new Bl(o),this.lenBlock=new Ol(o),this.valueBlock=s?new s(o):new Lt(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 wa;t||L4(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():me.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${me.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 k4(t,n)}};bt.NAME="BaseBlock";function L4(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)L4(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var Ml=class extends bt{constructor({value:e=js,...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}'`}};Ml.NAME="BaseStringBlock";var Ul=class extends qn(Lt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Ul.NAME="PrimitiveValueBlock";var D4,Fl=class extends bt{constructor(e={}){super(e,Ul),this.idBlock.isConstructed=!1}};D4=Fl;G.Primitive=D4;Fl.NAME="PRIMITIVE";function ev(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 wu(r,e=0,t=r.length){let n=e,o=new bt({},Lt),s=new Fn;if(!Hn(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=bt;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=G.EndOfContent;break;case 1:c=G.Boolean;break;case 2:c=G.Integer;break;case 3:c=G.BitString;break;case 4:c=G.OctetString;break;case 5:c=G.Null;break;case 6:c=G.ObjectIdentifier;break;case 10:c=G.Enumerated;break;case 12:c=G.Utf8String;break;case 13:c=G.RelativeObjectIdentifier;break;case 14:c=G.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=G.Sequence;break;case 17:c=G.Set;break;case 18:c=G.NumericString;break;case 19:c=G.PrintableString;break;case 20:c=G.TeletexString;break;case 21:c=G.VideotexString;break;case 22:c=G.IA5String;break;case 23:c=G.UTCTime;break;case 24:c=G.GeneralizedTime;break;case 25:c=G.GraphicString;break;case 26:c=G.VisibleString;break;case 27:c=G.GeneralString;break;case 28:c=G.UniversalString;break;case 29:c=G.CharacterString;break;case 30:c=G.BmpString;break;case 31:c=G.DATE;break;case 32:c=G.TimeOfDay;break;case 33:c=G.DateTime;break;case 34:c=G.Duration;break;default:{let l=o.idBlock.isConstructed?new G.Constructed:new G.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?G.Constructed:G.Primitive}return o=ev(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 os(r){if(!r.byteLength){let e=new bt({},Lt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return wu(me.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function tv(r,e){return r?1:e}var mn=class extends Lt{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=me.BufferSourceConverter.toUint8Array(e);if(!Hn(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(;tv(this.isIndefiniteForm,n)>0;){let i=wu(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===ba)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===ba?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new wa;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}};mn.NAME="ConstructedValueBlock";var N4,bo=class extends bt{constructor(e={}){super(e,mn),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 Sb=Object.create;var jc=Object.defineProperty;var Ab=Object.getOwnPropertyDescriptor;var Ib=Object.getOwnPropertyNames;var _b=Object.getPrototypeOf,Tb=Object.prototype.hasOwnProperty;var ct=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Xe=(r,e)=>{for(var t in e)jc(r,t,{get:e[t],enumerable:!0})},Zm=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ib(e))!Tb.call(r,o)&&o!==t&&jc(r,o,{get:()=>e[o],enumerable:!(n=Ab(e,o))||n.enumerable});return r};var Tt=(r,e,t)=>(t=r!=null?Sb(_b(r)):{},Zm(e||!r||!r.__esModule?jc(t,"default",{value:r,enumerable:!0}):t,r)),kb=r=>Zm(jc({},"__esModule",{value:!0}),r);var n6=ct(ti=>{"use strict";var Dv="[object ArrayBuffer]",$n=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===Dv}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}},G0="string",Lv=/^[0-9a-f]+$/i,Nv=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,Bv=/^[a-zA-Z0-9-_]+$/,Vl=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=$n.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=$n.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}},Kl=class r{static isHex(e){return typeof e===G0&&Lv.test(e)}static isBase64(e){return typeof e===G0&&Nv.test(e)}static isBase64Url(e){return typeof e===G0&&Bv.test(e)}static ToString(e,t="utf8"){let n=$n.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=$n.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 Vl.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 Vl.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=$n.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=$n.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,"")||""}};Kl.DEFAULT_UTF8_ENCODING="utf8";function Ov(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 Mv(...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 Uv(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}ti.BufferSourceConverter=$n;ti.Convert=Kl;ti.assign=Ov;ti.combine=Mv;ti.isEqual=Uv});var v8=ct((Wa,Mu)=>{(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 m=[0,0,0,0];return m[3]+=h[3]+p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=h[2]+p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=h[1]+p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=h[0]+p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[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 m=[0,0,0,0];return m[3]+=h[3]*p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=h[2]*p[3],m[1]+=m[2]>>>16,m[2]&=65535,m[2]+=h[3]*p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=h[1]*p[3],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=h[2]*p[2],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=h[3]*p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=h[0]*p[3]+h[1]*p[2]+h[2]*p[1]+h[3]*p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[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 m=h.length%4,g=h.length-m,y=p,b=0,w=3432918353,x=461845907,T=0;T<g;T=T+4)b=h[T]|h[T+1]<<8|h[T+2]<<16|h[T+3]<<24,b=o(b,w),b=s(b,15),b=o(b,x),y^=b,y=s(y,13),y=o(y,5)+3864292196;switch(b=0,m){case 3:b^=h[T+2]<<16;case 2:b^=h[T+1]<<8;case 1:b^=h[T],b=o(b,w),b=s(b,15),b=o(b,x),y^=b}return y^=h.length,y=i(y),y>>>0},t.x86.hash128=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var m=h.length%16,g=h.length-m,y=p,b=p,w=p,x=p,T=0,k=0,v=0,S=0,_=597399067,$=2869860233,N=951274213,M=2716044179,B=0;B<g;B=B+16)T=h[B]|h[B+1]<<8|h[B+2]<<16|h[B+3]<<24,k=h[B+4]|h[B+5]<<8|h[B+6]<<16|h[B+7]<<24,v=h[B+8]|h[B+9]<<8|h[B+10]<<16|h[B+11]<<24,S=h[B+12]|h[B+13]<<8|h[B+14]<<16|h[B+15]<<24,T=o(T,_),T=s(T,15),T=o(T,$),y^=T,y=s(y,19),y+=b,y=o(y,5)+1444728091,k=o(k,$),k=s(k,16),k=o(k,N),b^=k,b=s(b,17),b+=w,b=o(b,5)+197830471,v=o(v,N),v=s(v,17),v=o(v,M),w^=v,w=s(w,15),w+=x,w=o(w,5)+2530024501,S=o(S,M),S=s(S,18),S=o(S,_),x^=S,x=s(x,13),x+=y,x=o(x,5)+850148119;switch(T=0,k=0,v=0,S=0,m){case 15:S^=h[B+14]<<16;case 14:S^=h[B+13]<<8;case 13:S^=h[B+12],S=o(S,M),S=s(S,18),S=o(S,_),x^=S;case 12:v^=h[B+11]<<24;case 11:v^=h[B+10]<<16;case 10:v^=h[B+9]<<8;case 9:v^=h[B+8],v=o(v,N),v=s(v,17),v=o(v,M),w^=v;case 8:k^=h[B+7]<<24;case 7:k^=h[B+6]<<16;case 6:k^=h[B+5]<<8;case 5:k^=h[B+4],k=o(k,$),k=s(k,16),k=o(k,N),b^=k;case 4:T^=h[B+3]<<24;case 3:T^=h[B+2]<<16;case 2:T^=h[B+1]<<8;case 1:T^=h[B],T=o(T,_),T=s(T,15),T=o(T,$),y^=T}return y^=h.length,b^=h.length,w^=h.length,x^=h.length,y+=b,y+=w,y+=x,b+=y,w+=y,x+=y,y=i(y),b=i(b),w=i(w),x=i(x),y+=b,y+=w,y+=x,b+=y,w+=y,x+=y,("00000000"+(y>>>0).toString(16)).slice(-8)+("00000000"+(b>>>0).toString(16)).slice(-8)+("00000000"+(w>>>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 m=h.length%16,g=h.length-m,y=[0,p],b=[0,p],w=[0,0],x=[0,0],T=[2277735313,289559509],k=[1291169091,658871167],v=0;v<g;v=v+16)w=[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],w=c(w,T),w=l(w,31),w=c(w,k),y=u(y,w),y=l(y,27),y=a(y,b),y=a(c(y,[0,5]),[0,1390208809]),x=c(x,k),x=l(x,33),x=c(x,T),b=u(b,x),b=l(b,31),b=a(b,y),b=a(c(b,[0,5]),[0,944331445]);switch(w=[0,0],x=[0,0],m){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,k),x=l(x,33),x=c(x,T),b=u(b,x);case 8:w=u(w,d([0,h[v+7]],56));case 7:w=u(w,d([0,h[v+6]],48));case 6:w=u(w,d([0,h[v+5]],40));case 5:w=u(w,d([0,h[v+4]],32));case 4:w=u(w,d([0,h[v+3]],24));case 3:w=u(w,d([0,h[v+2]],16));case 2:w=u(w,d([0,h[v+1]],8));case 1:w=u(w,[0,h[v]]),w=c(w,T),w=l(w,31),w=c(w,k),y=u(y,w)}return y=u(y,[0,h.length]),b=u(b,[0,h.length]),y=a(y,b),b=a(b,y),y=f(y),b=f(b),y=a(y,b),b=a(b,y),("00000000"+(y[0]>>>0).toString(16)).slice(-8)+("00000000"+(y[1]>>>0).toString(16)).slice(-8)+("00000000"+(b[0]>>>0).toString(16)).slice(-8)+("00000000"+(b[1]>>>0).toString(16)).slice(-8)},typeof Wa<"u"?(typeof Mu<"u"&&Mu.exports&&(Wa=Mu.exports=t),Wa.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)})(Wa)});var Uu=ct((LO,S8)=>{S8.exports=v8()});var P8=ct((jM,w2)=>{"use strict";var DS=Object.prototype.hasOwnProperty,Ft="~";function Xa(){}Object.create&&(Xa.prototype=Object.create(null),new Xa().__proto__||(Ft=!1));function LS(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function C8(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new LS(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 Gu(r,e){--r._eventsCount===0?r._events=new Xa:delete r._events[e]}function Lt(){this._events=new Xa,this._eventsCount=0}Lt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)DS.call(t,n)&&e.push(Ft?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Lt.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};Lt.prototype.listenerCount=function(e){var t=Ft?Ft+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Lt.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};Lt.prototype.on=function(e,t,n){return C8(this,e,t,n,!1)};Lt.prototype.once=function(e,t,n){return C8(this,e,t,n,!0)};Lt.prototype.removeListener=function(e,t,n,o){var s=Ft?Ft+e:e;if(!this._events[s])return this;if(!t)return Gu(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&Gu(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:Gu(this,s)}return this};Lt.prototype.removeAllListeners=function(e){var t;return e?(t=Ft?Ft+e:e,this._events[t]&&Gu(this,t)):(this._events=new Xa,this._eventsCount=0),this};Lt.prototype.off=Lt.prototype.removeListener;Lt.prototype.addListener=Lt.prototype.on;Lt.prefixed=Ft;Lt.EventEmitter=Lt;typeof w2<"u"&&(w2.exports=Lt)});var A2=ct((xU,N8)=>{N8.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 Eg=ct(lc=>{(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(m){throw u=m,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(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,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}(),lc.ip2long=i,lc.long2ip=a,lc.Netmask=r}).call(lc)});var Q1=ct((Aq,qp)=>{var Sq=function(){typeof qp<"u"&&(qp.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(S){var _=S-S%1;return _==0&&(S<0||S===0&&1/S!=1/0)?-0:_},d=m.prototype,u=(m.fromDate=function(S){return new m(+S)},m.fromInt64BE=x(0,1,2,3,0,4),m.fromInt64LE=x(3,2,1,0,4,0),m.fromString=function(N){var _,$=new m,N=(N+="").replace(/^\s*[+\-]?\d+/,function(B){var B=+B,D=1970+(B-1970)%400;return $.year=B-D,D}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(M,B,D){return B<0&&(D*=-1),_=6e4*(60*+B+ +D),""}).replace(/\.\d+$/,function(M){return $.nano=+(M+c).substr(1,9),""}).split(/\D+/);if(1<N.length?N[1]--:N[1]=0,$.time=_=Date.UTC.apply(Date,N)-(_||0),isNaN(_))throw new TypeError("Invalid Date");return g($)},m.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=g(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},d.getTimeT=function(){var _=g(this),S=Math.floor(_.time/1e3),_=_.year;return _&&(S+=_*t*r/e),S},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return y(g(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(S){var _=this,$=_.toDate(),N={H:function(){return k($.getUTCHours())},L:function(){return v($.getUTCMilliseconds(),3)},M:function(){return k($.getUTCMinutes())},N:function(){return v(_.getNano(),9)},S:function(){return k($.getUTCSeconds())},Y:function(){var M=_.getYear();return 999999<M?"+"+M:9999<M?"+"+v(M,6):0<=M?v(M,4):-999999<=M?"-"+v(-M,6):M},a:function(){return h[$.getUTCDay()]},b:function(){return f[$.getUTCMonth()]},d:function(){return k($.getUTCDate())},e:function(){return function(M){return(9<M?"":" ")+(0|M)}($.getUTCDate())},m:function(){return k($.getUTCMonth()+1)}};return function M(B){return B.replace(/%./g,function(D){var I=D[1],L=p[I],I=N[I];return L?M(L):I?I():D})}(S||u)},d.writeInt64BE=w(0,1,2,3,0,4),d.writeInt64LE=w(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 m;function m(S,_,$){var N=this;if(!(N instanceof m))return new m(S,_,$);N.time=+S||0,N.nano=+_||0,N.year=+$||0,g(N)}function g(S){var _,$,N,M=S.year,B=S.time,D=S.nano,L=((D<0||a<=D)&&(D-=($=Math.floor(D/a))*a,B+=$,$=1),M%e);return(B<-s||s<B||L)&&((_=l(B/o))&&(M+=_*e,B-=_*o),(N=y(B)).setUTCFullYear(L+N.getUTCFullYear()),N=(B=+N)+(_=l((M-=L)/e))*o,_&&-s<=N&&N<=s&&(M-=_*e,B=N),$=1),$&&(S.year=M,S.time=B,S.nano=D),S}function y(S){var _=new Date(0);return _.setTime(S),_}function b(M,N){M=+M||0;var $=l((N=(N|0)*i)/n)+l(M/n),N=N%n+M%n,M=l(N/n);return M&&($+=M,N-=M*n),new m(1e3*N,0,$*e)}function w(S,_,$,N,M,B){return function(L,I){var R=g(this);L=L||new Array(8),T(L,I|=0);var P=Math.floor(R.time/1e3),R=R.year*(t*r/e),A=l(R/i)+l(P/i),R=R%i+P%i,P=Math.floor(R/i);return P&&(A+=P,R-=P*i),D(L,I+M,A),D(L,I+B,R),L};function D(L,I,A){L[I+S]=A>>24&255,L[I+_]=A>>16&255,L[I+$]=A>>8&255,L[I+N]=255&A}}function x(S,_,$,N,M,B){return function(L,I){T(L,I|=0);var A=D(L,I+M);return b(D(L,I+B),A)};function D(L,I){return 16777216*L[I+S]+(L[I+_]<<16|L[I+$]<<8|L[I+N])}}function T(S,_){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<_+8)throw new RangeError("Out of range")}function k(S){return(9<S?"":"0")+(0|S)}function v(S,_){return(c+(0|S)).substr(-_)}}()});var D9=ct((tJ,R9)=>{function gT(){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)}R9.exports=gT});var hy=ct((Pne,fy)=>{"use strict";fy.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var by=ct((yy,wy)=>{"use strict";var xf=hy(),{hasOwnProperty:my}=Object.prototype,{propertyIsEnumerable:XT}=Object,zi=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),jT=yy,py={concatArrays:!1,ignoreUndefined:!1},Ef=r=>{let e=[];for(let t in r)my.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)XT.call(r,n)&&e.push(n)}return e};function Gi(r){return Array.isArray(r)?ZT(r):xf(r)?JT(r):r}function ZT(r){let e=r.slice(0,0);return Ef(r).forEach(t=>{zi(e,t,Gi(r[t]))}),e}function JT(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return Ef(r).forEach(t=>{zi(e,t,Gi(r[t]))}),e}var gy=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?zi(r,o,J3(r[o],e[o],n)):zi(r,o,Gi(e[o])))}),r),ek=(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++)my.call(s,a)&&(i.push(String(a)),s===r?zi(n,o++,s[a]):zi(n,o++,Gi(s[a])));n=gy(n,s,Ef(s).filter(a=>!i.includes(a)),t)}),n};function J3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?ek(r,e,t):!xf(e)||!xf(r)?Gi(e):gy(r,e,Ef(e),t)}wy.exports=function(...r){let e=J3(Gi(py),this!==jT&&this||{},py),t={_:{}};for(let n of r)if(n!==void 0){if(!xf(n))throw new TypeError("`"+n+"` is not an Option Object");t=J3(t,{_:n},e)}return t._}});var vy=ct((Dne,Ey)=>{"use strict";function tk(r){return r>=55296&&r<=56319}function rk(r){return r>=56320&&r<=57343}Ey.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],tk(i)&&rk(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 Ay=ct((Lne,Sy)=>{"use strict";function nk(r){return r>=55296&&r<=56319}function ok(r){return r>=56320&&r<=57343}Sy.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),ok(o)?s!=null&&nk(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 _y=ct((Nne,Iy)=>{"use strict";var sk=vy(),ik=Ay();Iy.exports=sk.bind(null,ik)});var Cy=ct((Bne,ky)=>{"use strict";var ak=_y(),ck=/[\/\?<>\\:\*\|"]/g,lk=/[\x00-\x1f\x80-\x9f]/g,uk=/^\.+$/,dk=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,fk=/[\. ]+$/;function Ty(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(ck,e).replace(lk,e).replace(uk,e).replace(dk,e).replace(fk,e);return ak(t,255)}ky.exports=function(r,e){var t=e&&e.replacement||"",n=Ty(r,t);return t===""?n:Ty(n,"")}});var pw=ct(Wf=>{"use strict";Object.defineProperty(Wf,"__esModule",{value:!0});var wm=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}))}}},qf=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new wm;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)}};Wf.EventIterator=qf;Wf.default=qf});var mw=ct(Wc=>{"use strict";Object.defineProperty(Wc,"__esModule",{value:!0});var bm=pw();Wc.EventIterator=bm.EventIterator;function uC(r,e,t){return new bm.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}Wc.subscribe=uC;Wc.default=bm.EventIterator});var rb=ct((pue,tb)=>{function Or(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}tb.exports=Or;Or.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};Or.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};Or.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};Or.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Or.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Or.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Or.prototype.start=Or.prototype.try;Or.prototype.errors=function(){return this._errors};Or.prototype.attempts=function(){return this._attempts};Or.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],s=o.message,i=(r[s]||0)+1;r[s]=i,i>=t&&(e=o,t=i)}return e}});var nb=ct(Rs=>{var LC=rb();Rs.operation=function(r){var e=Rs.timeouts(r);return new LC(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};Rs.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(s,i){return s-i}),n};Rs.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};Rs.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var s=t[o],i=r[s];r[s]=function(c){var l=Rs.operation(e),d=Array.prototype.slice.call(arguments,1),u=d.pop();d.push(function(f){l.retry(f)||(f&&(arguments[0]=l.mainError()),u.apply(this,arguments))}),l.attempt(function(){c.apply(r,d)})}.bind(r,i),r[s].options=e}}});var sb=ct((gue,ob)=>{ob.exports=nb()});var tP={};Xe(tP,{DEFAULT_SESSION_MAX_PROVIDERS:()=>$2,DEFAULT_SESSION_MIN_PROVIDERS:()=>F2,InsufficientProvidersError:()=>oc,NoRoutersAvailableError:()=>ko,UnknownCodecError:()=>ic,UnknownHashAlgorithmError:()=>sc,createHelia:()=>JC,libp2pDefaults:()=>Qf});var Jm=Symbol.for("@libp2p/connection");var un=Symbol.for("@libp2p/content-routing");var qo=Symbol.for("@libp2p/peer-discovery");var Zc=Symbol.for("@libp2p/peer-id");function Jc(r){return!!r?.[Zc]}var dn=Symbol.for("@libp2p/peer-routing");var Ch="keep-alive";var fn=Symbol.for("@libp2p/transport");var oo;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(oo||(oo={}));var pt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},el=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},tl=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},C=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},Pn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},sa=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var rl=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},Ls=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},Ns=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},hn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},nl=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},Wo=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Be=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},Bs=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},pn=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},ol=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},so=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Rn=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},ue=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},sl=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},Mr=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Ur=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Dn=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},il=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},Os=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},al=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},io=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},Fr=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var V=(r,...e)=>{try{[...e]}catch{}};var pe=class extends EventTarget{#e=new Map;constructor(){super(),V(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 CustomEvent(e,t))}};function cl(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function qt(...r){let e=[];for(let t of r)cl(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 Wt(...r){let e=[];for(let t of r)cl(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 Se=Symbol.for("@libp2p/service-capabilities"),$r=Symbol.for("@libp2p/service-dependencies");function me(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 J(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var ll=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}},Ms=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new ll(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 ll(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 Ph=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function kt(r={}){return Cb(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 Cb(r,e){e=e??{};let t=e.onEnd,n=new Ms,o,s,i,a=J(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((g,y)=>{s=b=>{s=null,n.push(b);try{g(r(n))}catch(w){y(w)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=J()})}},l=g=>s!=null?s(g):(n.push(g),o),d=g=>(n=new Ms,s!=null?s({error:g}):(n.push({error:g}),o)),u=g=>{if(i)return o;if(e?.objectMode!==!0&&g?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:g})},f=g=>i?o:(i=!0,g!=null?d(g):l({done:!0})),h=()=>(n=new Ms,f(),{done:!0}),p=g=>(f(g),{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 g=>{let y=g?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let b,w;y!=null&&(b=new Promise((x,T)=>{w=()=>{T(new Ph)},y.addEventListener("abort",w)}));try{await Promise.race([a.promise,b])}finally{w!=null&&y!=null&&y?.removeEventListener("abort",w)}}},t==null)return o;let m=o;return o={[Symbol.asyncIterator](){return this},next(){return m.next()},throw(g){return m.throw(g),t!=null&&(t(g),t=void 0),{done:!0}},return(){return m.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(g){return m.end(g),t!=null&&(t(g),t=void 0),o},get readableLength(){return m.readableLength},onEmpty:g=>m.onEmpty(g)},o}var Rh=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 ur(r,e,t,n){let o=new Rh(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 ul=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 ke(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new ul(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new ul(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 dl=class{deferred;signal;constructor(e){this.signal=e,this.deferred=J(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new pt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function Pb(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var fl=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=Pb(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,V(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 pt),this.cleanup())}async join(e={}){let t=new dl(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 dr=class extends pe{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 fl(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 pt)}),this.clear()}async onEmpty(e){this.size!==0&&await ur(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await ur(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await ur(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=kt({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 pt("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 zt=class extends dr{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function Rb(r){return r[Symbol.asyncIterator]!=null}function Db(r){if(Rb(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Gt=Db;function ie(r=0){return new Uint8Array(r)}function We(r=0){return new Uint8Array(r)}var Lb=Math.pow(2,7),Nb=Math.pow(2,14),Bb=Math.pow(2,21),Dh=Math.pow(2,28),Lh=Math.pow(2,35),Nh=Math.pow(2,42),Bh=Math.pow(2,49),_e=128,Ct=127;function he(r){if(r<Lb)return 1;if(r<Nb)return 2;if(r<Bb)return 3;if(r<Dh)return 4;if(r<Lh)return 5;if(r<Nh)return 6;if(r<Bh)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Oh(r,e,t=0){switch(he(r)){case 8:e[t++]=r&255|_e,r/=128;case 7:e[t++]=r&255|_e,r/=128;case 6:e[t++]=r&255|_e,r/=128;case 5:e[t++]=r&255|_e,r/=128;case 4:e[t++]=r&255|_e,r>>>=7;case 3:e[t++]=r&255|_e,r>>>=7;case 2:e[t++]=r&255|_e,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function Ob(r,e,t=0){switch(he(r)){case 8:e.set(t++,r&255|_e),r/=128;case 7:e.set(t++,r&255|_e),r/=128;case 6:e.set(t++,r&255|_e),r/=128;case 5:e.set(t++,r&255|_e),r/=128;case 4:e.set(t++,r&255|_e),r>>>=7;case 3:e.set(t++,r&255|_e),r>>>=7;case 2:e.set(t++,r&255|_e),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function Mh(r,e){let t=r[e],n=0;if(n+=t&Ct,t<_e||(t=r[e+1],n+=(t&Ct)<<7,t<_e)||(t=r[e+2],n+=(t&Ct)<<14,t<_e)||(t=r[e+3],n+=(t&Ct)<<21,t<_e)||(t=r[e+4],n+=(t&Ct)*Dh,t<_e)||(t=r[e+5],n+=(t&Ct)*Lh,t<_e)||(t=r[e+6],n+=(t&Ct)*Nh,t<_e)||(t=r[e+7],n+=(t&Ct)*Bh,t<_e))return n;throw new RangeError("Could not decode varint")}function Mb(r,e){let t=r.get(e),n=0;if(n+=t&Ct,t<_e||(t=r.get(e+1),n+=(t&Ct)<<7,t<_e)||(t=r.get(e+2),n+=(t&Ct)<<14,t<_e)||(t=r.get(e+3),n+=(t&Ct)<<21,t<_e)||(t=r.get(e+4),n+=(t&Ct)*Dh,t<_e)||(t=r.get(e+5),n+=(t&Ct)*Lh,t<_e)||(t=r.get(e+6),n+=(t&Ct)*Nh,t<_e)||(t=r.get(e+7),n+=(t&Ct)*Bh,t<_e))return n;throw new RangeError("Could not decode varint")}function Ve(r,e,t=0){return e==null&&(e=We(he(r))),e instanceof Uint8Array?Oh(r,e,t):Ob(r,e,t)}function Ot(r,e=0){return r instanceof Uint8Array?Mh(r,e):Mb(r,e)}function Pe(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=We(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function te(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 t4=Symbol.for("@achingbrain/uint8arraylist");function e4(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 hl(r){return!!r?.[t4]}var ce=class r{bufs;length;[t4]=!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(hl(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(hl(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=e4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=e4(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(hl(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 Pe(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Pe(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(!hl(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=We(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=ie(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=ie(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=ie(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=We(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=ie(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=ie(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=ie(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=ie(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=ie(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(!te(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 pl(r){return r[Symbol.asyncIterator]!=null}var ml=r=>{let e=he(r),t=We(e);return Ve(r,t),ml.bytes=e,t};ml.bytes=0;function Yt(r,e){e=e??{};let t=e.lengthEncoder??ml;function*n(o){let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return pl(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}Yt.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??ml;return new ce(t(r.byteLength),r)};var gl=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},yl=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},wl=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},ia=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var Fb=8,$b=1024*1024*4,zo;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(zo||(zo={}));var Uh=r=>{let e=Ot(r);return Uh.bytes=he(e),e};Uh.bytes=0;function Qt(r,e){let t=new ce,n=zo.LENGTH,o=-1,s=e?.lengthDecoder??Uh,i=e?.maxLengthLength??Fb,a=e?.maxDataLength??$b;function*c(){for(;t.byteLength>0;){if(n===zo.LENGTH)try{if(o=s(t),o<0)throw new gl("Invalid message length");if(o>a)throw new yl("Message length too long");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=zo.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw new wl("Message length length too long");break}throw l}if(n===zo.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=zo.LENGTH}}}return pl(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ia("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ia("Unexpected end of input")}()}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 Vb(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 Us=Vb;function Kb(r){return r[Symbol.asyncIterator]!=null}function Hb(r,e){let t=0;if(Kb(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Us(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 Xt=Hb;function qb(r){return r[Symbol.asyncIterator]!=null}function Wb(...r){let e=[];for(let t of r)qb(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=kt({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 Mt=Wb;function Je(r,...e){if(r==null)throw new Error("Empty pipeline");if(Fh(r)){let n=r;r=()=>n.source}else if(n4(r)||r4(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Fh(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++)Fh(t[n])&&(t[n]=Gb(t[n]));return zb(...t)}var zb=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},r4=r=>r?.[Symbol.asyncIterator]!=null,n4=r=>r?.[Symbol.iterator]!=null,Fh=r=>r==null?!1:r.sink!=null&&r.source!=null,Gb=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=kt({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(r4(s))o=async function*(){yield*s,n.end()};else if(n4(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return Mt(n,o())}return r.source};function Yb(r){return r[Symbol.asyncIterator]!=null}function Qb(r,e){return Yb(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 ao=Qb;var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var aa="/ipfs/bitswap/1.2.0";var $h=new Float32Array([-0]),co=new Uint8Array($h.buffer);function o4(r,e,t){$h[0]=r,e[t]=co[0],e[t+1]=co[1],e[t+2]=co[2],e[t+3]=co[3]}function s4(r,e){return co[0]=r[e],co[1]=r[e+1],co[2]=r[e+2],co[3]=r[e+3],$h[0]}var Vh=new Float64Array([-0]),Pt=new Uint8Array(Vh.buffer);function i4(r,e,t){Vh[0]=r,e[t]=Pt[0],e[t+1]=Pt[1],e[t+2]=Pt[2],e[t+3]=Pt[3],e[t+4]=Pt[4],e[t+5]=Pt[5],e[t+6]=Pt[6],e[t+7]=Pt[7]}function a4(r,e){return Pt[0]=r[e],Pt[1]=r[e+1],Pt[2]=r[e+2],Pt[3]=r[e+3],Pt[4]=r[e+4],Pt[5]=r[e+5],Pt[6]=r[e+6],Pt[7]=r[e+7],Vh[0]}var Xb=BigInt(Number.MAX_SAFE_INTEGER),jb=BigInt(Number.MIN_SAFE_INTEGER),fr=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 Go;if(e<Xb&&e>jb)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>c4&&(o=0n,++n>c4&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Go;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):Go}},Go=new fr(0,0);Go.toBigInt=function(){return 0n};Go.zzEncode=Go.zzDecode=function(){return this};Go.length=function(){return 1};var c4=4294967296n;function l4(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 u4(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 Kh(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 Vr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function xl(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var Hh=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,Vr(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 Vr(this,4);return xl(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Vr(this,4);return xl(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Vr(this,4);let e=s4(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Vr(this,4);let e=a4(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 Vr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return u4(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Vr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Vr(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 fr(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 Vr(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 Vr(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 Vr(this,8);let e=xl(this.buf,this.pos+=4),t=xl(this.buf,this.pos+=4);return new fr(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=Mh(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 qh(r){return new Hh(r instanceof Uint8Array?r:r.subarray())}function re(r,e,t){let n=qh(r);return e.decode(n,void 0,t)}var Xh={};Xe(Xh,{base10:()=>nx});var QR=new Uint8Array(0);function f4(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 Kr(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 h4(r){return new TextEncoder().encode(r)}function p4(r){return new TextDecoder().decode(r)}function Zb(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,g=0,y=0,b=p.length;y!==b&&p[y]===0;)y++,m++;for(var w=(b-y)*d+1>>>0,x=new Uint8Array(w);y!==b;){for(var T=p[y],k=0,v=w-1;(T!==0||k<g)&&v!==-1;v--,k++)T+=256*x[v]>>>0,x[v]=T%a>>>0,T=T/a>>>0;if(T!==0)throw new Error("Non-zero carry");g=k,y++}for(var S=w-g;S!==w&&x[S]===0;)S++;for(var _=c.repeat(m);S<w;++S)_+=r.charAt(x[S]);return _}function f(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 g=0,y=0;p[m]===c;)g++,m++;for(var b=(p.length-m)*l+1>>>0,w=new Uint8Array(b);p[m];){var x=t[p.charCodeAt(m)];if(x===255)return;for(var T=0,k=b-1;(x!==0||T<y)&&k!==-1;k--,T++)x+=a*w[k]>>>0,w[k]=x%256>>>0,x=x/256>>>0;if(x!==0)throw new Error("Non-zero carry");y=T,m++}if(p[m]!==" "){for(var v=b-y;v!==b&&w[v]===0;)v++;for(var S=new Uint8Array(g+(b-v)),_=g;v!==b;)S[_++]=w[v++];return S}}}function h(p){var m=f(p);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var Jb=Zb,ex=Jb,m4=ex;var zh=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")}},Gh=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,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 g4(this,e)}},Yh=class{decoders;constructor(e){this.decoders=e}or(e){return g4(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 g4(r,e){return new Yh({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Qh=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 zh(e,t,n),this.decoder=new Gh(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Fs({name:r,prefix:e,encode:t,decode:n}){return new Qh(r,e,t,n)}function lo({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=m4(t,r);return Fs({prefix:e,name:r,encode:n,decode:s=>Kr(o(s))})}function tx(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 rx(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 je({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Fs({prefix:e,name:r,encode(o){return rx(o,n,t)},decode(o){return tx(o,n,t,r)}})}var nx=lo({prefix:"9",name:"base10",alphabet:"0123456789"});var jh={};Xe(jh,{base16:()=>ox,base16upper:()=>sx});var ox=je({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),sx=je({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Zh={};Xe(Zh,{base2:()=>ix});var ix=je({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Jh={};Xe(Jh,{base256emoji:()=>dx});var y4=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}"),ax=y4.reduce((r,e,t)=>(r[t]=e,r),[]),cx=y4.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function lx(r){return r.reduce((e,t)=>(e+=ax[t],e),"")}function ux(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=cx[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var dx=Fs({prefix:"\u{1F680}",name:"base256emoji",encode:lx,decode:ux});var e0={};Xe(e0,{base32:()=>lt,base32hex:()=>mx,base32hexpad:()=>yx,base32hexpadupper:()=>wx,base32hexupper:()=>gx,base32pad:()=>hx,base32padupper:()=>px,base32upper:()=>fx,base32z:()=>bx});var lt=je({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),fx=je({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),hx=je({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),px=je({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),mx=je({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),gx=je({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),yx=je({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),wx=je({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),bx=je({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var t0={};Xe(t0,{base36:()=>mn,base36upper:()=>xx});var mn=lo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),xx=lo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var r0={};Xe(r0,{base58btc:()=>Ee,base58flickr:()=>Ex});var Ee=lo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Ex=lo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var o0={};Xe(o0,{base64:()=>st,base64pad:()=>vx,base64url:()=>n0,base64urlpad:()=>Sx});var st=je({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),vx=je({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),n0=je({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Sx=je({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var s0={};Xe(s0,{base8:()=>Ax});var Ax=je({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var i0={};Xe(i0,{identity:()=>Ix});var Ix=Fs({prefix:"\0",name:"identity",encode:r=>p4(r),decode:r=>h4(r)});var El={};Xe(El,{code:()=>a0,decode:()=>Px,encode:()=>Cx,name:()=>kx});var _x=new TextEncoder,Tx=new TextDecoder,kx="json",a0=512;function Cx(r){return _x.encode(JSON.stringify(r))}function Px(r){return JSON.parse(Tx.decode(r))}var la={};Xe(la,{code:()=>ca,decode:()=>Lx,encode:()=>Dx,name:()=>Rx});var Rx="raw",ca=85;function Dx(r){return Kr(r)}function Lx(r){return Kr(r)}var u0={};Xe(u0,{identity:()=>Zt});var ze={};Xe(ze,{Digest:()=>Yo,create:()=>jt,decode:()=>Ce,equals:()=>l0,hasCode:()=>Zx});var Nx=x4,w4=128,Bx=127,Ox=~Bx,Mx=Math.pow(2,31);function x4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Mx;)e[t++]=r&255|w4,r/=128;for(;r&Ox;)e[t++]=r&255|w4,r>>>=7;return e[t]=r|0,x4.bytes=t-n+1,e}var Ux=c0,Fx=128,b4=127;function c0(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw c0.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&b4)<<o:(i&b4)*Math.pow(2,o),o+=7}while(i>=Fx);return c0.bytes=s-n,t}var $x=Math.pow(2,7),Vx=Math.pow(2,14),Kx=Math.pow(2,21),Hx=Math.pow(2,28),qx=Math.pow(2,35),Wx=Math.pow(2,42),zx=Math.pow(2,49),Gx=Math.pow(2,56),Yx=Math.pow(2,63),Qx=function(r){return r<$x?1:r<Vx?2:r<Kx?3:r<Hx?4:r<qx?5:r<Wx?6:r<zx?7:r<Gx?8:r<Yx?9:10},Xx={encode:Nx,decode:Ux,encodingLength:Qx},jx=Xx,ua=jx;function da(r,e=0){return[ua.decode(r,e),ua.decode.bytes]}function $s(r,e,t=0){return ua.encode(r,e,t),e}function Vs(r){return ua.encodingLength(r)}function jt(r,e){let t=e.byteLength,n=Vs(r),o=n+Vs(t),s=new Uint8Array(o+t);return $s(r,s,0),$s(t,s,n),s.set(e,o),new Yo(r,t,e,s)}function Ce(r){let e=Kr(r),[t,n]=da(e),[o,s]=da(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Yo(t,o,i,e)}function l0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&f4(r.bytes,t.bytes)}}var Yo=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function Zx(r,e){return r.code===e}var E4=0,Jx="identity",v4=Kr;function eE(r){return jt(E4,v4(r))}var Zt={code:E4,name:Jx,encode:v4,digest:eE};var h0={};Xe(h0,{sha256:()=>ut,sha512:()=>Sl});function f0({name:r,code:e,encode:t}){return new d0(r,e,t)}var d0=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?jt(this.code,t):t.then(n=>jt(this.code,n))}else throw Error("Unknown type, must be binary type")}};function A4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var ut=f0({name:"sha2-256",code:18,encode:A4("SHA-256")}),Sl=f0({name:"sha2-512",code:19,encode:A4("SHA-512")});function I4(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return rE(t,p0(r),e??Ee.encoder);default:return nE(t,p0(r),e??lt.encoder)}}var _4=new WeakMap;function p0(r){let e=_4.get(r);if(e==null){let t=new Map;return _4.set(r,t),t}return e}var Z=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!==fa)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==oE)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=jt(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&&l0(e.multihash,n.multihash)}toString(e){return I4(this,e)}toJSON(){return{"/":I4(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??T4(n,o,s.bytes))}else if(t[sE]===!0){let{version:n,multihash:o,code:s}=t,i=Ce(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!==fa)throw new Error(`Version 0 CID must use dag-pb (code: ${fa}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=T4(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,fa,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=Kr(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 Yo(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]=da(e.subarray(t));return t+=f,u},o=n(),s=fa;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]=tE(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 p0(s).set(n,e),s}};function tE(r,e){switch(r[0]){case"Q":{let t=e??Ee;return[Ee.prefix,t.decode(`${Ee.prefix}${r}`)]}case Ee.prefix:{let t=e??Ee;return[Ee.prefix,t.decode(r)]}case lt.prefix:{let t=e??lt;return[lt.prefix,t.decode(r)]}case mn.prefix:{let t=e??mn;return[mn.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 rE(r,e,t){let{prefix:n}=t;if(n!==Ee.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 nE(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 fa=112,oE=18;function T4(r,e,t){let n=Vs(r),o=n+Vs(e),s=new Uint8Array(o+t.byteLength);return $s(r,s,0),$s(e,s,n),s.set(t,o),s}var sE=Symbol.for("@ipld/js-cid/CID");var Nn={...i0,...Zh,...s0,...Xh,...jh,...e0,...t0,...r0,...o0,...Jh},DD={...h0,...u0};function C4(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var k4=C4("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),m0=C4("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=We(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),iE={utf8:k4,"utf-8":k4,hex:Nn.base16,latin1:m0,ascii:m0,binary:m0,...Nn},Al=iE;function O(r,e="utf8"){let t=Al[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function g0(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return We(i);o+i>e&&(n=We(e),o=0);let a=n.subarray(o,o+=i);return o&7&&(o=(o|7)+1),a}}var Qo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function y0(){}var b0=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},aE=g0();function cE(r){return globalThis.Buffer!=null?We(r):aE(r)}var pa=class{len;head;tail;states;constructor(){this.len=0,this.head=new Qo(y0,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Qo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new x0((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(Il,10,fr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=fr.fromBigInt(e);return this._push(Il,t.length(),t)}uint64Number(e){return this._push(Oh,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=fr.fromBigInt(e).zzEncode();return this._push(Il,t.length(),t)}sint64Number(e){let t=fr.fromNumber(e).zzEncode();return this._push(Il,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(w0,1,e?1:0)}fixed32(e){return this._push(ha,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=fr.fromBigInt(e);return this._push(ha,4,t.lo)._push(ha,4,t.hi)}fixed64Number(e){let t=fr.fromNumber(e);return this._push(ha,4,t.lo)._push(ha,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(o4,4,e)}double(e){return this._push(i4,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(w0,1,0):this.uint32(t)._push(uE,t,e)}string(e){let t=l4(e);return t!==0?this.uint32(t)._push(Kh,t,e):this._push(w0,1,0)}fork(){return this.states=new b0(this),this.head=this.tail=new Qo(y0,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 Qo(y0,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=cE(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function w0(r,e,t){e[t]=r&255}function lE(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var x0=class extends Qo{next;constructor(e,t){super(lE,e,t),this.next=void 0}};function Il(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 ha(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 uE(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(pa.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(dE,e,r),this},pa.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(fE,e,r),this});function dE(r,e,t){e.set(r,t)}function fE(r,e,t){r.length<40?Kh(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(O(r),t)}function E0(){return new pa}function ne(r,e){let t=E0();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Ks;(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"})(Ks||(Ks={}));function _l(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 _l("enum",Ks.VARINT,t,n)}function oe(r,e){return _l("message",Ks.LENGTH_DELIMITED,r,e)}var Oe=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},ma=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var et;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(et||(et={}));var v0;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(v0||(v0={}));(function(r){r.codec=()=>Ke(v0)})(et||(et={}));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.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:ie(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)})(Hs||(Hs={}));var Tl;(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),Hs.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 Oe('Decode error - map field "entries" had too many elements');s.entries.push(Hs.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)})(Tl||(Tl={}));var qs;(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:ie(0),data:ie(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)})(qs||(qs={}));var Er;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(Er||(Er={}));var kl;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(kl||(kl={}));(function(r){r.codec=()=>Ke(kl)})(Er||(Er={}));var Ws;(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&&kl[t.type]!==0&&(n.uint32(16),Er.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:ie(0),type:Er.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=Er.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)})(Ws||(Ws={}));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),Tl.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),qs.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),Ws.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=Tl.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 Oe('Decode error - map field "blocks" had too many elements');s.blocks.push(qs.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 Oe('Decode error - map field "blockPresences" had too many elements');s.blockPresences.push(Ws.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 P4(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 Cl=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var hE=4193648,pE=hE+16;function*R4(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}=S0(o,l.blocks,a,e,d,mE);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=S0(n,l.blockPresences,i,e,d,gE)),i+=u,d=h;let m=f;if({added:u,hasMore:f,newSize:h}=S0(t,l.wantlist.entries,s,e,d,yE),s+=u,d=h,c=!p&&!m&&!f,c||(l.wantlist.full=!1),yield Xo.encode(l),c)break}}function S0(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>pE)throw new Cl("Cannot send block as after encoding it is over the max message size");let u=o+d;if(u>n){a=!0;break}e.push(l),i++,o=u}return{hasMore:a,added:i,newSize:o}}function mE(r){return A0(3,qs.encode(r))}function gE(r){return A0(4,Ws.encode(r))}function yE(r){return A0(1,Hs.encode(r))}function A0(r,e){let t=he(r),n=he(e.byteLength);return t+n+e.byteLength}var Pl=class extends pe{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnLimitedConnections;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??[aa],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.runOnLimitedConnections=t.runOnLimitedConnections??!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 zt({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,runOnLimitedConnection:this.runOnLimitedConnections});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 Mr(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},s=AbortSignal.timeout(this.messageReceiveTimeout);V(1/0,s),s.addEventListener("abort",o),await t.closeWrite(),await Je(t,i=>Qt(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),V(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,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await Gt(Xt(ao(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=P4(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 C("No message to send");this.log("sendMessage to %p",e),s?.onProgress?.(new H("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,aa,s);await a.closeRead();try{await Je(R4(i,this.maxOutgoingMessageSize),c=>Yt(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 Ur("Network isn't running");t?.onProgress?.(new H("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),ur(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(aa))return!0;throw new Rn(`${e} did not support ${aa}`)}})]);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 uo(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function _E(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function zs(r,...e){if(!_E(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");uo(r.outputLen),uo(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 D4(r,e){zs(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Zo=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var Jo=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Hr=(r,e)=>r<<32-e|r>>>e,Rl=(r,e)=>r<<e|r>>>32-e>>>0,NL=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var TE=async()=>{};async function L4(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 TE(),n+=s)}}function N4(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function qr(r){return typeof r=="string"&&(r=N4(r)),zs(r),r}function I0(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];zs(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 Ys=class{clone(){return this._cloneInto()}},kE={}.toString;function B4(r,e){if(e!==void 0&&kE.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Qs(r){let e=n=>r().update(qr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function es(r=32){if(Zo&&typeof Zo.getRandomValues=="function")return Zo.getRandomValues(new Uint8Array(r));if(Zo&&typeof Zo.randomBytes=="function")return Zo.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function CE(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 Dl=(r,e,t)=>r&e^~r&t,Ll=(r,e,t)=>r&e^r&t^e&t,fo=class extends Ys{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=qr(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),D4(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;CE(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 Nl=BigInt(4294967295),_0=BigInt(32);function O4(r,e=!1){return e?{h:Number(r&Nl),l:Number(r>>_0&Nl)}:{h:Number(r>>_0&Nl)|0,l:Number(r&Nl)|0}}function PE(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}=O4(r[o],e);[t[o],n[o]]=[s,i]}return[t,n]}var RE=(r,e)=>BigInt(r>>>0)<<_0|BigInt(e>>>0),DE=(r,e,t)=>r>>>t,LE=(r,e,t)=>r<<32-t|e>>>t,NE=(r,e,t)=>r>>>t|e<<32-t,BE=(r,e,t)=>r<<32-t|e>>>t,OE=(r,e,t)=>r<<64-t|e>>>t-32,ME=(r,e,t)=>r>>>t-32|e<<64-t,UE=(r,e)=>e,FE=(r,e)=>r,$E=(r,e,t)=>r<<t|e>>>32-t,VE=(r,e,t)=>e<<t|r>>>32-t,KE=(r,e,t)=>e<<t-32|r>>>64-t,HE=(r,e,t)=>r<<t-32|e>>>64-t;function qE(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var WE=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),zE=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,GE=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),YE=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,QE=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),XE=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var jE={fromBig:O4,split:PE,toBig:RE,shrSH:DE,shrSL:LE,rotrSH:NE,rotrSL:BE,rotrBH:OE,rotrBL:ME,rotr32H:UE,rotr32L:FE,rotlSH:$E,rotlSL:VE,rotlBH:KE,rotlBL:HE,add:qE,add3L:WE,add3H:zE,add4L:GE,add4H:YE,add5H:XE,add5L:QE},de=jE;var[ZE,JE]=de.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))),ho=new Uint32Array(80),po=new Uint32Array(80),T0=class extends fo{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:m,Hl:g}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,h,p,m,g]}set(e,t,n,o,s,i,a,c,l,d,u,f,h,p,m,g){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=m|0,this.Hl=g|0}process(e,t){for(let w=0;w<16;w++,t+=4)ho[w]=e.getUint32(t),po[w]=e.getUint32(t+=4);for(let w=16;w<80;w++){let x=ho[w-15]|0,T=po[w-15]|0,k=de.rotrSH(x,T,1)^de.rotrSH(x,T,8)^de.shrSH(x,T,7),v=de.rotrSL(x,T,1)^de.rotrSL(x,T,8)^de.shrSL(x,T,7),S=ho[w-2]|0,_=po[w-2]|0,$=de.rotrSH(S,_,19)^de.rotrBH(S,_,61)^de.shrSH(S,_,6),N=de.rotrSL(S,_,19)^de.rotrBL(S,_,61)^de.shrSL(S,_,6),M=de.add4L(v,N,po[w-7],po[w-16]),B=de.add4H(M,k,$,ho[w-7],ho[w-16]);ho[w]=B|0,po[w]=M|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:m,Gl:g,Hh:y,Hl:b}=this;for(let w=0;w<80;w++){let x=de.rotrSH(u,f,14)^de.rotrSH(u,f,18)^de.rotrBH(u,f,41),T=de.rotrSL(u,f,14)^de.rotrSL(u,f,18)^de.rotrBL(u,f,41),k=u&h^~u&m,v=f&p^~f&g,S=de.add5L(b,T,v,JE[w],po[w]),_=de.add5H(S,y,x,k,ZE[w],ho[w]),$=S|0,N=de.rotrSH(n,o,28)^de.rotrBH(n,o,34)^de.rotrBH(n,o,39),M=de.rotrSL(n,o,28)^de.rotrBL(n,o,34)^de.rotrBL(n,o,39),B=n&s^n&a^s&a,D=o&i^o&c^i&c;y=m|0,b=g|0,m=h|0,g=p|0,h=u|0,p=f|0,{h:u,l:f}=de.add(l|0,d|0,_|0,$|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let L=de.add3L($,M,D);n=de.add3H(L,_,N,B),o=L|0}({h:n,l:o}=de.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=de.add(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=de.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=de.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=de.add(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=de.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:m,l:g}=de.add(this.Gh|0,this.Gl|0,m|0,g|0),{h:y,l:b}=de.add(this.Hh|0,this.Hl|0,y|0,b|0),this.set(n,o,s,i,a,c,l,d,u,f,h,p,m,g,y,b)}roundClean(){ho.fill(0),po.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 mo=Qs(()=>new T0);var Ol={};Xe(Ol,{aInRange:()=>bt,abool:()=>Wr,abytes:()=>Xs,bitGet:()=>sv,bitLen:()=>D0,bitMask:()=>ya,bitSet:()=>iv,bytesToHex:()=>On,bytesToNumberBE:()=>Mn,bytesToNumberLE:()=>zr,concatBytes:()=>Fn,createHmacDrbg:()=>L0,ensureBytes:()=>Me,equalBytes:()=>nv,hexToBytes:()=>rs,hexToNumber:()=>R0,inRange:()=>ga,isBytes:()=>go,memoized:()=>ns,notImplemented:()=>cv,numberToBytesBE:()=>yo,numberToBytesLE:()=>Un,numberToHexUnpadded:()=>ts,numberToVarBytesBE:()=>rv,utf8ToBytes:()=>ov,validateObject:()=>vr});var P0=BigInt(0),Bl=BigInt(1),ev=BigInt(2);function go(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Xs(r){if(!go(r))throw new Error("Uint8Array expected")}function Wr(r,e){if(typeof e!="boolean")throw new Error(`${r} must be valid boolean, got "${e}".`)}var tv=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function On(r){Xs(r);let e="";for(let t=0;t<r.length;t++)e+=tv[r[t]];return e}function ts(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function R0(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var Bn={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function M4(r){if(r>=Bn._0&&r<=Bn._9)return r-Bn._0;if(r>=Bn._A&&r<=Bn._F)return r-(Bn._A-10);if(r>=Bn._a&&r<=Bn._f)return r-(Bn._a-10)}function rs(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=M4(r.charCodeAt(s)),a=M4(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 Mn(r){return R0(On(r))}function zr(r){return Xs(r),R0(On(Uint8Array.from(r).reverse()))}function yo(r,e){return rs(r.toString(16).padStart(e*2,"0"))}function Un(r,e){return yo(r,e).reverse()}function rv(r){return rs(ts(r))}function Me(r,e,t){let n;if(typeof e=="string")try{n=rs(e)}catch(s){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${s}`)}else if(go(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 Fn(...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 nv(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 ov(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}var k0=r=>typeof r=="bigint"&&P0<=r;function ga(r,e,t){return k0(r)&&k0(e)&&k0(t)&&e<=r&&r<t}function bt(r,e,t,n){if(!ga(e,t,n))throw new Error(`expected valid ${r}: ${t} <= n < ${n}, got ${typeof e} ${e}`)}function D0(r){let e;for(e=0;r>P0;r>>=Bl,e+=1);return e}function sv(r,e){return r>>BigInt(e)&Bl}function iv(r,e,t){return r|(t?Bl:P0)<<BigInt(e)}var ya=r=>(ev<<BigInt(r-1))-Bl,C0=r=>new Uint8Array(r),U4=r=>Uint8Array.from(r);function L0(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=C0(r),o=C0(r),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...u)=>t(o,n,...u),c=(u=C0())=>{o=a(U4([0]),u),n=a(),u.length!==0&&(o=a(U4([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 Fn(...f)};return(u,f)=>{i(),c(u);let h;for(;!(h=f(l()));)c();return i(),h}}var av={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"||go(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 vr(r,e,t={}){let n=(o,s,i)=>{let a=av[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 cv=()=>{throw new Error("not implemented")};function ns(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),os=BigInt(2),lv=BigInt(3),N0=BigInt(4),F4=BigInt(5),$4=BigInt(8),uv=BigInt(9),dv=BigInt(16);function Ae(r,e){let t=r%e;return t>=dt?t:e+t}function B0(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 Ue(r,e,t){let n=r;for(;e-- >dt;)n*=n,n%=t;return n}function Ml(r,e){if(r===dt||e<=dt)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=Ae(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 Ae(o,e)}function fv(r){let e=(r-He)/os,t,n,o;for(t=r-He,n=0;t%os===dt;t/=os,n++);for(o=os;o<r&&B0(o,e,r)!==r-He;o++);if(n===1){let i=(r+He)/N0;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)/os;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 m=a.sqr(f);h<l&&!a.eql(m,a.ONE);h++)m=a.sqr(m);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 hv(r){if(r%N0===lv){let e=(r+He)/N0;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%$4===F4){let e=(r-F4)/$4;return function(n,o){let s=n.mul(o,os),i=n.pow(s,e),a=n.mul(o,i),c=n.mul(n.mul(a,os),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%dv,fv(r)}var V4=(r,e)=>(Ae(r,e)&He)===He,pv=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function O0(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=pv.reduce((n,o)=>(n[o]="function",n),e);return vr(r,t)}function mv(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 gv(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 M0(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function wo(r,e,t=!1,n={}){if(r<=dt)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:s}=M0(r,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=hv(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:s,MASK:ya(o),ZERO:dt,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 dt<=c&&c<r},is0:c=>c===dt,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)=>mv(a,c,l),div:(c,l)=>Ae(c*Ml(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Ml(c,r),sqrt:n.sqrt||(c=>i(a,c)),invertBatch:c=>gv(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?Un(c,s):yo(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return t?zr(c):Mn(c)}});return Object.freeze(a)}function K4(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 U0(r){let e=K4(r);return e+Math.ceil(e/2)}function H4(r,e,t=!1){let n=r.length,o=K4(e),s=U0(e);if(n<16||n<s||n>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let i=t?Mn(r):zr(r),a=Ae(i,e-He)+He;return t?Un(a,o):yo(a,o)}var wv=BigInt(0),F0=BigInt(1),$0=new WeakMap,q4=new WeakMap;function Ul(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>wv;)i&F0&&(a=a.add(c)),c=c.double(),i>>=F0;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 m=0;m<c;m++){let g=m*l,y=Number(a&f);a>>=p,y>l&&(y-=h,a+=F0);let b=g,w=g+Math.abs(y)-1,x=m%2!==0,T=y<0;y===0?u=u.add(t(x,i[b])):d=d.add(t(T,i[w]))}return{p:d,f:u}},wNAFCached(s,i,a){let c=q4.get(s)||1,l=$0.get(s);return l||(l=this.precomputeWindow(s,c),c!==1&&$0.set(s,a(l))),this.wNAF(c,l,i)},setWindowSize(s,i){n(i),q4.set(s,i),$0.delete(s)}}}function Fl(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=D0(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 wa(r){return O0(r.Fp),vr(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...M0(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Gr=BigInt(0),Jt=BigInt(1),$l=BigInt(2),bv=BigInt(8),xv={zip215:!0};function Ev(r){let e=wa(r);return vr(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function W4(r){let e=Ev(r),{Fp:t,n,prehash:o,hash:s,randomBytes:i,nByteLength:a,h:c}=e,l=$l<<BigInt(a*8)-Jt,d=t.create,u=wo(e.n,e.nBitLength),f=e.uvRatio||((I,A)=>{try{return{isValid:!0,value:t.sqrt(I*t.inv(A))}}catch{return{isValid:!1,value:Gr}}}),h=e.adjustScalarBytes||(I=>I),p=e.domain||((I,A,R)=>{if(Wr("phflag",R),A.length||R)throw new Error("Contexts/pre-hash are not supported");return I});function m(I,A){bt("coordinate "+I,A,Gr,l)}function g(I){if(!(I instanceof w))throw new Error("ExtendedPoint expected")}let y=ns((I,A)=>{let{ex:R,ey:P,ez:q}=I,z=I.is0();A==null&&(A=z?bv:t.inv(q));let j=d(R*A),ae=d(P*A),le=d(q*A);if(z)return{x:Gr,y:Jt};if(le!==Jt)throw new Error("invZ was invalid");return{x:j,y:ae}}),b=ns(I=>{let{a:A,d:R}=e;if(I.is0())throw new Error("bad point: ZERO");let{ex:P,ey:q,ez:z,et:j}=I,ae=d(P*P),le=d(q*q),fe=d(z*z),xe=d(fe*fe),Le=d(ae*A),Ne=d(fe*d(Le+le)),$e=d(xe+d(R*d(ae*le)));if(Ne!==$e)throw new Error("bad point: equation left != right (1)");let Bt=d(P*q),at=d(z*j);if(Bt!==at)throw new Error("bad point: equation left != right (2)");return!0});class w{constructor(A,R,P,q){this.ex=A,this.ey=R,this.ez=P,this.et=q,m("x",A),m("y",R),m("z",P),m("t",q),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(A){if(A instanceof w)throw new Error("extended point not allowed");let{x:R,y:P}=A||{};return m("x",R),m("y",P),new w(R,P,Jt,d(R*P))}static normalizeZ(A){let R=t.invertBatch(A.map(P=>P.ez));return A.map((P,q)=>P.toAffine(R[q])).map(w.fromAffine)}static msm(A,R){return Fl(w,u,A,R)}_setWindowSize(A){k.setWindowSize(this,A)}assertValidity(){b(this)}equals(A){g(A);let{ex:R,ey:P,ez:q}=this,{ex:z,ey:j,ez:ae}=A,le=d(R*ae),fe=d(z*q),xe=d(P*ae),Le=d(j*q);return le===fe&&xe===Le}is0(){return this.equals(w.ZERO)}negate(){return new w(d(-this.ex),this.ey,this.ez,d(-this.et))}double(){let{a:A}=e,{ex:R,ey:P,ez:q}=this,z=d(R*R),j=d(P*P),ae=d($l*d(q*q)),le=d(A*z),fe=R+P,xe=d(d(fe*fe)-z-j),Le=le+j,Ne=Le-ae,$e=le-j,Bt=d(xe*Ne),at=d(Le*$e),Ht=d(xe*$e),Cn=d(Ne*Le);return new w(Bt,at,Cn,Ht)}add(A){g(A);let{a:R,d:P}=e,{ex:q,ey:z,ez:j,et:ae}=this,{ex:le,ey:fe,ez:xe,et:Le}=A;if(R===BigInt(-1)){let Wm=d((z-q)*(fe+le)),zm=d((z+q)*(fe-le)),kh=d(zm-Wm);if(kh===Gr)return this.double();let Gm=d(j*$l*Le),Ym=d(ae*$l*xe),Qm=Ym+Gm,Xm=zm+Wm,jm=Ym-Gm,bb=d(Qm*kh),xb=d(Xm*jm),Eb=d(Qm*jm),vb=d(kh*Xm);return new w(bb,xb,vb,Eb)}let Ne=d(q*le),$e=d(z*fe),Bt=d(ae*P*Le),at=d(j*xe),Ht=d((q+z)*(le+fe)-Ne-$e),Cn=at-Bt,na=at+Bt,oa=d($e-R*Ne),mb=d(Ht*Cn),gb=d(na*oa),yb=d(Ht*oa),wb=d(Cn*na);return new w(mb,gb,wb,yb)}subtract(A){return this.add(A.negate())}wNAF(A){return k.wNAFCached(this,A,w.normalizeZ)}multiply(A){let R=A;bt("scalar",R,Jt,n);let{p:P,f:q}=this.wNAF(R);return w.normalizeZ([P,q])[0]}multiplyUnsafe(A){let R=A;return bt("scalar",R,Gr,n),R===Gr?T:this.equals(T)||R===Jt?this:this.equals(x)?this.wNAF(R).p:k.unsafeLadder(this,R)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return k.unsafeLadder(this,n).is0()}toAffine(A){return y(this,A)}clearCofactor(){let{h:A}=e;return A===Jt?this:this.multiplyUnsafe(A)}static fromHex(A,R=!1){let{d:P,a:q}=e,z=t.BYTES;A=Me("pointHex",A,z),Wr("zip215",R);let j=A.slice(),ae=A[z-1];j[z-1]=ae&-129;let le=zr(j),fe=R?l:t.ORDER;bt("pointHex.y",le,Gr,fe);let xe=d(le*le),Le=d(xe-Jt),Ne=d(P*xe-q),{isValid:$e,value:Bt}=f(Le,Ne);if(!$e)throw new Error("Point.fromHex: invalid y coordinate");let at=(Bt&Jt)===Jt,Ht=(ae&128)!==0;if(!R&&Bt===Gr&&Ht)throw new Error("Point.fromHex: x=0 and x_0=1");return Ht!==at&&(Bt=d(-Bt)),w.fromAffine({x:Bt,y:le})}static fromPrivateKey(A){return _(A).point}toRawBytes(){let{x:A,y:R}=this.toAffine(),P=Un(R,t.BYTES);return P[P.length-1]|=A&Jt?128:0,P}toHex(){return On(this.toRawBytes())}}w.BASE=new w(e.Gx,e.Gy,Jt,d(e.Gx*e.Gy)),w.ZERO=new w(Gr,Jt,Jt,Gr);let{BASE:x,ZERO:T}=w,k=Ul(w,a*8);function v(I){return Ae(I,n)}function S(I){return v(zr(I))}function _(I){let A=a;I=Me("private key",I,A);let R=Me("hashed private key",s(I),2*A),P=h(R.slice(0,A)),q=R.slice(A,2*A),z=S(P),j=x.multiply(z),ae=j.toRawBytes();return{head:P,prefix:q,scalar:z,point:j,pointBytes:ae}}function $(I){return _(I).pointBytes}function N(I=new Uint8Array,...A){let R=Fn(...A);return S(s(p(R,Me("context",I),!!o)))}function M(I,A,R={}){I=Me("message",I),o&&(I=o(I));let{prefix:P,scalar:q,pointBytes:z}=_(A),j=N(R.context,P,I),ae=x.multiply(j).toRawBytes(),le=N(R.context,ae,z,I),fe=v(j+le*q);bt("signature.s",fe,Gr,n);let xe=Fn(ae,Un(fe,t.BYTES));return Me("result",xe,a*2)}let B=xv;function D(I,A,R,P=B){let{context:q,zip215:z}=P,j=t.BYTES;I=Me("signature",I,2*j),A=Me("message",A),z!==void 0&&Wr("zip215",z),o&&(A=o(A));let ae=zr(I.slice(j,2*j)),le,fe,xe;try{le=w.fromHex(R,z),fe=w.fromHex(I.slice(0,j),z),xe=x.multiplyUnsafe(ae)}catch{return!1}if(!z&&le.isSmallOrder())return!1;let Le=N(q,fe.toRawBytes(),le.toRawBytes(),A);return fe.add(le.multiplyUnsafe(Le)).subtract(xe).clearCofactor().equals(w.ZERO)}return x._setWindowSize(8),{CURVE:e,getPublicKey:$,sign:M,verify:D,ExtendedPoint:w,utils:{getExtendedPublicKey:_,randomPrivateKey:()=>i(t.BYTES),precompute(I=8,A=w.BASE){return A._setWindowSize(I),A.multiply(BigInt(3)),A}}}}var js=BigInt(0),V0=BigInt(1);function vv(r){return vr(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function z4(r){let e=vv(r),{P:t}=e,n=b=>Ae(b,t),o=e.montgomeryBits,s=Math.ceil(o/8),i=e.nByteLength,a=e.adjustScalarBytes||(b=>b),c=e.powPminus2||(b=>B0(b,t-BigInt(2),t));function l(b,w,x){let T=n(b*(w-x));return w=n(w-T),x=n(x+T),[w,x]}let d=(e.a-BigInt(2))/BigInt(4);function u(b,w){bt("u",b,js,t),bt("scalar",w,js,t);let x=w,T=b,k=V0,v=js,S=b,_=V0,$=js,N;for(let B=BigInt(o-1);B>=js;B--){let D=x>>B&V0;$^=D,N=l($,k,S),k=N[0],S=N[1],N=l($,v,_),v=N[0],_=N[1],$=D;let L=k+v,I=n(L*L),A=k-v,R=n(A*A),P=I-R,q=S+_,z=S-_,j=n(z*L),ae=n(q*A),le=j+ae,fe=j-ae;S=n(le*le),_=n(T*n(fe*fe)),k=n(I*R),v=n(P*(I+n(d*P)))}N=l($,k,S),k=N[0],S=N[1],N=l($,v,_),v=N[0],_=N[1];let M=c(v);return n(k*M)}function f(b){return Un(n(b),s)}function h(b){let w=Me("u coordinate",b,s);return i===32&&(w[31]&=127),zr(w)}function p(b){let w=Me("scalar",b),x=w.length;if(x!==s&&x!==i)throw new Error(`Expected ${s} or ${i} bytes, got ${x}`);return zr(a(w))}function m(b,w){let x=h(w),T=p(b),k=u(x,T);if(k===js)throw new Error("Invalid private or public key received");return f(k)}let g=f(e.Gu);function y(b){return m(b,g)}return{scalarMult:m,scalarMultBase:y,getSharedSecret:(b,w)=>m(b,w),getPublicKey:b=>y(b),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:g}}var ba=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),G4=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),aN=BigInt(0),Sv=BigInt(1),Y4=BigInt(2),Av=BigInt(3),Iv=BigInt(5),_v=BigInt(8);function Q4(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=ba,a=r*r%s*r%s,c=Ue(a,Y4,s)*a%s,l=Ue(c,Sv,s)*r%s,d=Ue(l,Iv,s)*l%s,u=Ue(d,e,s)*d%s,f=Ue(u,t,s)*u%s,h=Ue(f,n,s)*f%s,p=Ue(h,o,s)*h%s,m=Ue(p,o,s)*h%s,g=Ue(m,e,s)*d%s;return{pow_p_5_8:Ue(g,Y4,s)*r%s,b2:a}}function X4(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function Tv(r,e){let t=ba,n=Ae(e*e*e,t),o=Ae(n*n*e,t),s=Q4(r*o).pow_p_5_8,i=Ae(r*n*s,t),a=Ae(e*i*i,t),c=i,l=Ae(i*G4,t),d=a===r,u=a===Ae(-r,t),f=a===Ae(-r*G4,t);return d&&(i=c),(u||f)&&(i=l),V4(i,t)&&(i=Ae(-i,t)),{isValid:d||u,value:i}}var kv=wo(ba,void 0,!0),Cv={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:kv,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:_v,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:mo,randomBytes:es,adjustScalarBytes:X4,uvRatio:Tv},xa=W4(Cv);var Ea=z4({P:ba,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=ba,{pow_p_5_8:t,b2:n}=Q4(r);return Ae(Ue(t,Av,e)*n,e)},adjustScalarBytes:X4,randomBytes:es});var Zs=32,gn=64,K0=32;function j4(){let r=xa.utils.randomPrivateKey(),e=xa.getPublicKey(r);return{privateKey:Pv(r,e),publicKey:e}}function Z4(r,e){let t=r.subarray(0,K0);return xa.sign(e instanceof Uint8Array?e:e.subarray(),t)}function J4(r,e,t){return xa.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function Pv(r,e){let t=new Uint8Array(gn);for(let n=0;n<K0;n++)t[n]=r[n],t[K0+n]=e[n];return t}var va=class{type="Ed25519";raw;constructor(e){this.raw=ei(e,Zs)}toMultihash(){return Zt.digest(Rt(this))}toCID(){return Z.createV1(114,this.toMultihash())}toString(){return Ee.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}verify(e,t){return J4(this.raw,t,e)}},Js=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=ei(e,gn),this.publicKey=new va(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return Z4(this.raw,e)}};function H0(r){if(r.length>gn){r=ei(r,gn+Zs);let n=r.subarray(0,gn),o=r.subarray(gn,r.length);return new Js(n,o)}r=ei(r,gn);let e=r.subarray(0,gn),t=r.subarray(Zs);return new Js(e,t)}function q0(r){return r=ei(r,Zs),new va(r)}async function t6(){let{privateKey:r,publicKey:e}=j4();return new Js(r,e)}function ei(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new C(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var Ge;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1"})(Ge||(Ge={}));var W0;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(W0||(W0={}));(function(r){r.codec=()=>Ke(W0)})(Ge||(Ge={}));var yn;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ge.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(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.Type=Ge.codec().decode(t);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)})(yn||(yn={}));var Sa;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ge.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(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.Type=Ge.codec().decode(t);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)})(Sa||(Sa={}));var Na={};Xe(Na,{MAX_RSA_KEY_SIZE:()=>Pu,generateRSAKeyPair:()=>r2,jwkToJWKKeyPair:()=>j6,jwkToPkcs1:()=>Wv,jwkToPkix:()=>e2,jwkToRSAPrivateKey:()=>X6,pkcs1ToJwk:()=>Y6,pkcs1ToRSAPrivateKey:()=>Ru,pkixToJwk:()=>Q6,pkixToRSAPublicKey:()=>t2});var Rv=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),z0=class extends fo{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=Hr(f,7)^Hr(f,18)^f>>>3,m=Hr(h,17)^Hr(h,19)^h>>>10;xo[u]=m+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=Hr(a,6)^Hr(a,11)^Hr(a,25),h=d+f+Dl(a,c,l)+Rv[u]+xo[u]|0,m=(Hr(n,2)^Hr(n,13)^Hr(n,22))+Ll(n,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=n,n=h+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(){xo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Sr=Qs(()=>new z0);var ge=Tt(n6());function ss(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 Eo(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 Hl(...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 Y0(){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=ss(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,ss(s,8)-n}function o6(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=Eo(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Eo(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 s6(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 er(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 TN=Math.log(2);function ql(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function Q0(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 Wn(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 Ia=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return Q0(this.items)}},Aa=[new Uint8Array([1])],i6="0123456789";var ni="",Yr=new ArrayBuffer(0),X0=new Uint8Array(0),_a="EndOfContent",c6="OCTET STRING",l6="BIT STRING";function zn(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):X0}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(!Wn(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 Vn=class{constructor({blockLength:e=0,error:t=ni,warnings:n=[],valueBeforeDecode:o=X0}={}){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)}}};Vn.NAME="baseBlock";var Dt=class extends Vn{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 Wl=class extends zn(Vn){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):X0,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=Eo(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(!Wn(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=ss(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}}};Wl.NAME="identificationBlock";var zl=class extends Vn{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(!Wn(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=ss(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=Eo(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}}};zl.NAME="lengthBlock";var G={},xt=class extends Vn{constructor({name:e=ni,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new Wl(o),this.lenBlock=new zl(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 Ia;t||u6(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 s6(t,n)}};xt.NAME="BaseBlock";function u6(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)u6(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var Gl=class extends xt{constructor({value:e=ni,...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}'`}};Gl.NAME="BaseStringBlock";var Yl=class extends zn(Dt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Yl.NAME="PrimitiveValueBlock";var d6,Ql=class extends xt{constructor(e={}){super(e,Yl),this.idBlock.isConstructed=!1}};d6=Ql;G.Primitive=d6;Ql.NAME="PRIMITIVE";function $v(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 ku(r,e=0,t=r.length){let n=e,o=new xt({},Dt),s=new Vn;if(!Wn(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=xt;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=G.EndOfContent;break;case 1:c=G.Boolean;break;case 2:c=G.Integer;break;case 3:c=G.BitString;break;case 4:c=G.OctetString;break;case 5:c=G.Null;break;case 6:c=G.ObjectIdentifier;break;case 10:c=G.Enumerated;break;case 12:c=G.Utf8String;break;case 13:c=G.RelativeObjectIdentifier;break;case 14:c=G.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=G.Sequence;break;case 17:c=G.Set;break;case 18:c=G.NumericString;break;case 19:c=G.PrintableString;break;case 20:c=G.TeletexString;break;case 21:c=G.VideotexString;break;case 22:c=G.IA5String;break;case 23:c=G.UTCTime;break;case 24:c=G.GeneralizedTime;break;case 25:c=G.GraphicString;break;case 26:c=G.VisibleString;break;case 27:c=G.GeneralString;break;case 28:c=G.UniversalString;break;case 29:c=G.CharacterString;break;case 30:c=G.BmpString;break;case 31:c=G.DATE;break;case 32:c=G.TimeOfDay;break;case 33:c=G.DateTime;break;case 34:c=G.Duration;break;default:{let l=o.idBlock.isConstructed?new G.Constructed:new G.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?G.Constructed:G.Primitive}return o=$v(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 is(r){if(!r.byteLength){let e=new xt({},Dt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return ku(ge.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function Vv(r,e){return r?1:e}var wn=class extends Dt{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(!Wn(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(;Vv(this.isIndefiniteForm,n)>0;){let i=ku(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===_a)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===_a?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new Ia;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}};wn.NAME="ConstructedValueBlock";var f6,vo=class extends xt{constructor(e={}){super(e,wn),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} :`}};N4=bo;G.Constructed=N4;bo.NAME="CONSTRUCTED";var $l=class extends Lt{fromBER(e,t,n){return t}toBER(e){return Yr}};$l.override="EndOfContentValueBlock";var B4,Vl=class extends bt{constructor(e={}){super(e,$l),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};B4=Vl;G.EndOfContent=B4;Vl.NAME=ba;var O4,$n=class extends bt{constructor(e={}){super(e,Lt),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}`}};O4=$n;G.Null=O4;$n.NAME="NULL";var Kl=class extends qn(Lt){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=me.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=me.BufferSourceConverter.toUint8Array(e);return Hn(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,B0.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};Kl.NAME="BooleanValueBlock";var M4,Hl=class extends bt{constructor(e={}){super(e,Kl),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}`}};M4=Hl;G.Boolean=M4;Hl.NAME="BOOLEAN";var ql=class extends qn(mn){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=mn.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===ba){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==P4)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?mn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};ql.NAME="OctetStringValueBlock";var U4,Vn=class r extends bt{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},ql),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=wu(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?bo.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${me.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 me.BufferSourceConverter.concat(e)}};U4=Vn;G.OctetString=U4;Vn.NAME=P4;var Wl=class extends qn(mn){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=mn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===ba){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==R4)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=me.BufferSourceConverter.toUint8Array(e);if(!Hn(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=wu(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 mn.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}}};Wl.NAME="BitStringValueBlock";var F4,Xs=class extends bt{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},Wl),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 bo.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)}`}}};F4=Xs;G.BitString=F4;Xs.NAME=R4;var $4;function rv(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=Dl(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=Dl(t,s)),s}function C4(r){if(r>=ya.length)for(let e=ya.length;e<=r;e++){let t=new Uint8Array([0]),n=ya[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=Dl(t,n)),ya.push(n)}return ya[r]}function nv(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 xa=class extends qn(Lt){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=B0.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(_4(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=nv(C4(n),t),i="-";break;default:t=rv(t,C4(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=T4.charAt(t[c]));return a===!1&&(i+=T4.charAt(0)),i}};$4=xa;xa.NAME="IntegerValueBlock";Object.defineProperty($4.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var V4,Ze=class r extends bt{constructor(e={}){super(e,xa),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Nl(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Nl();let t=BigInt(e),n=new wa,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(me.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${me.Convert.ToHex(a)}`)+t,d=me.BufferSourceConverter.toUint8Array(me.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()}`}};V4=Ze;G.Integer=V4;Ze.NAME="INTEGER";var K4,zl=class extends Ze{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};K4=zl;G.Enumerated=K4;zl.NAME="ENUMERATED";var Ea=class extends qn(Lt){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=me.BufferSourceConverter.toUint8Array(e);if(!Hn(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=ns(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Nl();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=wo(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=me.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}}};Ea.NAME="sidBlock";var Gl=class extends Lt{constructor({value:e=js,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Ea;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 O0(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 Ea;if(o>Number.MAX_SAFE_INTEGER){Nl();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}};Gl.NAME="ObjectIdentifierValueBlock";var H4,Ir=class extends bt{constructor(e={}){super(e,Gl),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()}}};H4=Ir;G.ObjectIdentifier=H4;Ir.NAME="OBJECT IDENTIFIER";var va=class extends qn(Fn){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=me.BufferSourceConverter.toUint8Array(e);if(!Hn(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=ns(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=wo(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=me.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};va.NAME="relativeSidBlock";var Yl=class extends Lt{constructor({value:e=js,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new va;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 O0(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 va;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}};Yl.NAME="RelativeObjectIdentifierValueBlock";var q4,Ql=class extends bt{constructor(e={}){super(e,Yl),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()}}};q4=Ql;G.RelativeObjectIdentifier=q4;Ql.NAME="RelativeObjectIdentifier";var W4,ct=class extends bo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};W4=ct;G.Sequence=W4;ct.NAME="SEQUENCE";var z4,Xl=class extends bo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};z4=Xl;G.Set=z4;Xl.NAME="SET";var jl=class extends qn(Lt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=js}toJSON(){return{...super.toJSON(),value:this.value}}};jl.NAME="StringValueBlock";var Zl=class extends jl{};Zl.NAME="SimpleStringValueBlock";var Mt=class extends Ml{constructor({...e}={}){super(e,Zl)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,me.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}};Mt.NAME="SIMPLE STRING";var Jl=class extends Mt{fromBuffer(e){this.valueBlock.valueHexView=me.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=me.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=me.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(me.Convert.FromUtf8String(e)),this.valueBlock.value=e}};Jl.NAME="Utf8StringValueBlock";var G4,Kn=class extends Jl{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};G4=Kn;G.Utf8String=G4;Kn.NAME="UTF8String";var eu=class extends Mt{fromBuffer(e){this.valueBlock.value=me.Convert.ToUtf16String(e),this.valueBlock.valueHexView=me.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(me.Convert.FromUtf16String(e))}};eu.NAME="BmpStringValueBlock";var Y4,tu=class extends eu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};Y4=tu;G.BmpString=Y4;tu.NAME="BMPString";var ru=class extends Mt{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=wo(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}};ru.NAME="UniversalStringValueBlock";var Q4,nu=class extends ru{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};Q4=nu;G.UniversalString=Q4;nu.NAME="UniversalString";var X4,ou=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};X4=ou;G.NumericString=X4;ou.NAME="NumericString";var j4,su=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};j4=su;G.PrintableString=j4;su.NAME="PrintableString";var Z4,iu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};Z4=iu;G.TeletexString=Z4;iu.NAME="TeletexString";var J4,au=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};J4=au;G.VideotexString=J4;au.NAME="VideotexString";var e6,cu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};e6=cu;G.IA5String=e6;cu.NAME="IA5String";var t6,lu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};t6=lu;G.GraphicString=t6;lu.NAME="GraphicString";var r6,Sa=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};r6=Sa;G.VisibleString=r6;Sa.NAME="VisibleString";var n6,uu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};n6=uu;G.GeneralString=n6;uu.NAME="GeneralString";var o6,du=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};o6=du;G.CharacterString=o6;du.NAME="CharacterString";var s6,Aa=class extends Sa{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,me.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]=Zt(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=Zt(this.month,2),t[2]=Zt(this.day,2),t[3]=Zt(this.hour,2),t[4]=Zt(this.minute,2),t[5]=Zt(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}}};s6=Aa;G.UTCTime=s6;Aa.NAME="UTCTime";var i6,fu=class extends Aa{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(Zt(this.year,4)),t.push(Zt(this.month,2)),t.push(Zt(this.day,2)),t.push(Zt(this.hour,2)),t.push(Zt(this.minute,2)),t.push(Zt(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(Zt(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};i6=fu;G.GeneralizedTime=i6;fu.NAME="GeneralizedTime";var a6,hu=class extends Kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};a6=hu;G.DATE=a6;hu.NAME="DATE";var c6,pu=class extends Kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};c6=pu;G.TimeOfDay=c6;pu.NAME="TimeOfDay";var l6,mu=class extends Kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};l6=mu;G.DateTime=l6;mu.NAME="DateTime";var u6,gu=class extends Kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};u6=gu;G.Duration=u6;gu.NAME="Duration";var d6,yu=class extends Kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};d6=yu;G.TIME=d6;yu.NAME="TIME";function U(r,e="utf8"){let t=pl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function lt(r){if(isNaN(r)||r<=0)throw new C("random bytes length must be a Number bigger than 0");return Zo(r)}var Ia=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},_a=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},bu=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var f6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new bu("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");return e}};var Jt=f6;async function h6(r){let e=await Jt.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 ov(e);return{privateKey:t[0],publicKey:t[1]}}async function p6(r,e){let t=await Jt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await Jt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function m6(r,e,t){let n=await Jt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return Jt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function ov(r){if(r.privateKey==null||r.publicKey==null)throw new C("Private and public key are required");return Promise.all([Jt.get().subtle.exportKey("jwk",r.privateKey),Jt.get().subtle.exportKey("jwk",r.publicKey)])}function F0(r){if(r.kty!=="RSA")throw new C("invalid key type");if(r.n==null)throw new C("invalid key modulus");return O(r.n,"base64url").length*8}var Zs=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=ka.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return re.createV1(114,this._multihash)}toString(){return Ee.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t){return m6(this._key,t,e)}},Ta=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=ka.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e){return p6(this._key,e)}};var xu=8192,$0=18;function g6(r){let{result:e}=os(r),t=e.valueBlock.value;return{n:U(gn(t[1].toBigInt()),"base64url"),e:U(gn(t[2].toBigInt()),"base64url"),d:U(gn(t[3].toBigInt()),"base64url"),p:U(gn(t[4].toBigInt()),"base64url"),q:U(gn(t[5].toBigInt()),"base64url"),dp:U(gn(t[6].toBigInt()),"base64url"),dq:U(gn(t[7].toBigInt()),"base64url"),qi:U(gn(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function sv(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 C("JWK was missing components");let t=new ct({value:[new Ze({value:0}),Ze.fromBigInt(yn(O(r.n,"base64url"))),Ze.fromBigInt(yn(O(r.e,"base64url"))),Ze.fromBigInt(yn(O(r.d,"base64url"))),Ze.fromBigInt(yn(O(r.p,"base64url"))),Ze.fromBigInt(yn(O(r.q,"base64url"))),Ze.fromBigInt(yn(O(r.dp,"base64url"))),Ze.fromBigInt(yn(O(r.dq,"base64url"))),Ze.fromBigInt(yn(O(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function y6(r){let{result:e}=os(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:U(gn(t[0].toBigInt()),"base64url"),e:U(gn(t[1].toBigInt()),"base64url")}}function V0(r){if(r.n==null||r.e==null)throw new C("JWK was missing components");let t=new ct({value:[new ct({value:[new Ir({value:"1.2.840.113549.1.1.1"}),new $n]}),new Xs({valueHex:new ct({value:[Ze.fromBigInt(yn(O(r.n,"base64url"))),Ze.fromBigInt(yn(O(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function gn(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 yn(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(""))}function Eu(r){let e=g6(r);return w6(e)}function K0(r){let e=y6(r);if(F0(e)>xu)throw new Tn("Key size is too large");let t=Sr(pn.encode({Type:Ge.RSA,Data:r})),n=Xt($0,t);return new Zs(e,n)}function w6(r){if(F0(r)>xu)throw new C("Key size is too large");let e=b6(r),t=Sr(pn.encode({Type:Ge.RSA,Data:V0(e.publicKey)})),n=Xt($0,t);return new Ta(e.privateKey,new Zs(e.publicKey,n))}async function H0(r){if(r>xu)throw new C("Key size is too large");let e=await h6(r),t=Sr(pn.encode({Type:Ge.RSA,Data:V0(e.publicKey)})),n=Xt($0,t);return new Ta(e.privateKey,new Zs(e.publicKey,n))}function b6(r){if(r==null)throw new C("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var vu=class extends Ks{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,Qo(e);let n=qr(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 Vs(this),this.iHash.update(e),this}digestInto(e){Vs(this),$s(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()}},xo=(r,e,t)=>new vu(r,e).update(t).digest();xo.create=(r,e)=>new vu(r,e);function x6(r){r.lowS!==void 0&&Wr("lowS",r.lowS),r.prehash!==void 0&&Wr("prehash",r.prehash)}function iv(r){let e=da(r);vr(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:av,hexToBytes:cv}=_l,Wn={Err:class extends Error{constructor(e=""){super(e)}},_tlv:{encode:(r,e)=>{let{Err:t}=Wn;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=Jo(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let s=n>127?Jo(o.length/2|128):"";return`${Jo(r)}${s}${o}${e}`},decode(r,e){let{Err:t}=Wn,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}=Wn;if(r<zn)throw new e("integer: negative integers are not allowed");let t=Jo(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}=Wn;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 av(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Wn,o=typeof r=="string"?cv(r):r;qs(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}=Wn,n=`${e.encode(2,t.encode(r.r))}${e.encode(2,t.encode(r.s))}`;return e.encode(48,n)}},zn=BigInt(0),ht=BigInt(1),JD=BigInt(2),E6=BigInt(3),eN=BigInt(4);function lv(r){let e=iv(r),{Fp:t}=e,n=mo(e.n,e.nBitLength),o=e.toBytes||((m,g,y)=>{let b=g.toAffine();return Mn(Uint8Array.from([4]),t.toBytes(b.x),t.toBytes(b.y))}),s=e.fromBytes||(m=>{let g=m.subarray(1),y=t.fromBytes(g.subarray(0,t.BYTES)),b=t.fromBytes(g.subarray(t.BYTES,2*t.BYTES));return{x:y,y:b}});function i(m){let{a:g,b:y}=e,b=t.sqr(m),w=t.mul(b,m);return t.add(t.add(w,t.mul(m,g)),y)}if(!t.eql(t.sqr(e.Gy),i(e.Gx)))throw new Error("bad generator point: equation left != right");function a(m){return la(m,ht,e.n)}function c(m){let{allowedPrivateKeyLengths:g,nByteLength:y,wrapPrivateKey:b,n:w}=e;if(g&&typeof m!="bigint"){if(ho(m)&&(m=Nn(m)),typeof m!="string"||!g.includes(m.length))throw new Error("Invalid key");m=m.padStart(y*2,"0")}let x;try{x=typeof m=="bigint"?m:Bn(Me("private key",m,y))}catch{throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof m}`)}return b&&(x=Ae(x,w)),wt("private key",x,ht,w),x}function l(m){if(!(m instanceof f))throw new Error("ProjectivePoint expected")}let d=ts((m,g)=>{let{px:y,py:b,pz:w}=m;if(t.eql(w,t.ONE))return{x:y,y:b};let x=m.is0();g==null&&(g=x?t.ONE:t.inv(w));let k=t.mul(y,g),T=t.mul(b,g),E=t.mul(w,g);if(x)return{x:t.ZERO,y:t.ZERO};if(!t.eql(E,t.ONE))throw new Error("invZ was invalid");return{x:k,y:T}}),u=ts(m=>{if(m.is0()){if(e.allowInfinityPoint&&!t.is0(m.py))return;throw new Error("bad point: ZERO")}let{x:g,y}=m.toAffine();if(!t.isValid(g)||!t.isValid(y))throw new Error("bad point: x or y not FE");let b=t.sqr(y),w=i(g);if(!t.eql(b,w))throw new Error("bad point: equation left != right");if(!m.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class f{constructor(g,y,b){if(this.px=g,this.py=y,this.pz=b,g==null||!t.isValid(g))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(b==null||!t.isValid(b))throw new Error("z required");Object.freeze(this)}static fromAffine(g){let{x:y,y:b}=g||{};if(!g||!t.isValid(y)||!t.isValid(b))throw new Error("invalid affine point");if(g instanceof f)throw new Error("projective point not allowed");let w=x=>t.eql(x,t.ZERO);return w(y)&&w(b)?f.ZERO:new f(y,b,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(g){let y=t.invertBatch(g.map(b=>b.pz));return g.map((b,w)=>b.toAffine(y[w])).map(f.fromAffine)}static fromHex(g){let y=f.fromAffine(s(Me("pointHex",g)));return y.assertValidity(),y}static fromPrivateKey(g){return f.BASE.multiply(c(g))}static msm(g,y){return Cl(f,n,g,y)}_setWindowSize(g){p.setWindowSize(this,g)}assertValidity(){u(this)}hasEvenY(){let{y:g}=this.toAffine();if(t.isOdd)return!t.isOdd(g);throw new Error("Field doesn't support isOdd")}equals(g){l(g);let{px:y,py:b,pz:w}=this,{px:x,py:k,pz:T}=g,E=t.eql(t.mul(y,T),t.mul(x,w)),S=t.eql(t.mul(b,T),t.mul(k,w));return E&&S}negate(){return new f(this.px,t.neg(this.py),this.pz)}double(){let{a:g,b:y}=e,b=t.mul(y,E6),{px:w,py:x,pz:k}=this,T=t.ZERO,E=t.ZERO,S=t.ZERO,_=t.mul(w,w),F=t.mul(x,x),N=t.mul(k,k),M=t.mul(w,x);return M=t.add(M,M),S=t.mul(w,k),S=t.add(S,S),T=t.mul(g,S),E=t.mul(b,N),E=t.add(T,E),T=t.sub(F,E),E=t.add(F,E),E=t.mul(T,E),T=t.mul(M,T),S=t.mul(b,S),N=t.mul(g,N),M=t.sub(_,N),M=t.mul(g,M),M=t.add(M,S),S=t.add(_,_),_=t.add(S,_),_=t.add(_,N),_=t.mul(_,M),E=t.add(E,_),N=t.mul(x,k),N=t.add(N,N),_=t.mul(N,M),T=t.sub(T,_),S=t.mul(N,F),S=t.add(S,S),S=t.add(S,S),new f(T,E,S)}add(g){l(g);let{px:y,py:b,pz:w}=this,{px:x,py:k,pz:T}=g,E=t.ZERO,S=t.ZERO,_=t.ZERO,F=e.a,N=t.mul(e.b,E6),M=t.mul(y,x),B=t.mul(b,k),L=t.mul(w,T),D=t.add(y,b),I=t.add(x,k);D=t.mul(D,I),I=t.add(M,B),D=t.sub(D,I),I=t.add(y,w);let A=t.add(x,T);return I=t.mul(I,A),A=t.add(M,L),I=t.sub(I,A),A=t.add(b,w),E=t.add(k,T),A=t.mul(A,E),E=t.add(B,L),A=t.sub(A,E),_=t.mul(F,I),E=t.mul(N,L),_=t.add(E,_),E=t.sub(B,_),_=t.add(B,_),S=t.mul(E,_),B=t.add(M,M),B=t.add(B,M),L=t.mul(F,L),I=t.mul(N,I),B=t.add(B,L),L=t.sub(M,L),L=t.mul(F,L),I=t.add(I,L),M=t.mul(B,I),S=t.add(S,M),M=t.mul(A,I),E=t.mul(D,E),E=t.sub(E,M),M=t.mul(D,B),_=t.mul(A,_),_=t.add(_,M),new f(E,S,_)}subtract(g){return this.add(g.negate())}is0(){return this.equals(f.ZERO)}wNAF(g){return p.wNAFCached(this,g,f.normalizeZ)}multiplyUnsafe(g){wt("scalar",g,zn,e.n);let y=f.ZERO;if(g===zn)return y;if(g===ht)return this;let{endo:b}=e;if(!b)return p.unsafeLadder(this,g);let{k1neg:w,k1:x,k2neg:k,k2:T}=b.splitScalar(g),E=y,S=y,_=this;for(;x>zn||T>zn;)x&ht&&(E=E.add(_)),T&ht&&(S=S.add(_)),_=_.double(),x>>=ht,T>>=ht;return w&&(E=E.negate()),k&&(S=S.negate()),S=new f(t.mul(S.px,b.beta),S.py,S.pz),E.add(S)}multiply(g){let{endo:y,n:b}=e;wt("scalar",g,ht,b);let w,x;if(y){let{k1neg:k,k1:T,k2neg:E,k2:S}=y.splitScalar(g),{p:_,f:F}=this.wNAF(T),{p:N,f:M}=this.wNAF(S);_=p.constTimeNegate(k,_),N=p.constTimeNegate(E,N),N=new f(t.mul(N.px,y.beta),N.py,N.pz),w=_.add(N),x=F.add(M)}else{let{p:k,f:T}=this.wNAF(g);w=k,x=T}return f.normalizeZ([w,x])[0]}multiplyAndAddUnsafe(g,y,b){let w=f.BASE,x=(T,E)=>E===zn||E===ht||!T.equals(w)?T.multiplyUnsafe(E):T.multiply(E),k=x(this,y).add(x(g,b));return k.is0()?void 0:k}toAffine(g){return d(this,g)}isTorsionFree(){let{h:g,isTorsionFree:y}=e;if(g===ht)return!0;if(y)return y(f,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:g,clearCofactor:y}=e;return g===ht?this:y?y(f,this):this.multiplyUnsafe(e.h)}toRawBytes(g=!0){return Wr("isCompressed",g),this.assertValidity(),o(f,this,g)}toHex(g=!0){return Wr("isCompressed",g),Nn(this.toRawBytes(g))}}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=Tl(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:i,isWithinCurveOrder:a}}function uv(r){let e=da(r);return vr(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function v6(r){let e=uv(r),{Fp:t,n}=e,o=t.BYTES+1,s=2*t.BYTES+1;function i(L){return Ae(L,n)}function a(L){return kl(L,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:d,isWithinCurveOrder:u}=lv({...e,toBytes(L,D,I){let A=D.toAffine(),R=t.toBytes(A.x),P=Mn;return Wr("isCompressed",I),I?P(Uint8Array.from([D.hasEvenY()?2:3]),R):P(Uint8Array.from([4]),R,t.toBytes(A.y))},fromBytes(L){let D=L.length,I=L[0],A=L.subarray(1);if(D===o&&(I===2||I===3)){let R=Bn(A);if(!la(R,ht,t.ORDER))throw new Error("Point is not on curve");let P=d(R),q;try{q=t.sqrt(P)}catch(ae){let le=ae instanceof Error?": "+ae.message:"";throw new Error("Point is not on curve"+le)}let z=(q&ht)===ht;return(I&1)===1!==z&&(q=t.neg(q)),{x:R,y:q}}else if(D===s&&I===4){let R=t.fromBytes(A.subarray(0,t.BYTES)),P=t.fromBytes(A.subarray(t.BYTES,2*t.BYTES));return{x:R,y:P}}else throw new Error(`Point of length ${D} was invalid. Expected ${o} compressed bytes or ${s} uncompressed bytes`)}}),f=L=>Nn(po(L,e.nByteLength));function h(L){let D=n>>ht;return L>D}function p(L){return h(L)?i(-L):L}let m=(L,D,I)=>Bn(L.slice(D,I));class g{constructor(D,I,A){this.r=D,this.s=I,this.recovery=A,this.assertValidity()}static fromCompact(D){let I=e.nByteLength;return D=Me("compactSignature",D,I*2),new g(m(D,0,I),m(D,I,2*I))}static fromDER(D){let{r:I,s:A}=Wn.toSig(Me("DER",D));return new g(I,A)}assertValidity(){wt("r",this.r,ht,n),wt("s",this.s,ht,n)}addRecoveryBit(D){return new g(this.r,this.s,D)}recoverPublicKey(D){let{r:I,s:A,recovery:R}=this,P=T(Me("msgHash",D));if(R==null||![0,1,2,3].includes(R))throw new Error("recovery id invalid");let q=R===2||R===3?I+e.n:I;if(q>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let z=R&1?"03":"02",j=c.fromHex(z+f(q)),ae=a(q),le=i(-P*ae),fe=i(A*ae),be=c.BASE.multiplyAndAddUnsafe(j,le,fe);if(!be)throw new Error("point at infinify");return be.assertValidity(),be}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new g(this.r,i(-this.s),this.recovery):this}toDERRawBytes(){return es(this.toDERHex())}toDERHex(){return Wn.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return es(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let y={isValidPrivateKey(L){try{return l(L),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let L=I0(e.n);return d4(e.randomBytes(L),e.n)},precompute(L=8,D=c.BASE){return D._setWindowSize(L),D.multiply(BigInt(3)),D}};function b(L,D=!0){return c.fromPrivateKey(L).toRawBytes(D)}function w(L){let D=ho(L),I=typeof L=="string",A=(D||I)&&L.length;return D?A===o||A===s:I?A===2*o||A===2*s:L instanceof c}function x(L,D,I=!0){if(w(L))throw new Error("first arg must be private key");if(!w(D))throw new Error("second arg must be public key");return c.fromHex(D).multiply(l(L)).toRawBytes(I)}let k=e.bits2int||function(L){let D=Bn(L),I=L.length*8-e.nBitLength;return I>0?D>>BigInt(I):D},T=e.bits2int_modN||function(L){return i(k(L))},E=ua(e.nBitLength);function S(L){return wt(`num < 2^${e.nBitLength}`,L,zn,E),po(L,e.nByteLength)}function _(L,D,I=F){if(["recovered","canonical"].some(Ne=>Ne in I))throw new Error("sign() legacy options not supported");let{hash:A,randomBytes:R}=e,{lowS:P,prehash:q,extraEntropy:z}=I;P==null&&(P=!0),L=Me("msgHash",L),x6(I),q&&(L=Me("prehashed msgHash",A(L)));let j=T(L),ae=l(D),le=[S(ae),S(j)];if(z!=null&&z!==!1){let Ne=z===!0?R(t.BYTES):z;le.push(Me("extraEntropy",Ne))}let fe=Mn(...le),be=j;function De(Ne){let Fe=k(Ne);if(!u(Fe))return;let Nt=a(Fe),ot=c.BASE.multiply(Fe).toAffine(),Kt=i(ot.x);if(Kt===zn)return;let kn=i(Nt*i(be+Kt*ae));if(kn===zn)return;let ji=(ot.x===Kt?0:2)|Number(ot.y&ht),Zi=kn;return P&&h(kn)&&(Zi=p(kn),ji^=1),new g(Kt,Zi,ji)}return{seed:fe,k2sig:De}}let F={lowS:e.lowS,prehash:!1},N={lowS:e.lowS,prehash:!1};function M(L,D,I=F){let{seed:A,k2sig:R}=_(L,D,I),P=e;return x0(P.hash.outputLen,P.nByteLength,P.hmac)(A,R)}c.BASE._setWindowSize(8);function B(L,D,I,A=N){let R=L;if(D=Me("msgHash",D),I=Me("publicKey",I),"strict"in A)throw new Error("options.strict was renamed to lowS");x6(A);let{lowS:P,prehash:q}=A,z,j;try{if(typeof R=="string"||ho(R))try{z=g.fromDER(R)}catch(ot){if(!(ot instanceof Wn.Err))throw ot;z=g.fromCompact(R)}else if(typeof R=="object"&&typeof R.r=="bigint"&&typeof R.s=="bigint"){let{r:ot,s:Kt}=R;z=new g(ot,Kt)}else throw new Error("PARSE");j=c.fromHex(I)}catch(ot){if(ot.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(P&&z.hasHighS())return!1;q&&(D=e.hash(D));let{r:ae,s:le}=z,fe=T(D),be=a(le),De=i(fe*be),Ne=i(ae*be),Fe=c.BASE.multiplyAndAddUnsafe(j,De,Ne)?.toAffine();return Fe?i(Fe.x)===ae:!1}return{CURVE:e,getPublicKey:b,getSharedSecret:x,sign:M,verify:B,ProjectivePoint:c,Signature:g,utils:y}}function dv(r){return{hash:r,hmac:(e,...t)=>xo(r,e,f0(...t)),randomBytes:Zo}}function S6(r,e){let t=n=>v6({...r,...dv(n)});return Object.freeze({...t(e),create:t})}var _6=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),A6=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),fv=BigInt(1),q0=BigInt(2),I6=(r,e)=>(r+e/q0)/e;function hv(r){let e=_6,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,f=Ue(u,t,e)*d%e,h=Ue(f,q0,e)*l%e,p=Ue(h,o,e)*h%e,m=Ue(p,s,e)*p%e,g=Ue(m,a,e)*m%e,y=Ue(g,c,e)*g%e,b=Ue(y,a,e)*m%e,w=Ue(b,t,e)*d%e,x=Ue(w,i,e)*p%e,k=Ue(x,n,e)*l%e,T=Ue(k,q0,e);if(!W0.eql(W0.sqr(T),r))throw new Error("Cannot find square root");return T}var W0=mo(_6,void 0,void 0,{sqrt:hv}),_r=S6({a:BigInt(0),b:BigInt(7),Fp:W0,n:A6,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=A6,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-fv*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=t,i=BigInt("0x100000000000000000000000000000000"),a=I6(s*r,e),c=I6(-n*r,e),l=Ae(r-a*t-c*o,e),d=Ae(-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}}}},Sr),lN=BigInt(0);var uN=_r.ProjectivePoint;function z0(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function k6(r,e){let t=ft.digest(e instanceof Uint8Array?e:e.subarray());if(z0(t))return t.then(({digest:n})=>_r.sign(n,r).toDERRawBytes()).catch(n=>{throw new Ia(String(n))});try{return _r.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Ia(String(n))}}function T6(r,e,t){let n=ft.digest(t instanceof Uint8Array?t:t.subarray());if(z0(n))return n.then(({digest:o})=>_r.verify(e,o,r)).catch(o=>{throw new _a(String(o))});try{return _r.verify(e,n.digest,r)}catch(o){throw new _a(String(o))}}var Ca=class{type="secp256k1";raw;_key;constructor(e){this._key=R6(e),this.raw=C6(this._key)}toMultihash(){return dr.digest(Rt(this))}toCID(){return re.createV1(114,this.toMultihash())}toString(){return Ee.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t){return T6(this._key,t,e)}},Pa=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=P6(e),this.publicKey=new Ca(t??L6(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e){return k6(this.raw,e)}};function G0(r){return new Pa(r)}function Y0(r){return new Ca(r)}async function D6(){let r=pv();return new Pa(r)}function C6(r){return _r.ProjectivePoint.fromHex(r).toRawBytes(!0)}function P6(r){try{return _r.getPublicKey(r,!0),r}catch(e){throw new Ji(String(e))}}function R6(r){try{return _r.ProjectivePoint.fromHex(r),r}catch(e){throw new Tn(String(e))}}function L6(r){try{return _r.getPublicKey(r,!0)}catch(e){throw new Ji(String(e))}}function pv(){return _r.utils.randomPrivateKey()}async function Su(r,e){if(r==="Ed25519")return S4();if(r==="secp256k1")return D6();if(r==="RSA")return H0(e??2048);throw new $r}function Je(r){let{Type:e,Data:t}=pn.decode(r),n=t??new Uint8Array;switch(e){case Ge.RSA:return K0(n);case Ge.Ed25519:return R0(n);case Ge.secp256k1:return Y0(n);default:throw new $r}}function Au(r){let{Type:e,Data:t}=pn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ge.Ed25519:return R0(n);case Ge.secp256k1:return Y0(n);default:throw new $r}}function Rt(r){return pn.encode({Type:Ge[r.type],Data:r.raw})}function N6(r){let e=ga.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ge.RSA:return Eu(t);case Ge.Ed25519:return P0(t);case Ge.secp256k1:return G0(t);default:throw new $r}}function B6(r){return r.byteLength===64?P0(r):r.byteLength===32?G0(r):Eu(r)}function Js(r){return ga.encode({Type:Ge[r.type],Data:r.raw})}var O6=Symbol.for("nodejs.util.inspect.custom"),mv=114,Ra=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Kc]=!0;toString(){return this.string==null&&(this.string=Ee.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return re.createV1(mv,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return ee(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return ee(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[O6](){return`PeerId(${this.toString()})`}},La=class extends Ra{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Da=class extends Ra{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Na=class extends Ra{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},gv=2336,Ba=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=dr.digest(O(this.url))}[O6](){return`PeerId(${this.url})`}[Kc]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return re.createV1(gv,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=U(e)),e.toString()===this.toString())}};var yv=114,M6=2336;function Re(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Te(Ee.decode(`z${r}`));else{if(e==null)throw new C('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Te(e.decode(r))}return pt(t)}function wn(r){if(r.type==="Ed25519")return new Da({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Na({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new La({multihash:r.toCID().multihash,publicKey:r});throw new $r}function U6(r){return wn(r.publicKey)}function pt(r){if(bv(r))return new La({multihash:r});if(wv(r))try{let e=Au(r);if(e.type==="Ed25519")return new Da({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Na({multihash:r,publicKey:e})}catch{let t=U(r.digest);return new Ba(new URL(t))}throw new ro("Supplied PeerID Multihash is invalid")}function bn(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==yv&&r.code!==M6)throw new Xc("Supplied PeerID CID is invalid");if(r.code===M6){let e=U(r.multihash.digest);return new Ba(new URL(e))}return pt(r.multihash)}function wv(r){return r.code===dr.code}function bv(r){return r.code===ft.code}function ss(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}function Iu(r){let e=Te(Ee.decode(`z${r}`));return pt(e)}var mt=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return ss(this.map.entries(),e=>[e[1].key,e[1].value])}forEach(e){this.map.forEach((t,n)=>{e(t.value,t.key,this)})}get(e){return this.map.get(e.toString())?.value}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),{key:e,value:t})}keys(){return ss(this.map.values(),e=>e.key)}values(){return ss(this.map.values(),e=>e.value)}get size(){return this.map.size}};var er=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 ss(this.set.entries(),e=>{let t=Iu(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Iu(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return ss(this.set.values(),e=>Iu(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}};function F6(r,e,t,n){Qo(r);let o=n4({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(ao(s),ao(i),ao(a),s<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=qr(e),l=qr(t),d=new Uint8Array(i),u=xo.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function $6(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function V6(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=F6(r,e,t,n),l,d=new Uint8Array(4),u=jo(d),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<s;h++,p+=a.outputLen){let m=i.subarray(p,p+a.outputLen);u.setInt32(0,h,!1),(l=c._cloneInto(l)).update(d).digestInto(f),m.set(f.subarray(0,m.length));for(let g=1;g<o;g++){a._cloneInto(l).update(f).digestInto(f);for(let y=0;y<m.length;y++)m[y]^=f[y]}}return $6(a,c,i,l,f)}async function _u(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=F6(r,e,t,n),d,u=new Uint8Array(4),f=jo(u),h=new Uint8Array(c.outputLen);for(let p=1,m=0;m<s;p++,m+=c.outputLen){let g=a.subarray(m,m+c.outputLen);f.setInt32(0,p,!1),(d=l._cloneInto(d)).update(u).digestInto(h),g.set(h.subarray(0,g.length)),await t4(o-1,i,()=>{c._cloneInto(d).update(h).digestInto(h);for(let y=0;y<g.length;y++)g[y]^=h[y]})}return $6(c,l,a,d,h)}var Oa=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Eo=new Uint32Array(80),Q0=class extends co{constructor(){super(64,20,8,!1),this.A=Oa[0]|0,this.B=Oa[1]|0,this.C=Oa[2]|0,this.D=Oa[3]|0,this.E=Oa[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)Eo[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Eo[c]=El(Eo[c-3]^Eo[c-8]^Eo[c-14]^Eo[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=vl(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=Sl(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=El(n,5)+l+a+d+Eo[c]|0;a=i,i=s,s=El(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(){Eo.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},K6=Hs(()=>new Q0);var H6={sha1:K6,"sha2-256":Sr,"sha2-512":fo};function Ma(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(H6).join(" / ");throw new C(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let s=H6[o],i=V6(s,r,e,{c:t,dkLen:n});return rt.encode(i).substring(1)}var X0=kt(Tu(),1);var Ev=Math.LN2*Math.LN2,Cu=class{seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=Sv(e.hashes??8),this.bits=e.bits??1024,this.buffer=ie(Math.ceil(this.bits/8))}add(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=X0.default.x86.hash32(e,this.seeds[t])%this.bits;this.setbit(o)}}has(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=X0.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=Math.floor(e/8),n=e%8,o=this.buffer[t];o|=1<<n,this.buffer[t]=o}getbit(e){let t=Math.floor(e/8),n=e%8;return(this.buffer[t]&1<<n)!==0}};function j0(r,e=.005){let t=vv(r,e);return new Cu(t)}function vv(r,e=.005){let t=Math.round(-1*r*Math.log(e)/Ev),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function Sv(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(lt(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var Z0=64,Qr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>Z0)throw new TypeError("Invalid Fingerprint Size");let s=t.hashV(e,n),i=ie(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?ee(this.fp,e.fp):!1}};function is(r,e){return Math.floor(Math.random()*(e-r))+r}var as=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=is(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 J0={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},z6={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},G6=new globalThis.TextEncoder;function Av(r,e){let t=J0[e],n=z6[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function Iv(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=J0[e],o=z6[e],s=r;for(;s.length>0;){let i=G6.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 e2(r,{size:e=32,utf8Buffer:t}={}){if(!J0[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 Iv(r,e,t);r=G6.encode(r)}return Av(r,e)}var _v=kt(Tu(),1);var Fa={hash:r=>Number(e2(r,{size:32})),hashV:(r,e)=>kv(Fa.hash(r,e))};function kv(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),O(e,"base16")}var Tv=500,$a=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??Fa,this.seed=e.seed??is(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=O(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 as(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new as(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let s=[n,o],i=s[is(0,s.length-1)];this.buckets[i]==null&&(this.buckets[i]=new as(this.bucketSize));for(let a=0;a<Tv;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 as(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=O(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=O(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}},Cv={1:.5,2:.84,4:.95,8:.98};function Pv(r=.001){return r>.002?2:r>1e-5?4:8}function Y6(r,e=.001){let t=Pv(e),n=Cv[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),Z0);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var Pu=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??Fa,this.seed=e.seed??is(0,Math.pow(2,10)),this.filterSeries=[new $a({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=O(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 $a({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=O(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=O(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 Va(r,e=.001,t){return new Pu({...Y6(r,e),...t??{}})}var Ru=class{filter;constructor(e,t){this.filter=Va(e,t)}has(e){return this.filter.has(e.toMultihash().bytes)}add(e){this.filter.add(e.toMultihash().bytes)}remove(e){this.filter.remove?.(e.toMultihash().bytes)}};function t2(r,e=.001){return new Ru(r,e)}var r2=class extends mt{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 Ka(r){let{name:e,metrics:t}=r,n;return t!=null?n=new r2({name:e,metrics:t}):n=new mt,n}var Gn=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=rt.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=rt.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=rt.encode(e.multihash.bytes);this.blocks.set(n,t)}};function Rv(r){let e=new Uint8Array(r.reduce((n,o)=>n+he(o),0)),t=0;for(let n of r)e=$e(n,e,t),t+=he(n);return e}var Q6=Rv;function n2(r){return Q6([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var Lu=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 Gn,n=new Set;for(let[o,s]of this.wants.entries())try{let i=await this.blockstore.get(s.cid,e);s.wantType===je.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:n2(s.cid)})):(this.log("sending have for %c",s.cid),t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:Er.HaveBlock})):(this.log("sending block for %c",s.cid),n.add(o),t.addBlock(s.cid,{data:i,prefix:n2(s.cid)}))}catch(i){if(i.name!=="NotFoundError")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:Er.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 Du=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=Ka({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 Lu({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=re.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===je.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??je.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 Lv(r,e){try{if(typeof r=="string"&&r.length>0)return Dv(r);if(typeof r=="number"&&isFinite(r))return e?.long?Bv(r):Nv(r);throw new Error("Value is not a string or number.")}catch(t){let n=Ov(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function Dv(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 Bu=Lv;function Nv(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 Bv(r){let e=Math.abs(r);return e>=864e5?Nu(r,e,864e5,"day"):e>=36e5?Nu(r,e,36e5,"hour"):e>=6e4?Nu(r,e,6e4,"minute"):e>=1e3?Nu(r,e,1e3,"second"):`${r} ms`}function Nu(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function Ov(r){return typeof r=="object"&&r!==null&&"message"in r}function o2(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=Bu,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 m(...g){if(!m.enabled)return;let y=m,b=Number(new Date),w=b-(u||b);y.diff=w,y.prev=u,y.curr=b,u=b,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let x=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(T,E)=>{if(T==="%%")return"%";x++;let S=t.formatters[E];if(typeof S=="function"){let _=g[x];T=S.call(y,_),g.splice(x,1),x--}return T}),t.formatArgs.call(y,g),(y.log||t.log).apply(y,g)}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:()=>f!==null?f:(h!==t.namespaces&&(h=t.namespaces,p=t.enabled(d)),p),set:g=>{f=g}}),typeof t.init=="function"&&t.init(m),m}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 Ou=Hv(),Mv=["#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 Uv(){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 Fv(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Bu(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 $v=console.debug??console.log??(()=>{});function Vv(r){try{r?Ou?.setItem("debug",r):Ou?.removeItem("debug")}catch{}}function Kv(){let r;try{r=Ou?.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function Hv(){try{return localStorage}catch{}}function qv(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var X6=o2({formatArgs:Fv,save:Vv,load:Kv,useColors:Uv,setupFormatters:qv,colors:Mv,storage:Ou,log:$v});var fr=X6;fr.formatters.b=r=>r==null?"undefined":Ee.baseEncode(r);fr.formatters.t=r=>r==null?"undefined":it.baseEncode(r);fr.formatters.m=r=>r==null?"undefined":rt.baseEncode(r);fr.formatters.p=r=>r==null?"undefined":r.toString();fr.formatters.c=r=>r==null?"undefined":r.toString();fr.formatters.k=r=>r==null?"undefined":r.toString();fr.formatters.a=r=>r==null?"undefined":r.toString();function Wv(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 vo(){return{forComponent(r){return hr(r)}}}function hr(r){let e=Wv(`${r}:trace`);return fr.enabled(`${r}:trace`)&&fr.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=fr(`${r}:trace`)),Object.assign(fr(r),{error:fr(`${r}:error`),trace:e})}var i2=kt(Z6(),1);var ei=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},a2=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},J6=r=>globalThis.DOMException===void 0?new a2(r):new DOMException(r),e8=r=>{let e=r.reason===void 0?J6("This operation was aborted."):r.reason;return e instanceof Error?e:J6(e)};function Xr(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(e8(f)),f.addEventListener("abort",()=>{d(e8(f))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new ei;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 c2(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 qa=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=c2(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 kr=class extends i2.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:qa,...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#b(){return this.#t||this.#r<this.#o}get#x(){return this.#i<this.#d}#E(){this.#i--,this.#f(),this.emit("next")}#v(){this.#w(),this.#y(),this.#u=void 0}get#S(){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.#v()},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.#S;if(this.#b&&this.#x){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#A(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=Xr(Promise.resolve(s),{milliseconds:t.timeout})),t.signal&&(s=Promise.race([s,this.#A(t.signal)]));let i=await s;n(i),this.emit("completed",i)}catch(s){if(s instanceof ei&&!t.throwOnTimeout){n();return}o(s),this.emit("error",s)}finally{this.#E()}},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 Uu(r){let e=[pr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var l2=60;function Fu(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:pr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:pr[e.type],TTL:e.TTL??e.ttl??l2,data:e.data instanceof Uint8Array?U(e.data):e.data}))}}var Yv=4;function u2(r,e={}){let t=new kr({concurrency:e.queryConcurrency??Yv});return async(n,o={})=>{let s=new URLSearchParams;s.set("name",n),Uu(o.types).forEach(a=>{s.append("type",pr[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=Fu(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 t8(){return[u2("https://cloudflare-dns.com/dns-query"),u2("https://dns.google/resolve")]}var n8=kt(d2(),1);var f2=class{lru;constructor(e){this.lru=(0,n8.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 Fu({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:pr[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??l2)*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 o8(r){return new f2(r)}var Qv=1e3,$u=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=o8(e.cacheSize??Qv),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["."]=t8())}async query(e,t={}){let n=Uu(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 pr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(pr||(pr={}));function Vu(r={}){return new $u(r)}var Xv=["string","number","bigint","symbol"],jv=["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 s8(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(Xv.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(Zv(r))return"Buffer";let t=Jv(r);return t||"Object"}function Zv(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function Jv(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(jv.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 $=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 ti=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",eS=new TextDecoder,tS=new TextEncoder;function Ku(r){return ti&&globalThis.Buffer.isBuffer(r)}function Wa(r){return r instanceof Uint8Array?Ku(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var l8=ti?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):a8(r,e,t):(r,e,t)=>t-e>64?eS.decode(r.subarray(e,t)):a8(r,e,t),Hu=ti?r=>r.length>64?globalThis.Buffer.from(r):i8(r):r=>r.length>64?tS.encode(r):i8(r),xn=r=>Uint8Array.from(r),ri=ti?(r,e,t)=>Ku(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),u8=ti?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Wa(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},d8=ti?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function f8(r,e){if(Ku(r)&&Ku(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 i8(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 a8(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 h2(n)}var c8=4096;function h2(r){let e=r.length;if(e<=c8)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=c8));return t}var rS=256,za=class{constructor(e=rS){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=d8(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=ri(n,0,this.cursor)}else t=u8(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",ni="CBOR encode error:",Ga=[];Ga[23]=1;Ga[24]=2;Ga[25]=3;Ga[26]=5;Ga[27]=9;function Yn(r,e,t){if(r.length-e<t)throw new Error(`${Q} not enough data for type`)}var gt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){Yn(r,e,1);let n=r[e];if(t.strict===!0&&n<gt[0])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function gr(r,e,t){Yn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<gt[1])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){Yn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<gt[2])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){Yn(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<gt[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 h8(r,e,t,n){return new $(v.uint,mr(r,e+1,n),2)}function p8(r,e,t,n){return new $(v.uint,gr(r,e+1,n),3)}function m8(r,e,t,n){return new $(v.uint,yr(r,e+1,n),5)}function g8(r,e,t,n){return new $(v.uint,wr(r,e+1,n),9)}function Tr(r,e){return xt(r,0,e.value)}function xt(r,e,t){if(t<gt[0]){let n=Number(t);r.push([e|n])}else if(t<gt[1]){let n=Number(t);r.push([e|24,n])}else if(t<gt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<gt[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<gt[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`)}}Tr.encodedSize=function(e){return xt.encodedSize(e.value)};xt.encodedSize=function(e){return e<gt[0]?1:e<gt[1]?2:e<gt[2]?3:e<gt[3]?5:9};Tr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function y8(r,e,t,n){return new $(v.negint,-1-mr(r,e+1,n),2)}function w8(r,e,t,n){return new $(v.negint,-1-gr(r,e+1,n),3)}function b8(r,e,t,n){return new $(v.negint,-1-yr(r,e+1,n),5)}var p2=BigInt(-1),x8=BigInt(1);function E8(r,e,t,n){let o=wr(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,p2-BigInt(o),9)}function qu(r,e){let t=e.value,n=typeof t=="bigint"?t*p2-x8:t*-1-1;xt(r,e.type.majorEncoded,n)}qu.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*p2-x8:t*-1-1;return n<gt[0]?1:n<gt[1]?2:n<gt[2]?3:n<gt[3]?5:9};qu.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Ya(r,e,t,n){Yn(r,e,t+n);let o=ri(r,e+t,e+t+n);return new $(v.bytes,o,t+n)}function v8(r,e,t,n){return Ya(r,e,1,t)}function S8(r,e,t,n){return Ya(r,e,2,mr(r,e+1,n))}function A8(r,e,t,n){return Ya(r,e,3,gr(r,e+1,n))}function I8(r,e,t,n){return Ya(r,e,5,yr(r,e+1,n))}function _8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer bytes lengths not supported`);return Ya(r,e,9,o)}function Wu(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===v.string?Hu(r.value):r.value),r.encodedBytes}function oi(r,e){let t=Wu(e);xt(r,e.type.majorEncoded,t.length),r.push(t)}oi.encodedSize=function(e){let t=Wu(e);return xt.encodedSize(t.length)+t.length};oi.compareTokens=function(e,t){return oS(Wu(e),Wu(t))};function oS(r,e){return r.length<e.length?-1:r.length>e.length?1:f8(r,e)}function Qa(r,e,t,n,o){let s=t+n;Yn(r,e,s);let i=new $(v.string,l8(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=ri(r,e+t,e+s)),i}function k8(r,e,t,n){return Qa(r,e,1,t,n)}function T8(r,e,t,n){return Qa(r,e,2,mr(r,e+1,n),n)}function C8(r,e,t,n){return Qa(r,e,3,gr(r,e+1,n),n)}function P8(r,e,t,n){return Qa(r,e,5,yr(r,e+1,n),n)}function R8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer string lengths not supported`);return Qa(r,e,9,o,n)}var L8=oi;function si(r,e,t,n){return new $(v.array,n,t)}function D8(r,e,t,n){return si(r,e,1,t)}function N8(r,e,t,n){return si(r,e,2,mr(r,e+1,n))}function B8(r,e,t,n){return si(r,e,3,gr(r,e+1,n))}function O8(r,e,t,n){return si(r,e,5,yr(r,e+1,n))}function M8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer array lengths not supported`);return si(r,e,9,o)}function U8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return si(r,e,1,1/0)}function zu(r,e){xt(r,v.array.majorEncoded,e.value)}zu.compareTokens=Tr.compareTokens;zu.encodedSize=function(e){return xt.encodedSize(e.value)};function ii(r,e,t,n){return new $(v.map,n,t)}function F8(r,e,t,n){return ii(r,e,1,t)}function $8(r,e,t,n){return ii(r,e,2,mr(r,e+1,n))}function V8(r,e,t,n){return ii(r,e,3,gr(r,e+1,n))}function K8(r,e,t,n){return ii(r,e,5,yr(r,e+1,n))}function H8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer map lengths not supported`);return ii(r,e,9,o)}function q8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return ii(r,e,1,1/0)}function Gu(r,e){xt(r,v.map.majorEncoded,e.value)}Gu.compareTokens=Tr.compareTokens;Gu.encodedSize=function(e){return xt.encodedSize(e.value)};function W8(r,e,t,n){return new $(v.tag,t,1)}function z8(r,e,t,n){return new $(v.tag,mr(r,e+1,n),2)}function G8(r,e,t,n){return new $(v.tag,gr(r,e+1,n),3)}function Y8(r,e,t,n){return new $(v.tag,yr(r,e+1,n),5)}function Q8(r,e,t,n){return new $(v.tag,wr(r,e+1,n),9)}function Yu(r,e){xt(r,v.tag.majorEncoded,e.value)}Yu.compareTokens=Tr.compareTokens;Yu.encodedSize=function(e){return xt.encodedSize(e.value)};var uS=20,dS=21,fS=22,hS=23;function X8(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 j8(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 m2(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 Z8(r,e,t,n){return m2(g2(r,e+1),3,n)}function J8(r,e,t,n){return m2(y2(r,e+1),5,n)}function e5(r,e,t,n){return m2(o5(r,e+1),9,n)}function Qu(r,e,t){let n=e.value;if(n===!1)r.push([v.float.majorEncoded|uS]);else if(n===!0)r.push([v.float.majorEncoded|dS]);else if(n===null)r.push([v.float.majorEncoded|fS]);else if(n===void 0)r.push([v.float.majorEncoded|hS]);else{let o,s=!1;(!t||t.float64!==!0)&&(r5(n),o=g2(jr,1),n===o||Number.isNaN(n)?(jr[0]=249,r.push(jr.slice(0,3)),s=!0):(n5(n),o=y2(jr,1),n===o&&(jr[0]=250,r.push(jr.slice(0,5)),s=!0))),s||(pS(n),o=o5(jr,1),jr[0]=251,r.push(jr.slice(0,9)))}}Qu.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){r5(n);let o=g2(jr,1);if(n===o||Number.isNaN(n))return 3;if(n5(n),o=y2(jr,1),n===o)return 5}return 9};var t5=new ArrayBuffer(9),Cr=new DataView(t5,1),jr=new Uint8Array(t5,0);function r5(r){if(r===1/0)Cr.setUint16(0,31744,!1);else if(r===-1/0)Cr.setUint16(0,64512,!1);else if(Number.isNaN(r))Cr.setUint16(0,32256,!1);else{Cr.setFloat32(0,r);let e=Cr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Cr.setUint16(0,31744,!1);else if(t===0)Cr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Cr.setUint16(0,0):o<-14?Cr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Cr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function g2(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 n5(r){Cr.setFloat32(0,r,!1)}function y2(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 pS(r){Cr.setFloat64(0,r,!1)}function o5(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)}Qu.compareTokens=Tr.compareTokens;function ve(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Xu(r){return()=>{throw new Error(`${Q} ${r}`)}}var K=[];for(let r=0;r<=23;r++)K[r]=ve;K[24]=h8;K[25]=p8;K[26]=m8;K[27]=g8;K[28]=ve;K[29]=ve;K[30]=ve;K[31]=ve;for(let r=32;r<=55;r++)K[r]=ve;K[56]=y8;K[57]=w8;K[58]=b8;K[59]=E8;K[60]=ve;K[61]=ve;K[62]=ve;K[63]=ve;for(let r=64;r<=87;r++)K[r]=v8;K[88]=S8;K[89]=A8;K[90]=I8;K[91]=_8;K[92]=ve;K[93]=ve;K[94]=ve;K[95]=Xu("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)K[r]=k8;K[120]=T8;K[121]=C8;K[122]=P8;K[123]=R8;K[124]=ve;K[125]=ve;K[126]=ve;K[127]=Xu("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)K[r]=D8;K[152]=N8;K[153]=B8;K[154]=O8;K[155]=M8;K[156]=ve;K[157]=ve;K[158]=ve;K[159]=U8;for(let r=160;r<=183;r++)K[r]=F8;K[184]=$8;K[185]=V8;K[186]=K8;K[187]=H8;K[188]=ve;K[189]=ve;K[190]=ve;K[191]=q8;for(let r=192;r<=215;r++)K[r]=W8;K[216]=z8;K[217]=G8;K[218]=Y8;K[219]=Q8;K[220]=ve;K[221]=ve;K[222]=ve;K[223]=ve;for(let r=224;r<=243;r++)K[r]=Xu("simple values are not supported");K[244]=ve;K[245]=ve;K[246]=ve;K[247]=X8;K[248]=Xu("simple values are not supported");K[249]=Z8;K[250]=J8;K[251]=e5;K[252]=ve;K[253]=ve;K[254]=ve;K[255]=j8;var Zr=[];for(let r=0;r<24;r++)Zr[r]=new $(v.uint,r,1);for(let r=-1;r>=-24;r--)Zr[31-r]=new $(v.negint,r,1);Zr[64]=new $(v.bytes,new Uint8Array(0),1);Zr[96]=new $(v.string,"",1);Zr[128]=new $(v.array,0,1);Zr[160]=new $(v.map,0,1);Zr[244]=new $(v.false,!1,1);Zr[245]=new $(v.true,!0,1);Zr[246]=new $(v.null,null,1);function s5(r){switch(r.type){case v.false:return xn([244]);case v.true:return xn([245]);case v.null:return xn([246]);case v.bytes:return r.value.length?void 0:xn([64]);case v.string:return r.value===""?xn([96]):void 0;case v.array:return r.value===0?xn([128]):void 0;case v.map:return r.value===0?xn([160]):void 0;case v.uint:return r.value<24?xn([Number(r.value)]):void 0;case v.negint:if(r.value>=-24)return xn([31-Number(r.value)])}}var gS={float64:!1,mapSorter:bS,quickEncodeToken:s5};function yS(){let r=[];return r[v.uint.major]=Tr,r[v.negint.major]=qu,r[v.bytes.major]=oi,r[v.string.major]=L8,r[v.array.major]=zu,r[v.map.major]=Gu,r[v.tag.major]=Yu,r[v.float.major]=Qu,r}var i5=yS(),w2=new za,Zu=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(`${ni} object contains circular references`);return new r(t,e)}},So={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)},Ao={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?So.true:So.false},null(r,e,t,n){return So.null},undefined(r,e,t,n){return So.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?[So.emptyArray,new $(v.break)]:So.emptyArray;n=Zu.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=ju(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?[So.emptyMap,new $(v.break)]:So.emptyMap;n=Zu.createCheck(n,r);let a=[],c=0;for(let l of s)a[c++]=[ju(l,t,n),ju(o?r.get(l):r[l],t,n)];return wS(a,t),t.addBreakTokens?[new $(v.map,i),a,new $(v.break)]:[new $(v.map,i),a]}};Ao.Map=Ao.Object;Ao.Buffer=Ao.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Ao[`${r}Array`]=Ao.DataView;function ju(r,e={},t){let n=s8(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||Ao[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=Ao[n];if(!s)throw new Error(`${ni} unsupported type: ${n}`);return s(r,n,e,t)}function wS(r,e){e.mapSorter&&r.sort(e.mapSorter)}function bS(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=i5[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function a5(r,e,t,n){if(Array.isArray(e))for(let o of e)a5(r,o,t,n);else t[e.type.major](r,e,n)}function c5(r,e,t){let n=ju(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 za(i);if(s(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return Wa(a.chunks[0])}}return w2.reset(),a5(w2,n,e,t),w2.toBytes(!0)}function ai(r,e){return e=Object.assign({},gS,e),c5(r,i5,e)}var xS={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Ju=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=Zr[e];if(t===void 0){let n=K[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}},Xa=Symbol.for("DONE"),e1=Symbol.for("BREAK");function ES(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=ci(e,t);if(s===e1){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(s===Xa)throw new Error(`${Q} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function vS(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=ci(e,t);if(a===e1){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===Xa)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=ci(e,t);if(c===Xa)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 ci(r,e){if(r.done())return Xa;let t=r.next();if(t.type===v.break)return e1;if(t.type.terminal)return t.value;if(t.type===v.array)return ES(t,r,e);if(t.type===v.map)return vS(t,r,e);if(t.type===v.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=ci(r,e);return e.tags[t.value](n)}throw new Error(`${Q} tag not supported (${t.value})`)}throw new Error("unsupported")}function b2(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Q} data to decode must be a Uint8Array`);e=Object.assign({},xS,e);let t=e.tokenizer||new Ju(r,e),n=ci(t,e);if(n===Xa)throw new Error(`${Q} did not find any content to decode`);if(n===e1)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function Pr(r,e){let[t,n]=b2(r,e);if(n.length>0)throw new Error(`${Q} too many terminals, data makes no sense`);return t}var Qn="/",l5=new TextEncoder().encode(Qn),r1=l5[0],Le=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=O(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]!==r1)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(Qn))}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=l5),this._buf[0]!==r1){let e=new Uint8Array(this._buf.byteLength+1);e.fill(r1,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===r1;)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(Qn).slice(1)}type(){return SS(this.baseNamespace())}name(){return AS(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Qn)||(e+=Qn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Qn):new r(e.slice(0,-1).join(Qn))}child(e){return this.toString()===Qn?e:e.toString()===Qn?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(),...IS(e.map(t=>t.namespaces()))])}};function SS(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function AS(r){let e=r.split(":");return e[e.length-1]}function IS(r){return[].concat(...r)}var h5="/pin/",u5="/pinned-block/",x2=fn,d5=1;function f5(r){return r.version===0&&(r=r.toV1()),new Le(`${h5}${r.toString(x2)}`)}var n1=class{datastore;blockstore;dagWalkers;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.dagWalkers=n}async*add(e,t={}){let n=f5(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 lr({concurrency:d5});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>ee(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,ai(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 Le(`${u5}${x2.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=Pr(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")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,ai(s),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=f5(e),o=await this.datastore.get(n,t),s=Pr(o);await this.datastore.delete(n,t);let i=new lr({concurrency:d5});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=>ee(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:h5+(e.cid!=null?`${e.cid.toString(fn)}`:"")},e)){let o=re.parse(t.toString().substring(5),fn),s=Pr(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new Le(`${u5}${x2.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}};var E2=1,v2=5;var ja=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Io=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}};var _S=5,o1=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??_S}async start(){await Ht(...this.routers)}async stop(){await qt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Io("No content routers available");let n=new Wt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of Ot(n.toGenerator(),...li(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 Io("No content routers available");await Promise.all(li(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(li(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(li(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Io("No peer routers available");let n=this,o=Ot(...li(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 Be("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Io("No peer routers available");for await(let n of Ot(...li(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function li(r,e){return r.filter(t=>t[e]!=null)}var _o={},ui=r=>{r.addEventListener("message",e=>{ui.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{ui.dispatchEvent("message",r,e)})};ui.addEventListener=(r,e)=>{_o[r]==null&&(_o[r]=[]),_o[r].push(e)};ui.removeEventListener=(r,e)=>{_o[r]!=null&&(_o[r]=_o[r].filter(t=>t===e))};ui.dispatchEvent=function(r,e,t){_o[r]!=null&&_o[r].forEach(n=>n(e,t))};var S2=ui;var A2="lock:worker:request-read",I2="lock:worker:release-read",_2="lock:master:grant-read",k2="lock:worker:request-write",T2="lock:worker:release-write",C2="lock:master:grant-write";var p5=(r=21)=>Math.random().toString().substring(2);var m5=(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)})}}}))},g5=(r,e,t,n)=>async()=>{let o=p5();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)})},kS={singleProcess:!1},y5=r=>{if(r=Object.assign({},kS,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return S2.addEventListener("message",m5(t,"requestReadLock",A2,I2,_2)),S2.addEventListener("message",m5(t,"requestWriteLock",k2,T2,C2)),t}return{isWorker:!0,readLock:t=>g5(t,A2,_2,I2),writeLock:t=>g5(t,k2,C2,T2)}};var ls={},ko;async function P2(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Xr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var TS=(r,e)=>{if(ko.isWorker===!0)return{readLock:ko.readLock(r,e),writeLock:ko.writeLock(r,e)};let t=new kr({concurrency:1}),n;return{async readLock(){if(n!=null)return P2(n,e);n=new kr({concurrency:e.concurrency,autoStart:!1});let o=n,s=P2(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),s},async writeLock(){return n=null,P2(t,e)}}},CS={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Za(r){let e=Object.assign({},CS,r);return ko==null&&(ko=y5(e),ko.isWorker!==!0&&(ko.addEventListener("requestReadLock",t=>{ls[t.data.name]!=null&&ls[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),ko.addEventListener("requestWriteLock",async t=>{ls[t.data.name]!=null&&ls[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),ls[e.name]==null&&(ls[e.name]=TS(e.name,e)),ls[e.name]}var s1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Za({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await Ht(this.child),this.started=!0}async stop(){await qt(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 b5=42;function PS(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=re.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new $(v.tag,b5),new $(v.bytes,t)]}function RS(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function LS(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 w5={float64:!0,typeEncoders:{Object:PS,undefined:RS,number:LS}},JU={...w5,typeEncoders:{...w5.typeEncoders}};function DS(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return re.decode(r.subarray(1))}var R2={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};R2.tags[b5]=DS;var eF={...R2,tags:R2.tags.slice()};var x5=113;var E5=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(`${ni} unsupported type: Uint8Array`)}[v.string.major](e,t){this.prefix(e);let n=Hu(JSON.stringify(t.value));e.push(n.length>32?Wa(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(`${ni} 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 us=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 $(i>=0?v.uint:v.negint,i,this._pos-e):new $(i>=0?v.uint:v.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,h2(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 i1(r,e){return e=Object.assign({tokenizer:new us(r,e)},e),Pr(r,e)}var OS={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};OS.tags[42]=re.parse;var S5=297;var yF=new TextDecoder;var wF=new TextEncoder;var US=new TextDecoder;function L2(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 a1(r,e){let t;[t,e]=L2(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 A5(r,e){let t;return[t,e]=L2(r,e),[t&7,t>>3,e]}function FS(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=A5(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]=a1(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]=a1(r,n),e.Name=US.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]=L2(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 I5(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=A5(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]=a1(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]=a1(r,t),n.push(FS(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 xF=new TextEncoder,EF=2**32,vF=2**31;var IF=new TextEncoder;function _5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var k5=112;function T5(r){let e=_5(r),t=I5(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=re.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 VS={codec:k5,*walk(r){yield*T5(r).Links.map(t=>t.Hash)}},KS={codec:fl,*walk(){}},C5=42,HS={codec:x5,*walk(r){let e=[],t=[];t[C5]=n=>{if(n[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");let o=re.decode(n.subarray(1));return e.push(o),o},Pr(r,{tags:t}),yield*e}},D2=class extends us{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 $(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=rt.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}},qS={codec:S5,*walk(r){let e=[],t=[];t[C5]=n=>{let o=re.parse(n);return e.push(o),o},i1(r,{tags:t,tokenizer:new D2(r,{tags:t,allowIndefinite:!0,allowUndefined:!0,allowNaN:!0,allowInfinity:!0,allowBigInt:!0,strict:!1,rejectDuplicateMapKeys:!1})}),yield*e}},WS={codec:Um,*walk(){}};function P5(r=[]){let e={};return[VS,KS,HS,qS,WS,...r].forEach(t=>{e[t.codec]=t}),e}var N2=new Le("/version"),R5=1;async function L5(r){if(!await r.has(N2)){await r.put(N2,O(`${R5}`));return}let e=await r.get(N2),t=U(e);if(parseInt(t,10)!==R5)throw new Error("Unknown datastore version, a datastore migration may be required")}function D5(r=[]){let e={};return[ft,Jh,dr,...r].forEach(t=>{e[t.code]=t}),e}var Rr=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var Xn=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 c1=0,l1=class extends Xn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===c1||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===c1)return e.multihash.digest;if(this.child==null)throw new Rr;return this.child.get(e)}has(e){return e.multihash.code===c1?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==c1&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function zS(r){return r[Symbol.asyncIterator]!=null}function GS(r,e){let t=0;if(zS(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Ls(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 Jr=GS;function YS(r){return r[Symbol.asyncIterator]!=null}function N5(r){return r?.then!=null}function QS(r,e){let t=0;if(YS(r))return async function*(){for await(let c of r){let l=e(c,t++);N5(l)&&await l,yield c}}();let n=Ls(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++);N5(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var ds=QS;var u1=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 l1(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=Jr(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=ds(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 B5(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(ds(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 B5(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)}},d1=class extends u1{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await Ht(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await qt(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 B2({blockstore:this.child,blockBrokers:n,hashers:this.hashers,logger:this.logger},{root:e})}},B2=class extends u1{closeController;constructor(e,t){super(e),this.closeController=new AbortController,V(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=xe([this.closeController.signal,n.signal]);V(1/0,o);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=xe([this.closeController.signal,t.signal]);V(1/0,n);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=xe([this.closeController.signal,t.signal]);V(1/0,n);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=xe([this.closeController.signal,t.signal]);V(1/0,n);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=xe([this.closeController.signal,t.signal]);V(1/0,n);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=xe([this.closeController.signal,t.signal]);V(1/0,n);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=xe([this.closeController.signal,t.signal]);V(1/0,n);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=xe([this.closeController.signal,e.signal]);V(1/0,t);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function XS(r){return typeof r.retrieve=="function"}var jS=(r,e)=>{if(e==null)throw new C(`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`);return async t=>{let n=await e.digest(t);if(!ee(n.digest,r.multihash.digest))throw new ro("Hash of downloaded block did not match multihash from passed CID")}};async function B5(r,e,t,n){let o=jS(r,t),s=new AbortController,i=xe([s.signal,n.signal]);V(1/0,s.signal,i);let a=[];for(let c of e)XS(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 O2=kt(Tu(),1);var ZS=Math.LN2*Math.LN2,f1=class r{static create(e,t=.005){let n=JS(e,t);return new r(n)}seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=eA(e.hashes??8),this.bits=e.bits??1024,this.buffer=ie(Math.ceil(this.bits/8))}add(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=O2.default.x86.hash32(e,this.seeds[t])%this.bits;this.setbit(o)}}has(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=O2.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 JS(r,e=.005){let t=Math.round(-1*r*Math.log(e)/ZS),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function eA(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(lt(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var fs=class extends pe{intialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),V(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=f1.create(this.maxProviders)}async retrieve(e,t={}){let n=rt.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let s=Z();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 lr({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=Z(),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 ja(`Found ${s} of ${t} ${this.name} providers for ${e}`)}).catch(i=>{this.log.error("error searching routing for potential session peers for %c",e,i.errors??i),o.reject(i)}),o.promise}};var h1=class{blockstore;datastore;pins;logger;routing;dagWalkers;hashers;dns;metrics;log;constructor(e){this.logger=e.logger??vo(),this.log=this.logger.forComponent("helia"),this.hashers=D5(e.hashers),this.dagWalkers=P5(e.dagWalkers),this.dns=e.dns??Vu(),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 o1(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 d1(t);this.pins=new n1(e.datastore,n,this.dagWalkers),this.blockstore=new s1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await L5(this.datastore),await Ht(this.blockstore,this.datastore,this.routing)}async stop(){await qt(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 zt(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 M2=class extends fs{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.toMultihash().bytes}equals(e,t){return e.equals(t)}};function O5(r,e){return new M2(r,e)}var p1=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 U2=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 m1(r){let{name:e,metrics:t}=r,n;return t!=null?n=new U2({name:e,metrics:t}):n=new Map,n}function tA(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Bt(r);e.push(t),r=r.slice(he(t))}return e}var M5=tA;var g1=class extends pe{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),V(1/0,this),this.peers=Ka({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=m1({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??je.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===je.WantHave&&t.wantType===je.WantBlock&&(o.wantType=je.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===je.WantBlock?(await cr(this,"block",t?.signal,{filter:a=>ee(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await cr(this,"presence",t?.signal,{filter:i=>ee(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=Z(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Gn;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 Gn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:je.WantHave,priority:1}),await this.network.sendMessage(t,o),(await cr(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&ee(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:je.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Gn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:je.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await cr(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&ee(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=M5(o.prefix),i=s[0],a=s[1],c=s[2],l=c===ft.code?ft: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=re.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=re.decode(o);this.log("received %s from %p for %c",s,e,i),this.safeDispatchEvent("presence",{detail:{sender:e,cid:i,has:s===Er.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Gn(!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:je.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 y1=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 p1(e),this.network=new xl(e,t),this.peerWantLists=new Du({...e,network:this.network},t),this.wantList=new g1({...e,network:this.network},t)}createSession(e={}){return O5({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=xe([n.signal,t.signal]);V(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 U5=(r,e={})=>new y1(r,e);var F2=class{bitswap;started;constructor(e,t={}){let{hashers:n}=e;this.bitswap=U5(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 $2(r={}){return e=>new F2(e,r)}var w1=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 F5=45,rA=15,di=new w1;function V2(r){if(!(r.length>rA))return di.new(r).parseWith(()=>di.readIPv4Addr())}function K2(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>F5))return di.new(r).parseWith(()=>di.readIPv6Addr())}function b1(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>F5))return di.new(r).parseWith(()=>di.readIPAddr())}function fi(r){return!!V2(r)}function hi(r){return!!K2(r)}function x1(r){return!!b1(r)}var V5=kt($5(),1),nA=["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"],oA=nA.map(r=>new V5.Netmask(r));function H2(r){for(let e of oA)if(e.contains(r))return!0;return!1}function sA(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function iA(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 H2(o)}function aA(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function cA(r){let e=r.split(":"),t=e[e.length-1];return H2(t)}function lA(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 tr(r){return fi(r)?H2(r):sA(r)?iA(r):aA(r)?cA(r):hi(r)?lA(r):void 0}var PV=parseInt("0xFFFF",16),RV=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var q5=fi,pA=hi,q2=function(r){let e=0;if(r=r.toString().trim(),q5(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(pA(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=q5(t[n]),i;s&&(i=q2(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")},W5=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 pi={},W2={},gA=[[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"]];gA.forEach(r=>{let e=yA(...r);W2[e.code]=e,pi[e.name]=e});function yA(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function J(r){if(typeof r=="number"){if(W2[r]!=null)return W2[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(pi[r]!=null)return pi[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var fK=J("ip4"),hK=J("ip6"),pK=J("ipcidr");function Q2(r,e){switch(J(r).code){case 4:case 41:return bA(e);case 42:return Y2(e);case 6:case 273:case 33:case 132:return Y5(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Y2(e);case 421:return SA(e);case 444:return G5(e);case 445:return G5(e);case 466:return vA(e);case 481:return globalThis.encodeURIComponent(Y2(e));default:return U(e,"base16")}}function X2(r,e){switch(J(r).code){case 4:return z5(e);case 41:return z5(e);case 42:return G2(e);case 6:case 273:case 33:case 132:return j2(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return G2(e);case 421:return xA(e);case 444:return AA(e);case 445:return IA(e);case 466:return EA(e);case 481:return G2(globalThis.decodeURIComponent(e));default:return O(e,"base16")}}var z2=Object.values(Ln).map(r=>r.decoder),wA=function(){let r=z2[0].or(z2[1]);return z2.slice(2).forEach(e=>r=r.or(e)),r}();function z5(r){if(!x1(r))throw new Error("invalid ip address");return q2(r)}function bA(r){let e=W5(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!x1(e))throw new Error("invalid ip address");return e}function j2(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function Y5(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function G2(r){let e=O(r),t=Uint8Array.from($e(e.length));return Pe([t,e],t.length+e.length)}function Y2(r){let e=Bt(r);if(r=r.slice(he(e)),r.length!==e)throw new Error("inconsistent lengths");return U(r)}function xA(r){let e;r[0]==="Q"||r[0]==="1"?e=Te(Ee.decode(`z${r}`)).bytes:e=re.parse(r).multihash.bytes;let t=Uint8Array.from($e(e.length));return Pe([t,e],t.length+e.length)}function EA(r){let e=wA.decode(r),t=Uint8Array.from($e(e.length));return Pe([t,e],t.length+e.length)}function vA(r){let e=Bt(r),t=r.slice(he(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+U(t,"base64url")}function SA(r){let e=Bt(r),t=r.slice(he(e));if(t.length!==e)throw new Error("inconsistent lengths");return U(t,"base58btc")}function AA(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=it.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=j2(n);return Pe([t,o],t.length+o.length)}function IA(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=it.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=j2(n);return Pe([t,o],t.length+o.length)}function G5(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=U(e,"base32"),o=Y5(t);return`${n}:${o}`}function Q5(r){r=Z2(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=J(i);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw j5("invalid address: "+r);if(a.path===!0){n=Z2(o.slice(s).join("/")),e.push([a.code,X2(a.code,n)]),t.push([a.code,n]);break}let c=X2(a.code,o[s]);e.push([a.code,c]),t.push([a.code,Q2(a.code,c)])}return{string:X5(t),bytes:ep(e),tuples:e,stringTuples:t,path:n}}function J2(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=Bt(r,o),i=he(s),a=J(s),c=_A(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 j5("Invalid address Uint8Array: "+U(r,"base16"));e.push([s,l]);let d=Q2(s,l);if(t.push([s,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:X5(t),tuples:e,stringTuples:t,path:n}}function X5(r){let e=[];return r.map(t=>{let n=J(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Z2(e.join("/"))}function ep(r){return Pe(r.map(e=>{let t=J(e[0]),n=Uint8Array.from($e(t.code));return e.length>1&&e[1]!=null&&(n=Pe([n,e[1]])),n}))}function _A(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Bt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+he(t)}}function Z2(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function j5(r){return new Error("Error parsing address: "+r)}var kA=Symbol.for("nodejs.util.inspect.custom"),rp=Symbol.for("@multiformats/js-multiaddr/multiaddr"),TA=[J("dns").code,J("dns4").code,J("dns6").code,J("dnsaddr").code],tp=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},E1=class r{bytes;#e;#t;#r;#o;[rp]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=J2(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=Q5(e)}else if(To(e))t=J2(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=J("tcp"),a=J("udp"),c=J("ip4"),l=J("ip6"),d=J("dns6"),u=J("ip6zone");for(let[h,p]of this.stringTuples())h===u.code&&(s=`%${p??""}`),TA.includes(h)&&(t=i.name,o=443,n=`${p??""}${s}`,e=h===d.code?6:4),(h===i.code||h===a.code)&&(t=J(h).name,o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=J(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({},J(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>J(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(ep(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===pi.p2p.code&&e.push([n,o]),n===pi["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?U(Ee.decode(`z${n}`),"base58btc"):U(re.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return ee(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(s=>s.resolvable);if(t==null)return[this];let n=mi.get(t.name);if(n==null)throw new tp(`no available resolver for ${t.name}`);return(await n(this,e)).map(s=>X(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)}[kA](){return`Multiaddr(${this.#e})`}};var mi=new Map;function To(r){return!!r?.[rp]}function X(r){return new E1(r)}var CA=r=>r.toString().split("/").slice(1),ec=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Ie=r=>({match:e=>ec(t=>t===r).match(e),pattern:r}),A1=()=>({match:r=>ec(e=>typeof e=="string").match(r),pattern:"{string}"}),I1=()=>({match:r=>ec(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),Et=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{Ee.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),v1=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{Hh.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),ut=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Lr=(...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(", ")})`}),Ce=(...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 et(...r){function e(o){let s=CA(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 op=Ce(Ie("dns4"),A1()),sp=Ce(Ie("dns6"),A1()),ip=Ce(Ie("dnsaddr"),A1()),Z5=Ce(Ie("dns"),A1()),KK=et(op),HK=et(sp),qK=et(ip),_1=et(Lr(Z5,ip,op,sp)),J5=Ce(Ie("ip4"),ec(fi)),eg=Ce(Ie("ip6"),ec(hi)),tg=Lr(J5,eg),En=Lr(tg,Z5,op,sp,ip),rg=et(En),WK=et(J5),zK=et(eg),ng=et(tg),ap=Ce(En,Ie("tcp"),I1()),tc=Ce(En,Ie("udp"),I1()),GK=et(ap),YK=et(tc),cp=Ce(tc,Ie("quic")),k1=Ce(tc,Ie("quic-v1")),PA=Lr(cp,k1),QK=et(cp),XK=et(k1),np=Lr(En,ap,tc,cp,k1),og=Lr(Ce(np,Ie("ws"),ut(Et()))),jK=et(og),sg=Lr(Ce(np,Ie("wss"),ut(Et())),Ce(np,Ie("tls"),Ie("ws"),ut(Et()))),ZK=et(sg),ig=Ce(tc,Ie("webrtc-direct"),ut(v1()),ut(v1()),ut(Et())),ag=et(ig),cg=Ce(k1,Ie("webtransport"),ut(v1()),ut(v1()),ut(Et())),T1=et(cg),S1=Lr(og,sg,Ce(ap,ut(Et())),Ce(PA,ut(Et())),Ce(En,ut(Et())),ig,cg,Et()),JK=et(S1),RA=Ce(S1,Ie("p2p-circuit"),Et()),vn=et(RA),LA=Lr(Ce(S1,Ie("p2p-circuit"),Ie("webrtc"),ut(Et())),Ce(S1,Ie("webrtc"),ut(Et())),Ie("webrtc")),lg=et(LA),DA=Lr(Ce(En,Ie("tcp"),I1(),Ie("http"),ut(Et())),Ce(En,Ie("http"),ut(Et()))),ug=et(DA),NA=Lr(Ce(En,Ie("tcp"),Lr(Ce(Ie("443"),Ie("http")),Ce(I1(),Ie("https"))),ut(Et())),Ce(En,Ie("tls"),Ie("http"),ut(Et())),Ce(En,Ie("https"),ut(Et()))),dg=et(NA);var BA=[J("tcp").code,J("dns").code,J("dnsaddr").code,J("dns4").code,J("dns6").code];function fg(r){let e;try{e=J("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function hg(r){return r.some(([e,t])=>e===J("tls").code)}function rr(r,e,t){let n=pg[J(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${J(r).name}`);let o=n(e,t);return r===J("ip6").code?`[${o}]`:o}var pg={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://${rr(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://${rr(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`${rr(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`${rr(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=hg(e),n=fg(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=rr(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=rr(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 rr(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return rr(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=rr(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=hg(e),n=fg(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=rr(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=rr(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`${rr(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`${rr(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`${rr(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function C1(r,e){let n=X(r).stringTuples(),o=n.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let s=J(o[0]),i=pg[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&BA.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 P1=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 rt.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 OA(r,e,t){return r.filter(n=>{if(dg.matches(n)||e&&ug.matches(n))return t||_1.matches(n)?!0:tr(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*R1(r,e,t,n,o,s){for await(let i of e.findProviders(r,s)){let a=OA(i.multiaddrs,n,o);if(a.length===0)continue;let c=C1(a[0]);yield new P1(c,t)}}var lp=class extends fs{routing;allowInsecure;allowLocal;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??L1,this.allowLocal=t.allowLocal??D1}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*R1(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 mg(r,e){return new lp(r,e)}var N1=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??L1,this.allowLocal=t.allowLocal??D1}async retrieve(e,t={}){let n=[];for await(let o of R1(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 mg({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure})}};var L1=!1,D1=!1;function up(r={}){return e=>new N1(e,r)}async function*B1(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 KA=kt(O1(),1);var en=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},M1=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},gi=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},U1=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},F1=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},$1=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},rc=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var nr;(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,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.value=o.bytes();break}case 2:{a.signatureV1=o.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(o);break}case 4:{a.validity=o.bytes();break}case 5:{a.sequence=o.uint64();break}case 6:{a.ttl=o.uint64();break}case 7:{a.pubKey=o.bytes();break}case 8:{a.signatureV2=o.bytes();break}case 9:{a.data=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(nr||(nr={}));var MA=hr("ipns:utils"),gg=O("/ipns/");var UA=0,FA=18;function yg(r){let e;if(r.pubKey!=null)try{e=Je(r.pubKey)}catch(t){throw MA.error(t),t}if(e!=null)return e}function wg(r){let e=O("ipns-signature:");return Pe([e,r])}function nc(r){return"signatureV1"in r?nr.encode({value:O(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:O(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):nr.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function Sn(r){let e=nr.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 new en("Missing data or signatureV2");let t=bg(e.data),n=$A(t.Value),o=U(t.Validity);if(e.value!=null&&e.signatureV1!=null)return VA(e),{value:n,validityType:nr.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:nr.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")}function oc(r){return Pe([gg,r.bytes])}function yi(r){let e=Te(r.slice(gg.length));if(!V1(e,UA)&&!V1(e,FA))throw new ro("Multihash in IPNS key was not identity or sha2-256");return e}function bg(r){let e=Pr(r);if(e.ValidityType===0)e.ValidityType=nr.ValidityType.EOL;else throw new gi("The validity type is unsupported");return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e}function $A(r){let e=U(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${re.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${re.parse(e).toV1().toString()}`}catch{}throw new F1("Value must be a valid content path starting with /")}function VA(r){if(r.data==null)throw new $1("Record data is missing");let e=bg(r.data);if(!ee(e.Value,r.value??new Uint8Array(0)))throw new en('Field "value" did not match between protobuf and CBOR');if(!ee(e.Validity,r.validity??new Uint8Array(0)))throw new en('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new en('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new en('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new en('Field "ttl" did not match between protobuf and CBOR')}function V1(r,e){return r.code===e}var qH=hr("ipns"),WH=60*60*1e9,HA="/ipns/",zH=HA.length;var xg=kt(O1(),1);var K1=hr("ipns:validator"),qA=1024*10,WA=async(r,e)=>{let t=Sn(e),n;try{let o=wg(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw K1.error("record signature verification failed"),new en("Record signature verification failed");if(t.validityType===nr.ValidityType.EOL){if(xg.default.fromString(t.validity).toDate().getTime()<Date.now())throw K1.error("record has expired"),new M1("record has expired")}else if(t.validityType!=null)throw K1.error("the validity type is unsupported"),new gi("The validity type is unsupported");K1("ipns record for %s is valid",t.value)};async function H1(r,e){if(e.byteLength>qA)throw new U1("The record is too large");let t=yi(r),n;V1(t,0)&&(n=Au(t));let o=Sn(e),s=yg(o)??n;if(s==null)throw new rc("Could not extract public key from IPNS record or routing key");let i=oc(s.toMultihash());if(!ee(r,i))throw new rc("Embedded public key did not match routing key");await WA(s,e)}async function*sc(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))}var wi=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},hs=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function zA(r){return r[Symbol.asyncIterator]!=null}function GA(r){if(zA(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var ps=GA;var Eg=O("/ipns/");function vg(r){return ee(r.subarray(0,Eg.byteLength),Eg)}var q1=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Qt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async put(e,t,n){if(!vg(e))return;let o=yi(e),s=re.createV1(114,o),i=Sn(t);await this.client.putIPNS(s,i,n)}async get(e,t){if(!vg(e))throw new Be("Not found");let n=yi(e),o=re.createV1(114,n);try{let s=await this.client.getIPNS(o,t);return nc(s)}catch(s){throw s.name==="BadResponseError"?new Be("Not found"):s}}},W1=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await ps(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Be("Not found")}async*getClosestPeers(e,t={}){}};var Ft=hr("delegated-routing-v1-http-api-client"),Sg={concurrentRequests:4,timeout:3e4},z1=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,V(1/0,this.shutDownController.signal),this.httpQueue=new kr({concurrency:t.concurrentRequests??Sg.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??Sg.timeout,this.contentRouting=new q1(this),this.peerRouting=new W1(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={}){Ft("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=xe([this.shutDownController.signal,n,t.signal]);V(1/0,n,o);let s=Z(),i=Z();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 Be("No matching records found");if(l.status===422)throw new wi("Request does not conform to schema or semantic constraints");if(l.body==null)throw new hs("Routing response had no body");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 sc(B1(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){Ft.error("getProviders errored:",a)}finally{o.clear(),i.resolve(),Ft("getProviders finished: %c",e)}}async*getPeers(e,t={}){Ft("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=xe([this.shutDownController.signal,n,t.signal]);V(1/0,n,o);let s=Z(),i=Z();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 Be("No matching records found");if(l.status===422)throw new wi("Request does not conform to schema or semantic constraints");if(l.body==null)throw new hs("Routing response had no body");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 sc(B1(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){Ft.error("getPeers errored:",a)}finally{o.clear(),i.resolve(),Ft("getPeers finished: %c",e)}}async getIPNS(e,t={}){Ft("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=xe([this.shutDownController.signal,n,t.signal]);V(1/0,n,o);let s=Z(),i=Z();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=await fetch(a,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o});if(Ft("getIPNS GET %s %d",a,l.status),l.status===404)throw new Be("No matching records found");if(l.status===422)throw new wi("Request does not conform to schema or semantic constraints");if(l.body==null)throw new hs("GET ipns response had no body");let d=await l.arrayBuffer(),u=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await H1(oc(e.multihash),u),Sn(u)}catch(c){throw Ft.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),i.resolve(),Ft("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){Ft("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=xe([this.shutDownController.signal,o,n.signal]);V(1/0,o,s);let i=Z(),a=Z();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await i.promise;let l=nc(t),u=await fetch(c,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s});if(Ft("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new hs("PUT ipns response had status other than 200")}catch(l){throw Ft.error("putIPNS PUT %s error:",c,l.stack),l}finally{s.clear(),a.resolve(),Ft("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(X)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Re(e.ID),Addrs:n,Protocols:t}}catch(t){Ft.error("could not conform record to peer schema",t)}}};function Ag(r,e={}){return new z1(new URL(r),e)}var Ig="[a-fA-F\\d:]",Co=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${Ig})|(?<=${Ig})(?=\\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}",nt="[a-fA-F\\d]{1,4}",G1=`
7
+ `)}`:`${t} :`}};f6=vo;G.Constructed=f6;vo.NAME="CONSTRUCTED";var Xl=class extends Dt{fromBER(e,t,n){return t}toBER(e){return Yr}};Xl.override="EndOfContentValueBlock";var h6,jl=class extends xt{constructor(e={}){super(e,Xl),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};h6=jl;G.EndOfContent=h6;jl.NAME=_a;var p6,Kn=class extends xt{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}`}};p6=Kn;G.Null=p6;Kn.NAME="NULL";var Zl=class extends zn(Dt){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 Wn(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,Y0.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};Zl.NAME="BooleanValueBlock";var m6,Jl=class extends xt{constructor(e={}){super(e,Zl),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}`}};m6=Jl;G.Boolean=m6;Jl.NAME="BOOLEAN";var eu=class extends zn(wn){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=wn.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===_a){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==c6)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?wn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};eu.NAME="OctetStringValueBlock";var g6,Hn=class r extends xt{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},eu),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=ku(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?vo.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)}};g6=Hn;G.OctetString=g6;Hn.NAME=c6;var tu=class extends zn(wn){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=wn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===_a){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==l6)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(!Wn(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=ku(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 wn.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}}};tu.NAME="BitStringValueBlock";var y6,ri=class extends xt{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},tu),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 vo.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)}`}}};y6=ri;G.BitString=y6;ri.NAME=l6;var w6;function Kv(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=Hl(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=Hl(t,s)),s}function a6(r){if(r>=Aa.length)for(let e=Aa.length;e<=r;e++){let t=new Uint8Array([0]),n=Aa[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=Hl(t,n)),Aa.push(n)}return Aa[r]}function Hv(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 Ta=class extends zn(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=Y0.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(o6(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=Hv(a6(n),t),i="-";break;default:t=Kv(t,a6(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=i6.charAt(t[c]));return a===!1&&(i+=i6.charAt(0)),i}};w6=Ta;Ta.NAME="IntegerValueBlock";Object.defineProperty(w6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var b6,tt=class r extends xt{constructor(e={}){super(e,Ta),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return ql(),BigInt(this.valueBlock.toString())}static fromBigInt(e){ql();let t=BigInt(e),n=new Ia,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()}`}};b6=tt;G.Integer=b6;tt.NAME="INTEGER";var x6,ru=class extends tt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};x6=ru;G.Enumerated=x6;ru.NAME="ENUMERATED";var ka=class extends zn(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=ge.BufferSourceConverter.toUint8Array(e);if(!Wn(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=ss(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){ql();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=Eo(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}}};ka.NAME="sidBlock";var nu=class extends Dt{constructor({value:e=ni,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new ka;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 Q0(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 ka;if(o>Number.MAX_SAFE_INTEGER){ql();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}};nu.NAME="ObjectIdentifierValueBlock";var E6,Ir=class extends xt{constructor(e={}){super(e,nu),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()}}};E6=Ir;G.ObjectIdentifier=E6;Ir.NAME="OBJECT IDENTIFIER";var Ca=class extends zn(Vn){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(!Wn(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=ss(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=Eo(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}}};Ca.NAME="relativeSidBlock";var ou=class extends Dt{constructor({value:e=ni,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Ca;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 Q0(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 Ca;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}};ou.NAME="RelativeObjectIdentifierValueBlock";var v6,su=class extends xt{constructor(e={}){super(e,ou),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()}}};v6=su;G.RelativeObjectIdentifier=v6;su.NAME="RelativeObjectIdentifier";var S6,ft=class extends vo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};S6=ft;G.Sequence=S6;ft.NAME="SEQUENCE";var A6,iu=class extends vo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};A6=iu;G.Set=A6;iu.NAME="SET";var au=class extends zn(Dt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ni}toJSON(){return{...super.toJSON(),value:this.value}}};au.NAME="StringValueBlock";var cu=class extends au{};cu.NAME="SimpleStringValueBlock";var Ut=class extends Gl{constructor({...e}={}){super(e,cu)}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 lu=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}};lu.NAME="Utf8StringValueBlock";var I6,qn=class extends lu{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};I6=qn;G.Utf8String=I6;qn.NAME="UTF8String";var uu=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))}};uu.NAME="BmpStringValueBlock";var _6,du=class extends uu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};_6=du;G.BmpString=_6;du.NAME="BMPString";var fu=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=Eo(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}};fu.NAME="UniversalStringValueBlock";var T6,hu=class extends fu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};T6=hu;G.UniversalString=T6;hu.NAME="UniversalString";var k6,pu=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};k6=pu;G.NumericString=k6;pu.NAME="NumericString";var C6,mu=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};C6=mu;G.PrintableString=C6;mu.NAME="PrintableString";var P6,gu=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};P6=gu;G.TeletexString=P6;gu.NAME="TeletexString";var R6,yu=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};R6=yu;G.VideotexString=R6;yu.NAME="VideotexString";var D6,wu=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};D6=wu;G.IA5String=D6;wu.NAME="IA5String";var L6,bu=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};L6=bu;G.GraphicString=L6;bu.NAME="GraphicString";var N6,Pa=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};N6=Pa;G.VisibleString=N6;Pa.NAME="VisibleString";var B6,xu=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};B6=xu;G.GeneralString=B6;xu.NAME="GeneralString";var O6,Eu=class extends Ut{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};O6=Eu;G.CharacterString=O6;Eu.NAME="CharacterString";var M6,Ra=class extends Pa{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]=er(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=er(this.month,2),t[2]=er(this.day,2),t[3]=er(this.hour,2),t[4]=er(this.minute,2),t[5]=er(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}}};M6=Ra;G.UTCTime=M6;Ra.NAME="UTCTime";var U6,vu=class extends Ra{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(er(this.year,4)),t.push(er(this.month,2)),t.push(er(this.day,2)),t.push(er(this.hour,2)),t.push(er(this.minute,2)),t.push(er(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(er(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};U6=vu;G.GeneralizedTime=U6;vu.NAME="GeneralizedTime";var F6,Su=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};F6=Su;G.DATE=F6;Su.NAME="DATE";var $6,Au=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};$6=Au;G.TimeOfDay=$6;Au.NAME="TimeOfDay";var V6,Iu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};V6=Iu;G.DateTime=V6;Iu.NAME="DateTime";var K6,_u=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};K6=_u;G.Duration=K6;_u.NAME="Duration";var H6,Tu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};H6=Tu;G.TIME=H6;Tu.NAME="TIME";function F(r,e="utf8"){let t=Al[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function ht(r){if(isNaN(r)||r<=0)throw new C("random bytes length must be a Number bigger than 0");return es(r)}var Da=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},La=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Cu=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var q6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Cu("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");return e}};var tr=q6;async function W6(r){let e=await tr.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 qv(e);return{privateKey:t[0],publicKey:t[1]}}async function z6(r,e){let t=await tr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await tr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function G6(r,e,t){let n=await tr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return tr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function qv(r){if(r.privateKey==null||r.publicKey==null)throw new C("Private and public key are required");return Promise.all([tr.get().subtle.exportKey("jwk",r.privateKey),tr.get().subtle.exportKey("jwk",r.publicKey)])}function Z0(r){if(r.kty!=="RSA")throw new C("invalid key type");if(r.n==null)throw new C("invalid key modulus");return O(r.n,"base64url").length*8}var oi=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Na.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return Z.createV1(114,this._multihash)}toString(){return Ee.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}verify(e,t){return G6(this._key,t,e)}},Ba=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Na.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return z6(this._key,e)}};var Pu=8192,J0=18;function Y6(r){let{result:e}=is(r),t=e.valueBlock.value;return{n:F(bn(t[1].toBigInt()),"base64url"),e:F(bn(t[2].toBigInt()),"base64url"),d:F(bn(t[3].toBigInt()),"base64url"),p:F(bn(t[4].toBigInt()),"base64url"),q:F(bn(t[5].toBigInt()),"base64url"),dp:F(bn(t[6].toBigInt()),"base64url"),dq:F(bn(t[7].toBigInt()),"base64url"),qi:F(bn(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function Wv(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 C("JWK was missing components");let t=new ft({value:[new tt({value:0}),tt.fromBigInt(xn(O(r.n,"base64url"))),tt.fromBigInt(xn(O(r.e,"base64url"))),tt.fromBigInt(xn(O(r.d,"base64url"))),tt.fromBigInt(xn(O(r.p,"base64url"))),tt.fromBigInt(xn(O(r.q,"base64url"))),tt.fromBigInt(xn(O(r.dp,"base64url"))),tt.fromBigInt(xn(O(r.dq,"base64url"))),tt.fromBigInt(xn(O(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function Q6(r){let{result:e}=is(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:F(bn(t[0].toBigInt()),"base64url"),e:F(bn(t[1].toBigInt()),"base64url")}}function e2(r){if(r.n==null||r.e==null)throw new C("JWK was missing components");let t=new ft({value:[new ft({value:[new Ir({value:"1.2.840.113549.1.1.1"}),new Kn]}),new ri({valueHex:new ft({value:[tt.fromBigInt(xn(O(r.n,"base64url"))),tt.fromBigInt(xn(O(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function bn(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 xn(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(""))}function Ru(r){let e=Y6(r);return X6(e)}function t2(r){let e=Q6(r);if(Z0(e)>Pu)throw new Pn("Key size is too large");let t=Sr(yn.encode({Type:Ge.RSA,Data:r})),n=jt(J0,t);return new oi(e,n)}function X6(r){if(Z0(r)>Pu)throw new C("Key size is too large");let e=j6(r),t=Sr(yn.encode({Type:Ge.RSA,Data:e2(e.publicKey)})),n=jt(J0,t);return new Ba(e.privateKey,new oi(e.publicKey,n))}async function r2(r){if(r>Pu)throw new C("Key size is too large");let e=await W6(r),t=Sr(yn.encode({Type:Ge.RSA,Data:e2(e.publicKey)})),n=jt(J0,t);return new Ba(e.privateKey,new oi(e.publicKey,n))}function j6(r){if(r==null)throw new C("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var Du=class extends Ys{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,jo(e);let n=qr(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),zs(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()}},So=(r,e,t)=>new Du(r,e).update(t).digest();So.create=(r,e)=>new Du(r,e);function Z6(r){r.lowS!==void 0&&Wr("lowS",r.lowS),r.prehash!==void 0&&Wr("prehash",r.prehash)}function zv(r){let e=wa(r);vr(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:Gv,hexToBytes:Yv}=Ol,Gn={Err:class extends Error{constructor(e=""){super(e)}},_tlv:{encode:(r,e)=>{let{Err:t}=Gn;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=ts(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let s=n>127?ts(o.length/2|128):"";return`${ts(r)}${s}${o}${e}`},decode(r,e){let{Err:t}=Gn,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}=Gn;if(r<Yn)throw new e("integer: negative integers are not allowed");let t=ts(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}=Gn;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 Gv(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Gn,o=typeof r=="string"?Yv(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}=Gn,n=`${e.encode(2,t.encode(r.r))}${e.encode(2,t.encode(r.s))}`;return e.encode(48,n)}},Yn=BigInt(0),mt=BigInt(1),cB=BigInt(2),J6=BigInt(3),lB=BigInt(4);function Qv(r){let e=zv(r),{Fp:t}=e,n=wo(e.n,e.nBitLength),o=e.toBytes||((m,g,y)=>{let b=g.toAffine();return Fn(Uint8Array.from([4]),t.toBytes(b.x),t.toBytes(b.y))}),s=e.fromBytes||(m=>{let g=m.subarray(1),y=t.fromBytes(g.subarray(0,t.BYTES)),b=t.fromBytes(g.subarray(t.BYTES,2*t.BYTES));return{x:y,y:b}});function i(m){let{a:g,b:y}=e,b=t.sqr(m),w=t.mul(b,m);return t.add(t.add(w,t.mul(m,g)),y)}if(!t.eql(t.sqr(e.Gy),i(e.Gx)))throw new Error("bad generator point: equation left != right");function a(m){return ga(m,mt,e.n)}function c(m){let{allowedPrivateKeyLengths:g,nByteLength:y,wrapPrivateKey:b,n:w}=e;if(g&&typeof m!="bigint"){if(go(m)&&(m=On(m)),typeof m!="string"||!g.includes(m.length))throw new Error("Invalid key");m=m.padStart(y*2,"0")}let x;try{x=typeof m=="bigint"?m:Mn(Me("private key",m,y))}catch{throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof m}`)}return b&&(x=Ae(x,w)),bt("private key",x,mt,w),x}function l(m){if(!(m instanceof f))throw new Error("ProjectivePoint expected")}let d=ns((m,g)=>{let{px:y,py:b,pz:w}=m;if(t.eql(w,t.ONE))return{x:y,y:b};let x=m.is0();g==null&&(g=x?t.ONE:t.inv(w));let T=t.mul(y,g),k=t.mul(b,g),v=t.mul(w,g);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:k}}),u=ns(m=>{if(m.is0()){if(e.allowInfinityPoint&&!t.is0(m.py))return;throw new Error("bad point: ZERO")}let{x:g,y}=m.toAffine();if(!t.isValid(g)||!t.isValid(y))throw new Error("bad point: x or y not FE");let b=t.sqr(y),w=i(g);if(!t.eql(b,w))throw new Error("bad point: equation left != right");if(!m.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class f{constructor(g,y,b){if(this.px=g,this.py=y,this.pz=b,g==null||!t.isValid(g))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(b==null||!t.isValid(b))throw new Error("z required");Object.freeze(this)}static fromAffine(g){let{x:y,y:b}=g||{};if(!g||!t.isValid(y)||!t.isValid(b))throw new Error("invalid affine point");if(g instanceof f)throw new Error("projective point not allowed");let w=x=>t.eql(x,t.ZERO);return w(y)&&w(b)?f.ZERO:new f(y,b,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(g){let y=t.invertBatch(g.map(b=>b.pz));return g.map((b,w)=>b.toAffine(y[w])).map(f.fromAffine)}static fromHex(g){let y=f.fromAffine(s(Me("pointHex",g)));return y.assertValidity(),y}static fromPrivateKey(g){return f.BASE.multiply(c(g))}static msm(g,y){return Fl(f,n,g,y)}_setWindowSize(g){p.setWindowSize(this,g)}assertValidity(){u(this)}hasEvenY(){let{y:g}=this.toAffine();if(t.isOdd)return!t.isOdd(g);throw new Error("Field doesn't support isOdd")}equals(g){l(g);let{px:y,py:b,pz:w}=this,{px:x,py:T,pz:k}=g,v=t.eql(t.mul(y,k),t.mul(x,w)),S=t.eql(t.mul(b,k),t.mul(T,w));return v&&S}negate(){return new f(this.px,t.neg(this.py),this.pz)}double(){let{a:g,b:y}=e,b=t.mul(y,J6),{px:w,py:x,pz:T}=this,k=t.ZERO,v=t.ZERO,S=t.ZERO,_=t.mul(w,w),$=t.mul(x,x),N=t.mul(T,T),M=t.mul(w,x);return M=t.add(M,M),S=t.mul(w,T),S=t.add(S,S),k=t.mul(g,S),v=t.mul(b,N),v=t.add(k,v),k=t.sub($,v),v=t.add($,v),v=t.mul(k,v),k=t.mul(M,k),S=t.mul(b,S),N=t.mul(g,N),M=t.sub(_,N),M=t.mul(g,M),M=t.add(M,S),S=t.add(_,_),_=t.add(S,_),_=t.add(_,N),_=t.mul(_,M),v=t.add(v,_),N=t.mul(x,T),N=t.add(N,N),_=t.mul(N,M),k=t.sub(k,_),S=t.mul(N,$),S=t.add(S,S),S=t.add(S,S),new f(k,v,S)}add(g){l(g);let{px:y,py:b,pz:w}=this,{px:x,py:T,pz:k}=g,v=t.ZERO,S=t.ZERO,_=t.ZERO,$=e.a,N=t.mul(e.b,J6),M=t.mul(y,x),B=t.mul(b,T),D=t.mul(w,k),L=t.add(y,b),I=t.add(x,T);L=t.mul(L,I),I=t.add(M,B),L=t.sub(L,I),I=t.add(y,w);let A=t.add(x,k);return I=t.mul(I,A),A=t.add(M,D),I=t.sub(I,A),A=t.add(b,w),v=t.add(T,k),A=t.mul(A,v),v=t.add(B,D),A=t.sub(A,v),_=t.mul($,I),v=t.mul(N,D),_=t.add(v,_),v=t.sub(B,_),_=t.add(B,_),S=t.mul(v,_),B=t.add(M,M),B=t.add(B,M),D=t.mul($,D),I=t.mul(N,I),B=t.add(B,D),D=t.sub(M,D),D=t.mul($,D),I=t.add(I,D),M=t.mul(B,I),S=t.add(S,M),M=t.mul(A,I),v=t.mul(L,v),v=t.sub(v,M),M=t.mul(L,B),_=t.mul(A,_),_=t.add(_,M),new f(v,S,_)}subtract(g){return this.add(g.negate())}is0(){return this.equals(f.ZERO)}wNAF(g){return p.wNAFCached(this,g,f.normalizeZ)}multiplyUnsafe(g){bt("scalar",g,Yn,e.n);let y=f.ZERO;if(g===Yn)return y;if(g===mt)return this;let{endo:b}=e;if(!b)return p.unsafeLadder(this,g);let{k1neg:w,k1:x,k2neg:T,k2:k}=b.splitScalar(g),v=y,S=y,_=this;for(;x>Yn||k>Yn;)x&mt&&(v=v.add(_)),k&mt&&(S=S.add(_)),_=_.double(),x>>=mt,k>>=mt;return w&&(v=v.negate()),T&&(S=S.negate()),S=new f(t.mul(S.px,b.beta),S.py,S.pz),v.add(S)}multiply(g){let{endo:y,n:b}=e;bt("scalar",g,mt,b);let w,x;if(y){let{k1neg:T,k1:k,k2neg:v,k2:S}=y.splitScalar(g),{p:_,f:$}=this.wNAF(k),{p:N,f:M}=this.wNAF(S);_=p.constTimeNegate(T,_),N=p.constTimeNegate(v,N),N=new f(t.mul(N.px,y.beta),N.py,N.pz),w=_.add(N),x=$.add(M)}else{let{p:T,f:k}=this.wNAF(g);w=T,x=k}return f.normalizeZ([w,x])[0]}multiplyAndAddUnsafe(g,y,b){let w=f.BASE,x=(k,v)=>v===Yn||v===mt||!k.equals(w)?k.multiplyUnsafe(v):k.multiply(v),T=x(this,y).add(x(g,b));return T.is0()?void 0:T}toAffine(g){return d(this,g)}isTorsionFree(){let{h:g,isTorsionFree:y}=e;if(g===mt)return!0;if(y)return y(f,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:g,clearCofactor:y}=e;return g===mt?this:y?y(f,this):this.multiplyUnsafe(e.h)}toRawBytes(g=!0){return Wr("isCompressed",g),this.assertValidity(),o(f,this,g)}toHex(g=!0){return Wr("isCompressed",g),On(this.toRawBytes(g))}}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=Ul(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:i,isWithinCurveOrder:a}}function Xv(r){let e=wa(r);return vr(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function e8(r){let e=Xv(r),{Fp:t,n}=e,o=t.BYTES+1,s=2*t.BYTES+1;function i(D){return Ae(D,n)}function a(D){return Ml(D,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:d,isWithinCurveOrder:u}=Qv({...e,toBytes(D,L,I){let A=L.toAffine(),R=t.toBytes(A.x),P=Fn;return Wr("isCompressed",I),I?P(Uint8Array.from([L.hasEvenY()?2:3]),R):P(Uint8Array.from([4]),R,t.toBytes(A.y))},fromBytes(D){let L=D.length,I=D[0],A=D.subarray(1);if(L===o&&(I===2||I===3)){let R=Mn(A);if(!ga(R,mt,t.ORDER))throw new Error("Point is not on curve");let P=d(R),q;try{q=t.sqrt(P)}catch(ae){let le=ae instanceof Error?": "+ae.message:"";throw new Error("Point is not on curve"+le)}let z=(q&mt)===mt;return(I&1)===1!==z&&(q=t.neg(q)),{x:R,y:q}}else if(L===s&&I===4){let R=t.fromBytes(A.subarray(0,t.BYTES)),P=t.fromBytes(A.subarray(t.BYTES,2*t.BYTES));return{x:R,y:P}}else throw new Error(`Point of length ${L} was invalid. Expected ${o} compressed bytes or ${s} uncompressed bytes`)}}),f=D=>On(yo(D,e.nByteLength));function h(D){let L=n>>mt;return D>L}function p(D){return h(D)?i(-D):D}let m=(D,L,I)=>Mn(D.slice(L,I));class g{constructor(L,I,A){this.r=L,this.s=I,this.recovery=A,this.assertValidity()}static fromCompact(L){let I=e.nByteLength;return L=Me("compactSignature",L,I*2),new g(m(L,0,I),m(L,I,2*I))}static fromDER(L){let{r:I,s:A}=Gn.toSig(Me("DER",L));return new g(I,A)}assertValidity(){bt("r",this.r,mt,n),bt("s",this.s,mt,n)}addRecoveryBit(L){return new g(this.r,this.s,L)}recoverPublicKey(L){let{r:I,s:A,recovery:R}=this,P=k(Me("msgHash",L));if(R==null||![0,1,2,3].includes(R))throw new Error("recovery id invalid");let q=R===2||R===3?I+e.n:I;if(q>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let z=R&1?"03":"02",j=c.fromHex(z+f(q)),ae=a(q),le=i(-P*ae),fe=i(A*ae),xe=c.BASE.multiplyAndAddUnsafe(j,le,fe);if(!xe)throw new Error("point at infinify");return xe.assertValidity(),xe}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new g(this.r,i(-this.s),this.recovery):this}toDERRawBytes(){return rs(this.toDERHex())}toDERHex(){return Gn.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return rs(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let y={isValidPrivateKey(D){try{return l(D),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let D=U0(e.n);return H4(e.randomBytes(D),e.n)},precompute(D=8,L=c.BASE){return L._setWindowSize(D),L.multiply(BigInt(3)),L}};function b(D,L=!0){return c.fromPrivateKey(D).toRawBytes(L)}function w(D){let L=go(D),I=typeof D=="string",A=(L||I)&&D.length;return L?A===o||A===s:I?A===2*o||A===2*s:D instanceof c}function x(D,L,I=!0){if(w(D))throw new Error("first arg must be private key");if(!w(L))throw new Error("second arg must be public key");return c.fromHex(L).multiply(l(D)).toRawBytes(I)}let T=e.bits2int||function(D){let L=Mn(D),I=D.length*8-e.nBitLength;return I>0?L>>BigInt(I):L},k=e.bits2int_modN||function(D){return i(T(D))},v=ya(e.nBitLength);function S(D){return bt(`num < 2^${e.nBitLength}`,D,Yn,v),yo(D,e.nByteLength)}function _(D,L,I=$){if(["recovered","canonical"].some(Ne=>Ne in I))throw new Error("sign() legacy options not supported");let{hash:A,randomBytes:R}=e,{lowS:P,prehash:q,extraEntropy:z}=I;P==null&&(P=!0),D=Me("msgHash",D),Z6(I),q&&(D=Me("prehashed msgHash",A(D)));let j=k(D),ae=l(L),le=[S(ae),S(j)];if(z!=null&&z!==!1){let Ne=z===!0?R(t.BYTES):z;le.push(Me("extraEntropy",Ne))}let fe=Fn(...le),xe=j;function Le(Ne){let $e=T(Ne);if(!u($e))return;let Bt=a($e),at=c.BASE.multiply($e).toAffine(),Ht=i(at.x);if(Ht===Yn)return;let Cn=i(Bt*i(xe+Ht*ae));if(Cn===Yn)return;let na=(at.x===Ht?0:2)|Number(at.y&mt),oa=Cn;return P&&h(Cn)&&(oa=p(Cn),na^=1),new g(Ht,oa,na)}return{seed:fe,k2sig:Le}}let $={lowS:e.lowS,prehash:!1},N={lowS:e.lowS,prehash:!1};function M(D,L,I=$){let{seed:A,k2sig:R}=_(D,L,I),P=e;return L0(P.hash.outputLen,P.nByteLength,P.hmac)(A,R)}c.BASE._setWindowSize(8);function B(D,L,I,A=N){let R=D;if(L=Me("msgHash",L),I=Me("publicKey",I),"strict"in A)throw new Error("options.strict was renamed to lowS");Z6(A);let{lowS:P,prehash:q}=A,z,j;try{if(typeof R=="string"||go(R))try{z=g.fromDER(R)}catch(at){if(!(at instanceof Gn.Err))throw at;z=g.fromCompact(R)}else if(typeof R=="object"&&typeof R.r=="bigint"&&typeof R.s=="bigint"){let{r:at,s:Ht}=R;z=new g(at,Ht)}else throw new Error("PARSE");j=c.fromHex(I)}catch(at){if(at.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(P&&z.hasHighS())return!1;q&&(L=e.hash(L));let{r:ae,s:le}=z,fe=k(L),xe=a(le),Le=i(fe*xe),Ne=i(ae*xe),$e=c.BASE.multiplyAndAddUnsafe(j,Le,Ne)?.toAffine();return $e?i($e.x)===ae:!1}return{CURVE:e,getPublicKey:b,getSharedSecret:x,sign:M,verify:B,ProjectivePoint:c,Signature:g,utils:y}}function jv(r){return{hash:r,hmac:(e,...t)=>So(r,e,I0(...t)),randomBytes:es}}function t8(r,e){let t=n=>e8({...r,...jv(n)});return Object.freeze({...t(e),create:t})}var o8=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),r8=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),Zv=BigInt(1),n2=BigInt(2),n8=(r,e)=>(r+e/n2)/e;function Jv(r){let e=o8,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,f=Ue(u,t,e)*d%e,h=Ue(f,n2,e)*l%e,p=Ue(h,o,e)*h%e,m=Ue(p,s,e)*p%e,g=Ue(m,a,e)*m%e,y=Ue(g,c,e)*g%e,b=Ue(y,a,e)*m%e,w=Ue(b,t,e)*d%e,x=Ue(w,i,e)*p%e,T=Ue(x,n,e)*l%e,k=Ue(T,n2,e);if(!o2.eql(o2.sqr(k),r))throw new Error("Cannot find square root");return k}var o2=wo(o8,void 0,void 0,{sqrt:Jv}),_r=t8({a:BigInt(0),b:BigInt(7),Fp:o2,n:r8,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=r8,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-Zv*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=t,i=BigInt("0x100000000000000000000000000000000"),a=n8(s*r,e),c=n8(-n*r,e),l=Ae(r-a*t-c*o,e),d=Ae(-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}}}},Sr),wB=BigInt(0);var bB=_r.ProjectivePoint;function s2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function s8(r,e){let t=ut.digest(e instanceof Uint8Array?e:e.subarray());if(s2(t))return t.then(({digest:n})=>_r.sign(n,r).toDERRawBytes()).catch(n=>{throw new Da(String(n))});try{return _r.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Da(String(n))}}function i8(r,e,t){let n=ut.digest(t instanceof Uint8Array?t:t.subarray());if(s2(n))return n.then(({digest:o})=>_r.verify(e,o,r)).catch(o=>{throw new La(String(o))});try{return _r.verify(e,n.digest,r)}catch(o){throw new La(String(o))}}var Oa=class{type="secp256k1";raw;_key;constructor(e){this._key=l8(e),this.raw=a8(this._key)}toMultihash(){return Zt.digest(Rt(this))}toCID(){return Z.createV1(114,this.toMultihash())}toString(){return Ee.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}verify(e,t){return i8(this._key,t,e)}},Ma=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=c8(e),this.publicKey=new Oa(t??u8(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return s8(this.raw,e)}};function i2(r){return new Ma(r)}function a2(r){return new Oa(r)}async function d8(){let r=eS();return new Ma(r)}function a8(r){return _r.ProjectivePoint.fromHex(r).toRawBytes(!0)}function c8(r){try{return _r.getPublicKey(r,!0),r}catch(e){throw new sa(String(e))}}function l8(r){try{return _r.ProjectivePoint.fromHex(r),r}catch(e){throw new Pn(String(e))}}function u8(r){try{return _r.getPublicKey(r,!0)}catch(e){throw new sa(String(e))}}function eS(){return _r.utils.randomPrivateKey()}async function Lu(r,e){if(r==="Ed25519")return t6();if(r==="secp256k1")return d8();if(r==="RSA")return r2(e??2048);throw new Fr}function rt(r){let{Type:e,Data:t}=yn.decode(r),n=t??new Uint8Array;switch(e){case Ge.RSA:return t2(n);case Ge.Ed25519:return q0(n);case Ge.secp256k1:return a2(n);default:throw new Fr}}function Nu(r){let{Type:e,Data:t}=yn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ge.Ed25519:return q0(n);case Ge.secp256k1:return a2(n);default:throw new Fr}}function Rt(r){return yn.encode({Type:Ge[r.type],Data:r.raw})}function f8(r){let e=Sa.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ge.RSA:return Ru(t);case Ge.Ed25519:return H0(t);case Ge.secp256k1:return i2(t);default:throw new Fr}}function h8(r){return r.byteLength===64?H0(r):r.byteLength===32?i2(r):Ru(r)}function si(r){return Sa.encode({Type:Ge[r.type],Data:r.raw})}var p8=Symbol.for("nodejs.util.inspect.custom"),tS=114,Ua=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Zc]=!0;toString(){return this.string==null&&(this.string=Ee.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return Z.createV1(tS,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return te(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return te(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[p8](){return`PeerId(${this.toString()})`}},Fa=class extends Ua{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},$a=class extends Ua{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Va=class extends Ua{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},rS=2336,Ka=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Zt.digest(O(this.url))}[p8](){return`PeerId(${this.url})`}[Zc]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return Z.createV1(rS,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=F(e)),e.toString()===this.toString())}};var nS=114,m8=2336;function Re(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Ce(Ee.decode(`z${r}`));else{if(e==null)throw new C('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Ce(e.decode(r))}return gt(t)}function En(r){if(r.type==="Ed25519")return new $a({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Va({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new Fa({multihash:r.toCID().multihash,publicKey:r});throw new Fr}function g8(r){return En(r.publicKey)}function gt(r){if(sS(r))return new Fa({multihash:r});if(oS(r))try{let e=Nu(r);if(e.type==="Ed25519")return new $a({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Va({multihash:r,publicKey:e})}catch{let t=F(r.digest);return new Ka(new URL(t))}throw new so("Supplied PeerID Multihash is invalid")}function vn(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==nS&&r.code!==m8)throw new ol("Supplied PeerID CID is invalid");if(r.code===m8){let e=F(r.multihash.digest);return new Ka(new URL(e))}return gt(r.multihash)}function oS(r){return r.code===Zt.code}function sS(r){return r.code===ut.code}function as(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}function Bu(r){let e=Ce(Ee.decode(`z${r}`));return gt(e)}var yt=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return as(this.map.entries(),e=>[e[1].key,e[1].value])}forEach(e){this.map.forEach((t,n)=>{e(t.value,t.key,this)})}get(e){return this.map.get(e.toString())?.value}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),{key:e,value:t})}keys(){return as(this.map.values(),e=>e.key)}values(){return as(this.map.values(),e=>e.value)}get size(){return this.map.size}};var rr=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 as(this.set.entries(),e=>{let t=Bu(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Bu(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return as(this.set.values(),e=>Bu(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}};function y8(r,e,t,n){jo(r);let o=B4({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(uo(s),uo(i),uo(a),s<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=qr(e),l=qr(t),d=new Uint8Array(i),u=So.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function w8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function b8(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=y8(r,e,t,n),l,d=new Uint8Array(4),u=Jo(d),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<s;h++,p+=a.outputLen){let m=i.subarray(p,p+a.outputLen);u.setInt32(0,h,!1),(l=c._cloneInto(l)).update(d).digestInto(f),m.set(f.subarray(0,m.length));for(let g=1;g<o;g++){a._cloneInto(l).update(f).digestInto(f);for(let y=0;y<m.length;y++)m[y]^=f[y]}}return w8(a,c,i,l,f)}async function Ou(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=y8(r,e,t,n),d,u=new Uint8Array(4),f=Jo(u),h=new Uint8Array(c.outputLen);for(let p=1,m=0;m<s;p++,m+=c.outputLen){let g=a.subarray(m,m+c.outputLen);f.setInt32(0,p,!1),(d=l._cloneInto(d)).update(u).digestInto(h),g.set(h.subarray(0,g.length)),await L4(o-1,i,()=>{c._cloneInto(d).update(h).digestInto(h);for(let y=0;y<g.length;y++)g[y]^=h[y]})}return w8(c,l,a,d,h)}var Ha=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Ao=new Uint32Array(80),c2=class extends fo{constructor(){super(64,20,8,!1),this.A=Ha[0]|0,this.B=Ha[1]|0,this.C=Ha[2]|0,this.D=Ha[3]|0,this.E=Ha[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)Ao[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Ao[c]=Rl(Ao[c-3]^Ao[c-8]^Ao[c-14]^Ao[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=Dl(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=Ll(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=Rl(n,5)+l+a+d+Ao[c]|0;a=i,i=s,s=Rl(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(){Ao.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},x8=Qs(()=>new c2);var E8={sha1:x8,"sha2-256":Sr,"sha2-512":mo};function qa(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(E8).join(" / ");throw new C(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let s=E8[o],i=b8(s,r,e,{c:t,dkLen:n});return st.encode(i).substring(1)}var l2=Tt(Uu(),1);var aS=Math.LN2*Math.LN2,Fu=class{seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=lS(e.hashes??8),this.bits=e.bits??1024,this.buffer=ie(Math.ceil(this.bits/8))}add(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=l2.default.x86.hash32(e,this.seeds[t])%this.bits;this.setbit(o)}}has(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=l2.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=Math.floor(e/8),n=e%8,o=this.buffer[t];o|=1<<n,this.buffer[t]=o}getbit(e){let t=Math.floor(e/8),n=e%8;return(this.buffer[t]&1<<n)!==0}};function u2(r,e=.005){let t=cS(r,e);return new Fu(t)}function cS(r,e=.005){let t=Math.round(-1*r*Math.log(e)/aS),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function lS(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(ht(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var d2=64,Qr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>d2)throw new TypeError("Invalid Fingerprint Size");let s=t.hashV(e,n),i=ie(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?te(this.fp,e.fp):!1}};function cs(r,e){return Math.floor(Math.random()*(e-r))+r}var ls=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=cs(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 f2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},A8={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},I8=new globalThis.TextEncoder;function uS(r,e){let t=f2[e],n=A8[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function dS(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=f2[e],o=A8[e],s=r;for(;s.length>0;){let i=I8.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 h2(r,{size:e=32,utf8Buffer:t}={}){if(!f2[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 dS(r,e,t);r=I8.encode(r)}return uS(r,e)}var fS=Tt(Uu(),1);var za={hash:r=>Number(h2(r,{size:32})),hashV:(r,e)=>hS(za.hash(r,e))};function hS(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),O(e,"base16")}var pS=500,Ga=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??za,this.seed=e.seed??cs(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=O(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 ls(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new ls(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let s=[n,o],i=s[cs(0,s.length-1)];this.buckets[i]==null&&(this.buckets[i]=new ls(this.bucketSize));for(let a=0;a<pS;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 ls(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=O(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=O(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}},mS={1:.5,2:.84,4:.95,8:.98};function gS(r=.001){return r>.002?2:r>1e-5?4:8}function _8(r,e=.001){let t=gS(e),n=mS[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),d2);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var $u=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??za,this.seed=e.seed??cs(0,Math.pow(2,10)),this.filterSeries=[new Ga({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=O(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 Ga({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=O(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=O(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 Ya(r,e=.001,t){return new $u({..._8(r,e),...t??{}})}var Vu=class{filter;constructor(e,t){this.filter=Ya(e,t)}has(e){return this.filter.has(e.toMultihash().bytes)}add(e){this.filter.add(e.toMultihash().bytes)}remove(e){this.filter.remove?.(e.toMultihash().bytes)}};function p2(r,e=.001){return new Vu(r,e)}var m2=class extends yt{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 Qa(r){let{name:e,metrics:t}=r,n;return t!=null?n=new m2({name:e,metrics:t}):n=new yt,n}var Qn=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=st.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=st.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=st.encode(e.multihash.bytes);this.blocks.set(n,t)}};function yS(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 T8=yS;function g2(r){return T8([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var Ku=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 Qn,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:g2(s.cid)})):(this.log("sending have for %c",s.cid),t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:Er.HaveBlock})):(this.log("sending block for %c",s.cid),n.add(o),t.addBlock(s.cid,{data:i,prefix:g2(s.cid)}))}catch(i){if(i.name!=="NotFoundError")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:Er.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 Hu=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=Qa({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 Ku({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=Z.decode(o.cid),i=F(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=F(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 wS(r,e){try{if(typeof r=="string"&&r.length>0)return bS(r);if(typeof r=="number"&&isFinite(r))return e?.long?ES(r):xS(r);throw new Error("Value is not a string or number.")}catch(t){let n=vS(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function bS(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 Wu=wS;function xS(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 ES(r){let e=Math.abs(r);return e>=864e5?qu(r,e,864e5,"day"):e>=36e5?qu(r,e,36e5,"hour"):e>=6e4?qu(r,e,6e4,"minute"):e>=1e3?qu(r,e,1e3,"second"):`${r} ms`}function qu(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function vS(r){return typeof r=="object"&&r!==null&&"message"in r}function y2(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=Wu,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 m(...g){if(!m.enabled)return;let y=m,b=Number(new Date),w=b-(u||b);y.diff=w,y.prev=u,y.curr=b,u=b,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let x=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(k,v)=>{if(k==="%%")return"%";x++;let S=t.formatters[v];if(typeof S=="function"){let _=g[x];k=S.call(y,_),g.splice(x,1),x--}return k}),t.formatArgs.call(y,g),(y.log||t.log).apply(y,g)}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:()=>f!==null?f:(h!==t.namespaces&&(h=t.namespaces,p=t.enabled(d)),p),set:g=>{f=g}}),typeof t.init=="function"&&t.init(m),m}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 zu=CS(),SS=["#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 AS(){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 IS(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Wu(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 _S=console.debug??console.log??(()=>{});function TS(r){try{r?zu?.setItem("debug",r):zu?.removeItem("debug")}catch{}}function kS(){let r;try{r=zu?.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function CS(){try{return localStorage}catch{}}function PS(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var k8=y2({formatArgs:IS,save:TS,load:kS,useColors:AS,setupFormatters:PS,colors:SS,storage:zu,log:_S});var nr=k8;nr.formatters.b=r=>r==null?"undefined":Ee.baseEncode(r);nr.formatters.t=r=>r==null?"undefined":lt.baseEncode(r);nr.formatters.m=r=>r==null?"undefined":st.baseEncode(r);nr.formatters.p=r=>r==null?"undefined":r.toString();nr.formatters.c=r=>r==null?"undefined":r.toString();nr.formatters.k=r=>r==null?"undefined":r.toString();nr.formatters.a=r=>r==null?"undefined":r.toString();nr.formatters.e=r=>r==null?"undefined":r.stack??r.message;function RS(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 Io(){return{forComponent(r){return hr(r)}}}function hr(r){let e=RS(`${r}:trace`);return nr.enabled(`${r}:trace`)&&nr.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=nr(`${r}:trace`)),Object.assign(nr(r),{error:nr(`${r}:error`),trace:e})}var b2=Tt(P8(),1);var ii=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},x2=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},R8=r=>globalThis.DOMException===void 0?new x2(r):new DOMException(r),D8=r=>{let e=r.reason===void 0?R8("This operation was aborted."):r.reason;return e instanceof Error?e:R8(e)};function Xr(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(D8(f)),f.addEventListener("abort",()=>{d(D8(f))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new ii;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 E2(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 ja=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=E2(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 b2.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:ja,...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#b(){return this.#t||this.#r<this.#o}get#x(){return this.#i<this.#d}#E(){this.#i--,this.#f(),this.emit("next")}#v(){this.#w(),this.#y(),this.#u=void 0}get#S(){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.#v()},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.#S;if(this.#b&&this.#x){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#A(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=Xr(Promise.resolve(s),{milliseconds:t.timeout})),t.signal&&(s=Promise.race([s,this.#A(t.signal)]));let i=await s;n(i),this.emit("completed",i)}catch(s){if(s instanceof ii&&!t.throwOnTimeout){n();return}o(s),this.emit("error",s)}finally{this.#E()}},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 Yu(r){let e=[pr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var v2=60;function Qu(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:pr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:pr[e.type],TTL:e.TTL??e.ttl??v2,data:e.data instanceof Uint8Array?F(e.data):e.data}))}}var NS=4;function S2(r,e={}){let t=new Tr({concurrency:e.queryConcurrency??NS});return async(n,o={})=>{let s=new URLSearchParams;s.set("name",n),Yu(o.types).forEach(a=>{s.append("type",pr[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=Qu(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 L8(){return[S2("https://cloudflare-dns.com/dns-query"),S2("https://dns.google/resolve")]}var B8=Tt(A2(),1);var I2=class{lru;constructor(e){this.lru=(0,B8.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 Qu({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:pr[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??v2)*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 O8(r){return new I2(r)}var BS=1e3,Xu=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=O8(e.cacheSize??BS),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["."]=L8())}async query(e,t={}){let n=Yu(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 pr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(pr||(pr={}));function ju(r={}){return new Xu(r)}var OS=["string","number","bigint","symbol"],MS=["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 M8(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(OS.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(US(r))return"Buffer";let t=FS(r);return t||"Object"}function US(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function FS(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(MS.includes(e))return e}var E=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}};E.uint=new E(0,"uint",!0);E.negint=new E(1,"negint",!0);E.bytes=new E(2,"bytes",!0);E.string=new E(3,"string",!0);E.array=new E(4,"array",!1);E.map=new E(5,"map",!1);E.tag=new E(6,"tag",!1);E.float=new E(7,"float",!0);E.false=new E(7,"false",!0);E.true=new E(7,"true",!0);E.null=new E(7,"null",!0);E.undefined=new E(7,"undefined",!0);E.break=new E(7,"break",!0);var U=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",$S=new TextDecoder,VS=new TextEncoder;function Zu(r){return ai&&globalThis.Buffer.isBuffer(r)}function Za(r){return r instanceof Uint8Array?Zu(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var V8=ai?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):F8(r,e,t):(r,e,t)=>t-e>64?$S.decode(r.subarray(e,t)):F8(r,e,t),Ju=ai?r=>r.length>64?globalThis.Buffer.from(r):U8(r):r=>r.length>64?VS.encode(r):U8(r),Sn=r=>Uint8Array.from(r),ci=ai?(r,e,t)=>Zu(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),K8=ai?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Za(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},H8=ai?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function q8(r,e){if(Zu(r)&&Zu(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 U8(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 F8(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 _2(n)}var $8=4096;function _2(r){let e=r.length;if(e<=$8)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=$8));return t}var KS=256,Ja=class{constructor(e=KS){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=H8(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=K8(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",Xn="CBOR encode error:",ec=[];ec[23]=1;ec[24]=2;ec[25]=3;ec[26]=5;ec[27]=9;function jn(r,e,t){if(r.length-e<t)throw new Error(`${Q} not enough data for type`)}var wt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){jn(r,e,1);let n=r[e];if(t.strict===!0&&n<wt[0])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function gr(r,e,t){jn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<wt[1])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){jn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<wt[2])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){jn(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<wt[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 W8(r,e,t,n){return new U(E.uint,mr(r,e+1,n),2)}function z8(r,e,t,n){return new U(E.uint,gr(r,e+1,n),3)}function G8(r,e,t,n){return new U(E.uint,yr(r,e+1,n),5)}function Y8(r,e,t,n){return new U(E.uint,wr(r,e+1,n),9)}function kr(r,e){return Et(r,0,e.value)}function Et(r,e,t){if(t<wt[0]){let n=Number(t);r.push([e|n])}else if(t<wt[1]){let n=Number(t);r.push([e|24,n])}else if(t<wt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<wt[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<wt[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`)}}kr.encodedSize=function(e){return Et.encodedSize(e.value)};Et.encodedSize=function(e){return e<wt[0]?1:e<wt[1]?2:e<wt[2]?3:e<wt[3]?5:9};kr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Q8(r,e,t,n){return new U(E.negint,-1-mr(r,e+1,n),2)}function X8(r,e,t,n){return new U(E.negint,-1-gr(r,e+1,n),3)}function j8(r,e,t,n){return new U(E.negint,-1-yr(r,e+1,n),5)}var T2=BigInt(-1),Z8=BigInt(1);function J8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o!="bigint"){let s=-1-o;if(s>=Number.MIN_SAFE_INTEGER)return new U(E.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${Q} integers outside of the safe integer range are not supported`);return new U(E.negint,T2-BigInt(o),9)}function e1(r,e){let t=e.value,n=typeof t=="bigint"?t*T2-Z8:t*-1-1;Et(r,e.type.majorEncoded,n)}e1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*T2-Z8:t*-1-1;return n<wt[0]?1:n<wt[1]?2:n<wt[2]?3:n<wt[3]?5:9};e1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function tc(r,e,t,n){jn(r,e,t+n);let o=ci(r,e+t,e+t+n);return new U(E.bytes,o,t+n)}function e5(r,e,t,n){return tc(r,e,1,t)}function t5(r,e,t,n){return tc(r,e,2,mr(r,e+1,n))}function r5(r,e,t,n){return tc(r,e,3,gr(r,e+1,n))}function n5(r,e,t,n){return tc(r,e,5,yr(r,e+1,n))}function o5(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer bytes lengths not supported`);return tc(r,e,9,o)}function t1(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===E.string?Ju(r.value):r.value),r.encodedBytes}function li(r,e){let t=t1(e);Et(r,e.type.majorEncoded,t.length),r.push(t)}li.encodedSize=function(e){let t=t1(e);return Et.encodedSize(t.length)+t.length};li.compareTokens=function(e,t){return qS(t1(e),t1(t))};function qS(r,e){return r.length<e.length?-1:r.length>e.length?1:q8(r,e)}function rc(r,e,t,n,o){let s=t+n;jn(r,e,s);let i=new U(E.string,V8(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=ci(r,e+t,e+s)),i}function s5(r,e,t,n){return rc(r,e,1,t,n)}function i5(r,e,t,n){return rc(r,e,2,mr(r,e+1,n),n)}function a5(r,e,t,n){return rc(r,e,3,gr(r,e+1,n),n)}function c5(r,e,t,n){return rc(r,e,5,yr(r,e+1,n),n)}function l5(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer string lengths not supported`);return rc(r,e,9,o,n)}var u5=li;function ui(r,e,t,n){return new U(E.array,n,t)}function d5(r,e,t,n){return ui(r,e,1,t)}function f5(r,e,t,n){return ui(r,e,2,mr(r,e+1,n))}function h5(r,e,t,n){return ui(r,e,3,gr(r,e+1,n))}function p5(r,e,t,n){return ui(r,e,5,yr(r,e+1,n))}function m5(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer array lengths not supported`);return ui(r,e,9,o)}function g5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return ui(r,e,1,1/0)}function r1(r,e){Et(r,E.array.majorEncoded,e.value)}r1.compareTokens=kr.compareTokens;r1.encodedSize=function(e){return Et.encodedSize(e.value)};function di(r,e,t,n){return new U(E.map,n,t)}function y5(r,e,t,n){return di(r,e,1,t)}function w5(r,e,t,n){return di(r,e,2,mr(r,e+1,n))}function b5(r,e,t,n){return di(r,e,3,gr(r,e+1,n))}function x5(r,e,t,n){return di(r,e,5,yr(r,e+1,n))}function E5(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer map lengths not supported`);return di(r,e,9,o)}function v5(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 n1(r,e){Et(r,E.map.majorEncoded,e.value)}n1.compareTokens=kr.compareTokens;n1.encodedSize=function(e){return Et.encodedSize(e.value)};function S5(r,e,t,n){return new U(E.tag,t,1)}function A5(r,e,t,n){return new U(E.tag,mr(r,e+1,n),2)}function I5(r,e,t,n){return new U(E.tag,gr(r,e+1,n),3)}function _5(r,e,t,n){return new U(E.tag,yr(r,e+1,n),5)}function T5(r,e,t,n){return new U(E.tag,wr(r,e+1,n),9)}function o1(r,e){Et(r,E.tag.majorEncoded,e.value)}o1.compareTokens=kr.compareTokens;o1.encodedSize=function(e){return Et.encodedSize(e.value)};var XS=20,jS=21,ZS=22,JS=23;function k5(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Q} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new U(E.null,null,1):new U(E.undefined,void 0,1)}function C5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return new U(E.break,void 0,1)}function k2(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 U(E.float,r,e)}function P5(r,e,t,n){return k2(C2(r,e+1),3,n)}function R5(r,e,t,n){return k2(P2(r,e+1),5,n)}function D5(r,e,t,n){return k2(O5(r,e+1),9,n)}function s1(r,e,t){let n=e.value;if(n===!1)r.push([E.float.majorEncoded|XS]);else if(n===!0)r.push([E.float.majorEncoded|jS]);else if(n===null)r.push([E.float.majorEncoded|ZS]);else if(n===void 0)r.push([E.float.majorEncoded|JS]);else{let o,s=!1;(!t||t.float64!==!0)&&(N5(n),o=C2(jr,1),n===o||Number.isNaN(n)?(jr[0]=249,r.push(jr.slice(0,3)),s=!0):(B5(n),o=P2(jr,1),n===o&&(jr[0]=250,r.push(jr.slice(0,5)),s=!0))),s||(eA(n),o=O5(jr,1),jr[0]=251,r.push(jr.slice(0,9)))}}s1.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){N5(n);let o=C2(jr,1);if(n===o||Number.isNaN(n))return 3;if(B5(n),o=P2(jr,1),n===o)return 5}return 9};var L5=new ArrayBuffer(9),Cr=new DataView(L5,1),jr=new Uint8Array(L5,0);function N5(r){if(r===1/0)Cr.setUint16(0,31744,!1);else if(r===-1/0)Cr.setUint16(0,64512,!1);else if(Number.isNaN(r))Cr.setUint16(0,32256,!1);else{Cr.setFloat32(0,r);let e=Cr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Cr.setUint16(0,31744,!1);else if(t===0)Cr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Cr.setUint16(0,0):o<-14?Cr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Cr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function C2(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 B5(r){Cr.setFloat32(0,r,!1)}function P2(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 eA(r){Cr.setFloat64(0,r,!1)}function O5(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)}s1.compareTokens=kr.compareTokens;function ve(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function i1(r){return()=>{throw new Error(`${Q} ${r}`)}}var K=[];for(let r=0;r<=23;r++)K[r]=ve;K[24]=W8;K[25]=z8;K[26]=G8;K[27]=Y8;K[28]=ve;K[29]=ve;K[30]=ve;K[31]=ve;for(let r=32;r<=55;r++)K[r]=ve;K[56]=Q8;K[57]=X8;K[58]=j8;K[59]=J8;K[60]=ve;K[61]=ve;K[62]=ve;K[63]=ve;for(let r=64;r<=87;r++)K[r]=e5;K[88]=t5;K[89]=r5;K[90]=n5;K[91]=o5;K[92]=ve;K[93]=ve;K[94]=ve;K[95]=i1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)K[r]=s5;K[120]=i5;K[121]=a5;K[122]=c5;K[123]=l5;K[124]=ve;K[125]=ve;K[126]=ve;K[127]=i1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)K[r]=d5;K[152]=f5;K[153]=h5;K[154]=p5;K[155]=m5;K[156]=ve;K[157]=ve;K[158]=ve;K[159]=g5;for(let r=160;r<=183;r++)K[r]=y5;K[184]=w5;K[185]=b5;K[186]=x5;K[187]=E5;K[188]=ve;K[189]=ve;K[190]=ve;K[191]=v5;for(let r=192;r<=215;r++)K[r]=S5;K[216]=A5;K[217]=I5;K[218]=_5;K[219]=T5;K[220]=ve;K[221]=ve;K[222]=ve;K[223]=ve;for(let r=224;r<=243;r++)K[r]=i1("simple values are not supported");K[244]=ve;K[245]=ve;K[246]=ve;K[247]=k5;K[248]=i1("simple values are not supported");K[249]=P5;K[250]=R5;K[251]=D5;K[252]=ve;K[253]=ve;K[254]=ve;K[255]=C5;var Zr=[];for(let r=0;r<24;r++)Zr[r]=new U(E.uint,r,1);for(let r=-1;r>=-24;r--)Zr[31-r]=new U(E.negint,r,1);Zr[64]=new U(E.bytes,new Uint8Array(0),1);Zr[96]=new U(E.string,"",1);Zr[128]=new U(E.array,0,1);Zr[160]=new U(E.map,0,1);Zr[244]=new U(E.false,!1,1);Zr[245]=new U(E.true,!0,1);Zr[246]=new U(E.null,null,1);function M5(r){switch(r.type){case E.false:return Sn([244]);case E.true:return Sn([245]);case E.null:return Sn([246]);case E.bytes:return r.value.length?void 0:Sn([64]);case E.string:return r.value===""?Sn([96]):void 0;case E.array:return r.value===0?Sn([128]):void 0;case E.map:return r.value===0?Sn([160]):void 0;case E.uint:return r.value<24?Sn([Number(r.value)]):void 0;case E.negint:if(r.value>=-24)return Sn([31-Number(r.value)])}}var rA={float64:!1,mapSorter:sA,quickEncodeToken:M5};function nA(){let r=[];return r[E.uint.major]=kr,r[E.negint.major]=e1,r[E.bytes.major]=li,r[E.string.major]=u5,r[E.array.major]=r1,r[E.map.major]=n1,r[E.tag.major]=o1,r[E.float.major]=s1,r}var U5=nA(),R2=new Ja,c1=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(`${Xn} object contains circular references`);return new r(t,e)}},_o={null:new U(E.null,null),undefined:new U(E.undefined,void 0),true:new U(E.true,!0),false:new U(E.false,!1),emptyArray:new U(E.array,0),emptyMap:new U(E.map,0)},To={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new U(E.float,r):r>=0?new U(E.uint,r):new U(E.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new U(E.uint,r):new U(E.negint,r)},Uint8Array(r,e,t,n){return new U(E.bytes,r)},string(r,e,t,n){return new U(E.string,r)},boolean(r,e,t,n){return r?_o.true:_o.false},null(r,e,t,n){return _o.null},undefined(r,e,t,n){return _o.undefined},ArrayBuffer(r,e,t,n){return new U(E.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new U(E.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[_o.emptyArray,new U(E.break)]:_o.emptyArray;n=c1.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=a1(i,t,n);return t.addBreakTokens?[new U(E.array,r.length),o,new U(E.break)]:[new U(E.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?[_o.emptyMap,new U(E.break)]:_o.emptyMap;n=c1.createCheck(n,r);let a=[],c=0;for(let l of s)a[c++]=[a1(l,t,n),a1(o?r.get(l):r[l],t,n)];return oA(a,t),t.addBreakTokens?[new U(E.map,i),a,new U(E.break)]:[new U(E.map,i),a]}};To.Map=To.Object;To.Buffer=To.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))To[`${r}Array`]=To.DataView;function a1(r,e={},t){let n=M8(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||To[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=To[n];if(!s)throw new Error(`${Xn} unsupported type: ${n}`);return s(r,n,e,t)}function oA(r,e){e.mapSorter&&r.sort(e.mapSorter)}function sA(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=U5[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function F5(r,e,t,n){if(Array.isArray(e))for(let o of e)F5(r,o,t,n);else t[e.type.major](r,e,n)}function D2(r,e,t){let n=a1(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 Ja(i);if(s(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return Za(a.chunks[0])}}return R2.reset(),F5(R2,n,e,t),R2.toBytes(!0)}function ds(r,e){return e=Object.assign({},rA,e),D2(r,U5,e)}var iA={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},l1=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=Zr[e];if(t===void 0){let n=K[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}},nc=Symbol.for("DONE"),u1=Symbol.for("BREAK");function aA(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=fi(e,t);if(s===u1){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(s===nc)throw new Error(`${Q} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function cA(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=fi(e,t);if(a===u1){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===nc)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=fi(e,t);if(c===nc)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 fi(r,e){if(r.done())return nc;let t=r.next();if(t.type===E.break)return u1;if(t.type.terminal)return t.value;if(t.type===E.array)return aA(t,r,e);if(t.type===E.map)return cA(t,r,e);if(t.type===E.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=fi(r,e);return e.tags[t.value](n)}throw new Error(`${Q} tag not supported (${t.value})`)}throw new Error("unsupported")}function L2(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Q} data to decode must be a Uint8Array`);e=Object.assign({},iA,e);let t=e.tokenizer||new l1(r,e),n=fi(t,e);if(n===nc)throw new Error(`${Q} did not find any content to decode`);if(n===u1)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function Jr(r,e){let[t,n]=L2(r,e);if(n.length>0)throw new Error(`${Q} too many terminals, data makes no sense`);return t}var Zn="/",$5=new TextEncoder().encode(Zn),d1=$5[0],De=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=O(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]!==d1)throw new Error("Invalid key")}toString(e="utf8"){return F(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Zn))}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=$5),this._buf[0]!==d1){let e=new Uint8Array(this._buf.byteLength+1);e.fill(d1,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===d1;)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(Zn).slice(1)}type(){return lA(this.baseNamespace())}name(){return uA(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Zn)||(e+=Zn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Zn):new r(e.slice(0,-1).join(Zn))}child(e){return this.toString()===Zn?e:e.toString()===Zn?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(),...dA(e.map(t=>t.namespaces()))])}};function lA(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function uA(r){let e=r.split(":");return e[e.length-1]}function dA(r){return[].concat(...r)}function f1({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*fA(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],s=Z.asCID(n);s!=null?yield[o.join("/"),s]:typeof n=="object"&&(yield*B2(n,o))}else{let t=Z.asCID(e);t!=null?yield[r.join("/"),t]:yield*B2(e,r)}}function*B2(r,e){if(r==null||r instanceof Uint8Array)return;let t=Z.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let s=[...e,n];yield*fA(s,o)}}function*hA(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&Z.asCID(n)==null&&(yield*O2(n,o))}else yield*O2(e,r)}function*O2(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let o=[...e,t];yield o.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&Z.asCID(n)==null&&(yield*hA(o,n))}}function pA(r,e){let t=r;for(let[n,o]of e.entries()){if(t=t[o],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(i=>`[${JSON.stringify(i)}]`).join("")}`);let s=Z.asCID(t);if(s!=null)return{value:s,remaining:e.slice(n+1).join("/")}}return{value:t}}var M2=class{cid;bytes;value;asBlock;constructor({cid:e,bytes:t,value:n}){if(e==null||t==null||typeof n>"u")throw new Error("Missing required argument");this.cid=e,this.bytes=t,this.value=n,this.asBlock=this,Object.defineProperties(this,{cid:f1(),bytes:f1(),value:f1(),asBlock:f1()})}links(){return B2(this.value,[])}tree(){return O2(this.value,[])}get(e="/"){return pA(this.value,e.split("/").filter(Boolean))}};function V5({bytes:r,cid:e,value:t,codec:n}){let o=t!==void 0?t:n?.decode(r);if(o===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new M2({cid:e,bytes:r,value:o})}var W5="/pin/",K5="/pinned-block/",U2=mn,H5=1;function q5(r){return r.version===0&&(r=r.toV1()),new De(`${W5}${r.toString(U2)}`)}var h1=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=q5(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 dr({concurrency:H5});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>te(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,ds(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),s=await this.blockstore.get(e,n),i=V5({bytes:s,cid:e,codec:o});yield e;for await(let[,a]of i.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new De(`${K5}${U2.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=Jr(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")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,ds(s),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=q5(e),o=await this.datastore.get(n,t),s=Jr(o);await this.datastore.delete(n,t);let i=new dr({concurrency:H5});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=>te(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:W5+(e.cid!=null?`${e.cid.toString(mn)}`:"")},e)){let o=Z.parse(t.toString().substring(5),mn),s=Jr(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new De(`${K5}${U2.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}};var F2=1,$2=5;var oc=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},ko=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},sc=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},ic=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var mA=5,p1=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??mA}async start(){await qt(...this.routers)}async stop(){await Wt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new ko("No content routers available");let n=new zt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of Mt(n.toGenerator(),...hi(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 ko("No content routers available");await Promise.all(hi(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(hi(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(hi(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new ko("No peer routers available");let n=this,o=Mt(...hi(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 Be("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new ko("No peer routers available");for await(let n of Mt(...hi(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function hi(r,e){return r.filter(t=>t[e]!=null)}var Co={},pi=r=>{r.addEventListener("message",e=>{pi.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{pi.dispatchEvent("message",r,e)})};pi.addEventListener=(r,e)=>{Co[r]==null&&(Co[r]=[]),Co[r].push(e)};pi.removeEventListener=(r,e)=>{Co[r]!=null&&(Co[r]=Co[r].filter(t=>t===e))};pi.dispatchEvent=function(r,e,t){Co[r]!=null&&Co[r].forEach(n=>n(e,t))};var V2=pi;var K2="lock:worker:request-read",H2="lock:worker:release-read",q2="lock:master:grant-read",W2="lock:worker:request-write",z2="lock:worker:release-write",G2="lock:master:grant-write";var z5=(r=21)=>Math.random().toString().substring(2);var G5=(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)})}}}))},Y5=(r,e,t,n)=>async()=>{let o=z5();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)})},gA={singleProcess:!1},Q5=r=>{if(r=Object.assign({},gA,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return V2.addEventListener("message",G5(t,"requestReadLock",K2,H2,q2)),V2.addEventListener("message",G5(t,"requestWriteLock",W2,z2,G2)),t}return{isWorker:!0,readLock:t=>Y5(t,K2,q2,H2),writeLock:t=>Y5(t,W2,G2,z2)}};var fs={},Po;async function Y2(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Xr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var yA=(r,e)=>{if(Po.isWorker===!0)return{readLock:Po.readLock(r,e),writeLock:Po.writeLock(r,e)};let t=new Tr({concurrency:1}),n;return{async readLock(){if(n!=null)return Y2(n,e);n=new Tr({concurrency:e.concurrency,autoStart:!1});let o=n,s=Y2(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),s},async writeLock(){return n=null,Y2(t,e)}}},wA={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function ac(r){let e=Object.assign({},wA,r);return Po==null&&(Po=Q5(e),Po.isWorker!==!0&&(Po.addEventListener("requestReadLock",t=>{fs[t.data.name]!=null&&fs[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Po.addEventListener("requestWriteLock",async t=>{fs[t.data.name]!=null&&fs[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),fs[e.name]==null&&(fs[e.name]=yA(e.name,e)),fs[e.name]}var m1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=ac({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await qt(this.child),this.started=!0}async stop(){await Wt(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 Q2=new De("/version"),X5=1;async function j5(r){if(!await r.has(Q2)){await r.put(Q2,O(`${X5}`));return}let e=await r.get(Q2),t=F(e);if(parseInt(t,10)!==X5)throw new Error("Unknown datastore version, a datastore migration may be required")}var Z2={};Xe(Z2,{code:()=>j2,decode:()=>TA,decodeOptions:()=>AA,encode:()=>_A,encodeOptions:()=>vA,name:()=>IA,toByteView:()=>J5});var Z5=42;function J5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function bA(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Z.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new U(E.tag,Z5),new U(E.bytes,t)]}function xA(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function EA(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 X2={float64:!0,typeEncoders:{Object:bA,undefined:xA,number:EA}},vA={...X2,typeEncoders:{...X2.typeEncoders}};function SA(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return Z.decode(r.subarray(1))}var g1={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};g1.tags[Z5]=SA;var AA={...g1,tags:g1.tags.slice()},IA="dag-cbor",j2=113,_A=r=>ds(r,X2),TA=r=>Jr(J5(r),g1);var sp={};Xe(sp,{code:()=>op,decode:()=>tg,encode:()=>eg,format:()=>UA,name:()=>MA,parse:()=>$A,stringify:()=>UA});var J2=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===E.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===E.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[E.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)}[E.negint.major](e,t){this[E.uint.major](e,t)}[E.bytes.major](e,t){throw new Error(`${Xn} unsupported type: Uint8Array`)}[E.string.major](e,t){this.prefix(e);let n=Ju(JSON.stringify(t.value));e.push(n.length>32?Za(n):n)}[E.array.major](e,t){this.prefix(e),this.inRecursive.push({type:E.array,elements:0}),e.push([91])}[E.map.major](e,t){this.prefix(e),this.inRecursive.push({type:E.map,elements:0}),e.push([123])}[E.tag.major](e,t){}[E.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(i.type===E.array)e.push([93]);else if(i.type===E.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(`${Xn} 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)}};function kA(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Xn} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==E.string||n.type!==E.string)throw new Error(`${Xn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Xn} unexpected duplicate map keys, this is not supported`)}var CA={addBreakTokens:!0,mapSorter:kA};function ep(r,e){return e=Object.assign({},CA,e),D2(r,new J2,e)}var mi=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 U(E.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 U(E.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new U(i>=0?E.uint:E.negint,i,this._pos-e):new U(i>=0?E.uint:E.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 U(E.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 U(E.string,_2(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 U(E.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new U(E.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new U(E.null,null,4);case 102:return this.expect([102,97,108,115,101]),new U(E.false,!1,5);case 116:return this.expect([116,114,117,101]),new U(E.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 U(E.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 U(E.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 U(E.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 U(E.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 tp(r,e){return e=Object.assign({tokenizer:new mi(r,e)},e),Jr(r,e)}function RA(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function DA(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Z.asCID(r);if(!e)return null;let t=e.toString();return[new U(E.map,1/0,1),new U(E.string,"/",1),new U(E.string,t,t.length),new U(E.break,void 0,1)]}function y1(r){let e=st.encode(r).slice(1);return[new U(E.map,1/0,1),new U(E.string,"/",1),new U(E.map,1/0,1),new U(E.string,"bytes",5),new U(E.string,e,e.length),new U(E.break,void 0,1),new U(E.break,void 0,1)]}function en(r){return y1(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function LA(r){return y1(new Uint8Array(r))}function NA(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function BA(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 OA={typeEncoders:{Object:DA,Buffer:y1,Uint8Array:y1,Int8Array:en,Uint16Array:en,Int16Array:en,Uint32Array:en,Int32Array:en,Float32Array:en,Float64Array:en,Uint8ClampedArray:en,BigInt64Array:en,BigUint64Array:en,DataView:en,ArrayBuffer:LA,undefined:NA,number:BA}},rp=class extends mi{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===E.map){let t=this._next();if(t.type===E.string&&t.value==="/"){let n=this._next();if(n.type===E.string){if(this._next().type!==E.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new U(E.tag,42,0)}if(n.type===E.map){let o=this._next();if(o.type===E.string&&o.value==="bytes"){let s=this._next();if(s.type===E.string){for(let a=0;a<2;a++)if(this._next().type!==E.break)throw new Error("Invalid encoded Bytes form");let i=st.decode(`m${s.value}`);return new U(E.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},np={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};np.tags[42]=Z.parse;var MA="dag-json",op=297,eg=r=>ep(r,OA),tg=r=>{let e=RA(r),t=Object.assign(np,{tokenizer:new rp(e,np)});return tp(e,t)},UA=r=>FA.decode(eg(r));var FA=new TextDecoder,$A=r=>tg(VA.encode(r)),VA=new TextEncoder;var dp={};Xe(dp,{code:()=>up,createLink:()=>dg,createNode:()=>ug,decode:()=>eI,encode:()=>JA,name:()=>ZA,prepare:()=>cp,validate:()=>lp});var KA=new TextDecoder;function ip(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 w1(r,e){let t;[t,e]=ip(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 rg(r,e){let t;return[t,e]=ip(r,e),[t&7,t>>3,e]}function HA(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=rg(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]=w1(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]=w1(r,n),e.Name=KA.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]=ip(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 ng(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=rg(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]=w1(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]=w1(r,t),n.push(HA(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 sg=new TextEncoder,og=2**32,qA=2**31;function WA(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=cc(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=sg.encode(r.Name);t-=n.length,e.set(n,t),t=cc(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=cc(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function ig(r){let e=GA(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=cc(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let s=WA(r.Links[o],t.subarray(0,n));n-=s,n=cc(t,n,s)-1,t[n]=18}return t}function zA(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+gi(t)}if(typeof r.Name=="string"){let t=sg.encode(r.Name).length;e+=1+t+gi(t)}return typeof r.Tsize=="number"&&(e+=1+gi(r.Tsize)),e}function GA(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+gi(t)}if(r.Links)for(let t of r.Links){let n=zA(t);e+=1+n+gi(n)}return e}function cc(r,e,t){e-=gi(t);let n=e;for(;t>=qA;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function gi(r){return r%2===0&&r++,Math.floor((YA(r)+6)/7)}function YA(r){let e=0;return r>=og&&(r=Math.floor(r/og),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+QA[r]}var QA=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var XA=["Data","Links"],jA=["Hash","Name","Tsize"],ap=new TextEncoder;function cg(r,e){if(r===e)return 0;let t=r.Name?ap.encode(r.Name):[],n=e.Name?ap.encode(e.Name):[],o=t.length,s=n.length;for(let i=0,a=Math.min(o,s);i<a;++i)if(t[i]!==n[i]){o=t[i],s=n[i];break}return o<s?-1:s<o?1:0}function ag(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function lg(r){if(typeof r.asCID=="object"){let t=Z.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=Z.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=Z.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=Z.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function cp(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=ap.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(lg),e.Links.sort(cg);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function lp(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!ag(r,XA))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!ag(t,jA))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&cg(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function ug(r,e=[]){return cp({Data:r,Links:e})}function dg(r,e,t){return lg({Hash:t,Name:r,Tsize:e})}function fg(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var ZA="dag-pb",up=112;function JA(r){lp(r);let e={};return r.Links&&(e.Links=r.Links.map(t=>{let n={};return t.Hash&&(n.Hash=t.Hash.bytes),t.Name!==void 0&&(n.Name=t.Name),t.Tsize!==void 0&&(n.Tsize=t.Tsize),n})),r.Data&&(e.Data=r.Data),ig(e)}function eI(r){let e=fg(r),t=ng(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=Z.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}function yi(r){return r?.then!=null}function hg(r=[],e){let t={[up]:dp,[ca]:la,[j2]:Z2,[op]:sp,[a0]:El};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);yi(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new ic(`Could not load codec for ${n}`)}}function pg(r=[],e){let t={[ut.code]:ut,[Sl.code]:Sl,[Zt.code]:Zt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);yi(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new sc(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var Pr=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var Jn=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 b1=0,x1=class extends Jn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===b1||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===b1)return e.multihash.digest;if(this.child==null)throw new Pr;return this.child.get(e)}has(e){return e.multihash.code===b1?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==b1&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function tI(r){return r[Symbol.asyncIterator]!=null}function rI(r,e){let t=0;if(tI(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Us(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=rI;function nI(r){return r[Symbol.asyncIterator]!=null}function mg(r){return r?.then!=null}function oI(r,e){let t=0;if(nI(r))return async function*(){for await(let c of r){let l=e(c,t++);mg(l)&&await l,yield c}}();let n=Us(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++);mg(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var hs=oI;var E1=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new x1(e.blockstore),this.getHasher=e.getHasher}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=hs(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)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new H("blocks:get:providers:get",e));let o=await gg(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new H("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new H("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(e,o,t))),o}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(hs(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new H("blocks:get-many:providers:get",n));let s=await gg(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new H("blocks:get-many:blockstore:put",n)),await this.child.put(n,s,t),t.onProgress?.(new H("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(n,s,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)}},v1=class extends E1{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await qt(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Wt(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 fp({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},fp=class extends E1{closeController;constructor(e,t){super(e),this.closeController=new AbortController,V(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=me([this.closeController.signal,n.signal]);V(1/0,o);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=me([this.closeController.signal,t.signal]);V(1/0,n);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=me([this.closeController.signal,t.signal]);V(1/0,n);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=me([this.closeController.signal,t.signal]);V(1/0,n);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=me([this.closeController.signal,t.signal]);V(1/0,n);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=me([this.closeController.signal,t.signal]);V(1/0,n);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=me([this.closeController.signal,t.signal]);V(1/0,n);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=me([this.closeController.signal,e.signal]);V(1/0,t);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function sI(r){return typeof r.retrieve=="function"}var iI=(r,e)=>{if(e==null)throw new C(`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`);return async t=>{let n,o=e.digest(t);if(yi(o)?n=await o:n=o,!te(n.digest,r.multihash.digest))throw new so("Hash of downloaded block did not match multihash from passed CID")}};async function gg(r,e,t,n){let o=iI(r,t),s=new AbortController,i=me([s.signal,n.signal]);V(1/0,s.signal,i);let a=[];for(let c of e)sI(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 hp=Tt(Uu(),1);var aI=Math.LN2*Math.LN2,S1=class r{static create(e,t=.005){let n=cI(e,t);return new r(n)}seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=lI(e.hashes??8),this.bits=e.bits??1024,this.buffer=ie(Math.ceil(this.bits/8))}add(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=hp.default.x86.hash32(e,this.seeds[t])%this.bits;this.setbit(o)}}has(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=hp.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 cI(r,e=.005){let t=Math.round(-1*r*Math.log(e)/aI),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function lI(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(ht(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var ps=class extends pe{intialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),V(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=S1.create(this.maxProviders)}async retrieve(e,t={}){let n=st.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let s=J();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 dr({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=J(),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 oc(`Found ${s} of ${t} ${this.name} providers for ${e}`)}).catch(i=>{this.log.error("error searching routing for potential session peers for %c",e,i.errors??i),o.reject(i)}),o.promise}};var A1=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??Io(),this.log=this.logger.forComponent("helia"),this.getHasher=pg(e.hashers,e.loadHasher),this.getCodec=hg(e.codecs,e.loadCodec),this.dns=e.dns??ju(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new p1(t,{routers:(e.routers??[]).flatMap(o=>{let s=[o];return o[un]!=null&&s.push(o[un]),o[dn]!=null&&s.push(o[dn]),s}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new v1(t);this.pins=new h1(e.datastore,n,this.getCodec),this.blockstore=new m1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await j5(this.datastore),await qt(this.blockstore,this.datastore,this.routing)}async stop(){await Wt(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 pp=class extends ps{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.toMultihash().bytes}equals(e,t){return e.equals(t)}};function yg(r,e){return new pp(r,e)}var I1=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 mp=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 _1(r){let{name:e,metrics:t}=r,n;return t!=null?n=new mp({name:e,metrics:t}):n=new Map,n}function uI(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Ot(r);e.push(t),r=r.slice(he(t))}return e}var wg=uI;var T1=class extends pe{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),V(1/0,this),this.peers=Qa({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=_1({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=F(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 ur(this,"block",t?.signal,{filter:a=>te(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await ur(this,"presence",t?.signal,{filter:i=>te(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=J(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Qn;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=F(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Qn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:et.WantHave,priority:1}),await this.network.sendMessage(t,o),(await ur(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&te(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 Qn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:et.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await ur(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&te(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=F(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=wg(o.prefix),i=s[0],a=s[1],c=s[2],l=c===ut.code?ut: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=Z.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=F(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=Z.decode(o);this.log("received %s from %p for %c",s,e,i),this.safeDispatchEvent("presence",{detail:{sender:e,cid:i,has:s===Er.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Qn(!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 k1=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 I1(e),this.network=new Pl(e,t),this.peerWantLists=new Hu({...e,network:this.network},t),this.wantList=new T1({...e,network:this.network},t)}createSession(e={}){return yg({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=me([n.signal,t.signal]);V(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 bg=(r,e={})=>new k1(r,e);var gp=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=bg(e,{hashLoader:{getHasher:async o=>n(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 yp(r={}){return e=>new gp(e,r)}var C1=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 xg=45,dI=15,wi=new C1;function wp(r){if(!(r.length>dI))return wi.new(r).parseWith(()=>wi.readIPv4Addr())}function bp(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>xg))return wi.new(r).parseWith(()=>wi.readIPv6Addr())}function P1(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>xg))return wi.new(r).parseWith(()=>wi.readIPAddr())}function bi(r){return!!wp(r)}function xi(r){return!!bp(r)}function R1(r){return!!P1(r)}var vg=Tt(Eg(),1),fI=["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"],hI=fI.map(r=>new vg.Netmask(r));function xp(r){for(let e of hI)if(e.contains(r))return!0;return!1}function pI(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function mI(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 xp(o)}function gI(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function yI(r){let e=r.split(":"),t=e[e.length-1];return xp(t)}function wI(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 Nt(r){return bi(r)?xp(r):pI(r)?mI(r):gI(r)?yI(r):xi(r)?wI(r):void 0}var DK=parseInt("0xFFFF",16),LK=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var Ig=bi,SI=xi,Ep=function(r){let e=0;if(r=r.toString().trim(),Ig(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(SI(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=Ig(t[n]),i;s&&(i=Ep(t[n]),t[n]=F(i.slice(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,F(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")},_g=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 Ei={},vp={},II=[[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"]];II.forEach(r=>{let e=_I(...r);vp[e.code]=e,Ei[e.name]=e});function _I(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function ee(r){if(typeof r=="number"){if(vp[r]!=null)return vp[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Ei[r]!=null)return Ei[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var pH=ee("ip4"),mH=ee("ip6"),gH=ee("ipcidr");function _p(r,e){switch(ee(r).code){case 4:case 41:return kI(e);case 42:return Ip(e);case 6:case 273:case 33:case 132:return Cg(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Ip(e);case 421:return DI(e);case 444:return kg(e);case 445:return kg(e);case 466:return RI(e);case 481:return globalThis.encodeURIComponent(Ip(e));default:return F(e,"base16")}}function Tp(r,e){switch(ee(r).code){case 4:return Tg(e);case 41:return Tg(e);case 42:return Ap(e);case 6:case 273:case 33:case 132:return kp(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Ap(e);case 421:return CI(e);case 444:return LI(e);case 445:return NI(e);case 466:return PI(e);case 481:return Ap(globalThis.decodeURIComponent(e));default:return O(e,"base16")}}var Sp=Object.values(Nn).map(r=>r.decoder),TI=function(){let r=Sp[0].or(Sp[1]);return Sp.slice(2).forEach(e=>r=r.or(e)),r}();function Tg(r){if(!R1(r))throw new Error("invalid ip address");return Ep(r)}function kI(r){let e=_g(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!R1(e))throw new Error("invalid ip address");return e}function kp(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function Cg(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function Ap(r){let e=O(r),t=Uint8Array.from(Ve(e.length));return Pe([t,e],t.length+e.length)}function Ip(r){let e=Ot(r);if(r=r.slice(he(e)),r.length!==e)throw new Error("inconsistent lengths");return F(r)}function CI(r){let e;r[0]==="Q"||r[0]==="1"?e=Ce(Ee.decode(`z${r}`)).bytes:e=Z.parse(r).multihash.bytes;let t=Uint8Array.from(Ve(e.length));return Pe([t,e],t.length+e.length)}function PI(r){let e=TI.decode(r),t=Uint8Array.from(Ve(e.length));return Pe([t,e],t.length+e.length)}function RI(r){let e=Ot(r),t=r.slice(he(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+F(t,"base64url")}function DI(r){let e=Ot(r),t=r.slice(he(e));if(t.length!==e)throw new Error("inconsistent lengths");return F(t,"base58btc")}function LI(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=kp(n);return Pe([t,o],t.length+o.length)}function NI(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=kp(n);return Pe([t,o],t.length+o.length)}function kg(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=F(e,"base32"),o=Cg(t);return`${n}:${o}`}function Pg(r){r=Cp(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=ee(i);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw Dg("invalid address: "+r);if(a.path===!0){n=Cp(o.slice(s).join("/")),e.push([a.code,Tp(a.code,n)]),t.push([a.code,n]);break}let c=Tp(a.code,o[s]);e.push([a.code,c]),t.push([a.code,_p(a.code,c)])}return{string:Rg(t),bytes:Rp(e),tuples:e,stringTuples:t,path:n}}function Pp(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=Ot(r,o),i=he(s),a=ee(s),c=BI(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 Dg("Invalid address Uint8Array: "+F(r,"base16"));e.push([s,l]);let d=_p(s,l);if(t.push([s,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:Rg(t),tuples:e,stringTuples:t,path:n}}function Rg(r){let e=[];return r.map(t=>{let n=ee(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Cp(e.join("/"))}function Rp(r){return Pe(r.map(e=>{let t=ee(e[0]),n=Uint8Array.from(Ve(t.code));return e.length>1&&e[1]!=null&&(n=Pe([n,e[1]])),n}))}function BI(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Ot(e instanceof Uint8Array?e:Uint8Array.from(e));return t+he(t)}}function Cp(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function Dg(r){return new Error("Error parsing address: "+r)}var OI=Symbol.for("nodejs.util.inspect.custom"),Lp=Symbol.for("@multiformats/js-multiaddr/multiaddr"),MI=[ee("dns").code,ee("dns4").code,ee("dns6").code,ee("dnsaddr").code],Dp=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},D1=class r{bytes;#e;#t;#r;#o;[Lp]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=Pp(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=Pg(e)}else if(Ro(e))t=Pp(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=ee("tcp"),a=ee("udp"),c=ee("ip4"),l=ee("ip6"),d=ee("dns6"),u=ee("ip6zone");for(let[h,p]of this.stringTuples())h===u.code&&(s=`%${p??""}`),MI.includes(h)&&(t=i.name,o=443,n=`${p??""}${s}`,e=h===d.code?6:4),(h===i.code||h===a.code)&&(t=ee(h).name,o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=ee(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({},ee(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>ee(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(Rp(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Ei.p2p.code&&e.push([n,o]),n===Ei["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?F(Ee.decode(`z${n}`),"base58btc"):F(Z.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return te(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 Dp(`no available resolver for ${t.name}`);return(await n(this,e)).map(s=>X(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)}[OI](){return`Multiaddr(${this.#e})`}};var vi=new Map;function Ro(r){return!!r?.[Lp]}function X(r){return new D1(r)}var UI=r=>r.toString().split("/").slice(1),uc=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Ie=r=>({match:e=>uc(t=>t===r).match(e),pattern:r}),B1=()=>({match:r=>uc(e=>typeof e=="string").match(r),pattern:"{string}"}),O1=()=>({match:r=>uc(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),Ye=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{Ee.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),L1=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{n0.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Fe=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),or=(...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(", ")})`}),Te=(...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 nt(...r){function e(o){let s=UI(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 M1=Te(Ie("dns4"),B1()),U1=Te(Ie("dns6"),B1()),F1=Te(Ie("dnsaddr"),B1()),Bp=Te(Ie("dns"),B1()),qH=nt(M1,Fe(Ye())),WH=nt(U1,Fe(Ye())),zH=nt(F1,Fe(Ye())),$1=nt(or(Bp,F1,M1,U1),Fe(Ye())),Lg=Te(Ie("ip4"),uc(bi)),Ng=Te(Ie("ip6"),uc(xi)),Op=or(Lg,Ng),eo=or(Op,Bp,M1,U1,F1),Bg=nt(or(Op,Te(or(Bp,F1,M1,U1),Fe(Ye())))),GH=nt(Lg),YH=nt(Ng),Og=nt(Op),Mp=Te(eo,Ie("tcp"),O1()),dc=Te(eo,Ie("udp"),O1()),Up=nt(Te(Mp,Fe(Ye()))),QH=nt(dc),Fp=Te(dc,Ie("quic")),V1=Te(dc,Ie("quic-v1")),FI=or(Fp,V1),XH=nt(Fp),jH=nt(V1),Np=or(eo,Mp,dc,Fp,V1),Mg=or(Te(Np,Ie("ws"),Fe(Ye()))),$p=nt(Mg),Ug=or(Te(Np,Ie("wss"),Fe(Ye())),Te(Np,Ie("tls"),Ie("ws"),Fe(Ye()))),Vp=nt(Ug),Fg=Te(dc,Ie("webrtc-direct"),Fe(L1()),Fe(L1()),Fe(Ye())),fc=nt(Fg),$g=Te(V1,Ie("webtransport"),Fe(L1()),Fe(L1()),Fe(Ye())),ms=nt($g),N1=or(Mg,Ug,Te(Mp,Fe(Ye())),Te(FI,Fe(Ye())),Te(eo,Fe(Ye())),Fg,$g,Ye()),ZH=nt(N1),$I=Te(N1,Ie("p2p-circuit"),Ye()),An=nt($I),VI=or(Te(N1,Ie("p2p-circuit"),Ie("webrtc"),Fe(Ye())),Te(N1,Ie("webrtc"),Fe(Ye())),Ie("webrtc")),hc=nt(VI),KI=or(Te(eo,Ie("tcp"),O1(),Ie("http"),Fe(Ye())),Te(eo,Ie("http"),Fe(Ye()))),Vg=nt(KI),HI=or(Te(eo,Ie("tcp"),or(Te(Ie("443"),Ie("http")),Te(O1(),Ie("https"))),Fe(Ye())),Te(eo,Ie("tls"),Ie("http"),Fe(Ye())),Te(eo,Ie("https"),Fe(Ye()))),Kg=nt(HI);var qI=[ee("tcp").code,ee("dns").code,ee("dnsaddr").code,ee("dns4").code,ee("dns6").code];function Hg(r){let e;try{e=ee("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function qg(r){return r.some(([e,t])=>e===ee("tls").code)}function sr(r,e,t){let n=Wg[ee(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${ee(r).name}`);let o=n(e,t);return r===ee("ip6").code?`[${o}]`:o}var Wg={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://${sr(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://${sr(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`${sr(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`${sr(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=qg(e),n=Hg(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=sr(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=sr(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 sr(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return sr(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=sr(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=qg(e),n=Hg(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=sr(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=sr(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`${sr(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`${sr(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`${sr(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function K1(r,e){let n=X(r).stringTuples(),o=n.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let s=ee(o[0]),i=Wg[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&qI.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 H1=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 st.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 WI(r,e,t){return r.filter(n=>{if(Kg.matches(n)||e&&Vg.matches(n))return t||$1.matches(n)?!0:Nt(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*q1(r,e,t,n,o,s){for await(let i of e.findProviders(r,s)){let a=WI(i.multiaddrs,n,o);if(a.length===0)continue;let c=K1(a[0]);yield new H1(c,t)}}var Kp=class extends ps{routing;allowInsecure;allowLocal;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??W1,this.allowLocal=t.allowLocal??z1}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*q1(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 zg(r,e){return new Kp(r,e)}var G1=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??W1,this.allowLocal=t.allowLocal??z1}async retrieve(e,t={}){let n=[];for await(let o of q1(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 zg({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure})}};var W1=!1,z1=!1;function Hp(r={}){return e=>new G1(e,r)}async function*Y1(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 jI=Tt(Q1(),1);var rn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},X1=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},Si=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},j1=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},Z1=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},J1=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},pc=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var ir;(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,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.value=o.bytes();break}case 2:{a.signatureV1=o.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(o);break}case 4:{a.validity=o.bytes();break}case 5:{a.sequence=o.uint64();break}case 6:{a.ttl=o.uint64();break}case 7:{a.pubKey=o.bytes();break}case 8:{a.signatureV2=o.bytes();break}case 9:{a.data=o.bytes();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)})(ir||(ir={}));var zI=hr("ipns:utils"),Gg=O("/ipns/");var GI=0,YI=18;function Yg(r){let e;if(r.pubKey!=null)try{e=rt(r.pubKey)}catch(t){throw zI.error(t),t}if(e!=null)return e}function Qg(r){let e=O("ipns-signature:");return Pe([e,r])}function mc(r){return"signatureV1"in r?ir.encode({value:O(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:O(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):ir.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function In(r){let e=ir.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 new rn("Missing data or signatureV2");let t=Xg(e.data),n=QI(t.Value),o=F(t.Validity);if(e.value!=null&&e.signatureV1!=null)return XI(e),{value:n,validityType:ir.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:ir.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")}function gc(r){return Pe([Gg,r.bytes])}function Ai(r){let e=Ce(r.slice(Gg.length));if(!ed(e,GI)&&!ed(e,YI))throw new so("Multihash in IPNS key was not identity or sha2-256");return e}function Xg(r){let e=Jr(r);if(e.ValidityType===0)e.ValidityType=ir.ValidityType.EOL;else throw new Si("The validity type is unsupported");return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e}function QI(r){let e=F(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${Z.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${Z.parse(e).toV1().toString()}`}catch{}throw new Z1("Value must be a valid content path starting with /")}function XI(r){if(r.data==null)throw new J1("Record data is missing");let e=Xg(r.data);if(!te(e.Value,r.value??new Uint8Array(0)))throw new rn('Field "value" did not match between protobuf and CBOR');if(!te(e.Validity,r.validity??new Uint8Array(0)))throw new rn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new rn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new rn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new rn('Field "ttl" did not match between protobuf and CBOR')}function ed(r,e){return r.code===e}var Hq=hr("ipns"),qq=60*60*1e9,ZI="/ipns/",Wq=ZI.length;var jg=Tt(Q1(),1);var td=hr("ipns:validator"),JI=1024*10,e_=async(r,e)=>{let t=In(e),n;try{let o=Qg(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw td.error("record signature verification failed"),new rn("Record signature verification failed");if(t.validityType===ir.ValidityType.EOL){if(jg.default.fromString(t.validity).toDate().getTime()<Date.now())throw td.error("record has expired"),new X1("record has expired")}else if(t.validityType!=null)throw td.error("the validity type is unsupported"),new Si("The validity type is unsupported");td("ipns record for %s is valid",t.value)};async function rd(r,e){if(e.byteLength>JI)throw new j1("The record is too large");let t=Ai(r),n;ed(t,0)&&(n=Nu(t));let o=In(e),s=Yg(o)??n;if(s==null)throw new pc("Could not extract public key from IPNS record or routing key");let i=gc(s.toMultihash());if(!te(r,i))throw new pc("Embedded public key did not match routing key");await e_(s,e)}async function*yc(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))}var Ii=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},gs=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function t_(r){return r[Symbol.asyncIterator]!=null}function r_(r){if(t_(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var wc=r_;var Zg=O("/ipns/");function Jg(r){return te(r.subarray(0,Zg.byteLength),Zg)}var nd=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Xt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async put(e,t,n){if(!Jg(e))return;let o=Ai(e),s=Z.createV1(114,o),i=In(t);await this.client.putIPNS(s,i,n)}async get(e,t){if(!Jg(e))throw new Be("Not found");let n=Ai(e),o=Z.createV1(114,n);try{let s=await this.client.getIPNS(o,t);return mc(s)}catch(s){throw s.name==="BadResponseError"?new Be("Not found"):s}}},od=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await wc(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Be("Not found")}async*getClosestPeers(e,t={}){}};var $t=hr("delegated-routing-v1-http-api-client"),e7={concurrentRequests:4,timeout:3e4},sd=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,V(1/0,this.shutDownController.signal),this.httpQueue=new Tr({concurrency:t.concurrentRequests??e7.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??e7.timeout,this.contentRouting=new nd(this),this.peerRouting=new od(this)}get[un](){return this.contentRouting}get[dn](){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={}){$t("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=me([this.shutDownController.signal,n,t.signal]);V(1/0,n,o);let s=J(),i=J();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 Be("No matching records found");if(l.status===422)throw new Ii("Request does not conform to schema or semantic constraints");if(l.body==null)throw new gs("Routing response had no body");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 yc(Y1(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){$t.error("getProviders errored:",a)}finally{o.clear(),i.resolve(),$t("getProviders finished: %c",e)}}async*getPeers(e,t={}){$t("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=me([this.shutDownController.signal,n,t.signal]);V(1/0,n,o);let s=J(),i=J();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 Be("No matching records found");if(l.status===422)throw new Ii("Request does not conform to schema or semantic constraints");if(l.body==null)throw new gs("Routing response had no body");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 yc(Y1(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){$t.error("getPeers errored:",a)}finally{o.clear(),i.resolve(),$t("getPeers finished: %c",e)}}async getIPNS(e,t={}){$t("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=me([this.shutDownController.signal,n,t.signal]);V(1/0,n,o);let s=J(),i=J();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=await fetch(a,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o});if($t("getIPNS GET %s %d",a,l.status),l.status===404)throw new Be("No matching records found");if(l.status===422)throw new Ii("Request does not conform to schema or semantic constraints");if(l.body==null)throw new gs("GET ipns response had no body");let d=await l.arrayBuffer(),u=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await rd(gc(e.multihash),u),In(u)}catch(c){throw $t.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),i.resolve(),$t("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){$t("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=me([this.shutDownController.signal,o,n.signal]);V(1/0,o,s);let i=J(),a=J();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await i.promise;let l=mc(t),u=await fetch(c,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s});if($t("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new gs("PUT ipns response had status other than 200")}catch(l){throw $t.error("putIPNS PUT %s error:",c,l.stack),l}finally{s.clear(),a.resolve(),$t("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(X)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Re(e.ID),Addrs:n,Protocols:t}}catch(t){$t.error("could not conform record to peer schema",t)}}};function t7(r,e={}){return new sd(new URL(r),e)}var r7="[a-fA-F\\d:]",Do=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${r7})|(?<=${r7})(?=\\s|$))`:"",nn="(?: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}",it="[a-fA-F\\d]{1,4}",id=`
8
8
  (?:
9
- (?:${nt}:){7}(?:${nt}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
10
- (?:${nt}:){6}(?:${tn}|:${nt}|:)| // 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
11
- (?:${nt}:){5}(?::${tn}|(?::${nt}){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
12
- (?:${nt}:){4}(?:(?::${nt}){0,1}:${tn}|(?::${nt}){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
13
- (?:${nt}:){3}(?:(?::${nt}){0,2}:${tn}|(?::${nt}){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
14
- (?:${nt}:){2}(?:(?::${nt}){0,3}:${tn}|(?::${nt}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
15
- (?:${nt}:){1}(?:(?::${nt}){0,4}:${tn}|(?::${nt}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
16
- (?::(?:(?::${nt}){0,5}:${tn}|(?::${nt}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
9
+ (?:${it}:){7}(?:${it}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
10
+ (?:${it}:){6}(?:${nn}|:${it}|:)| // 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
11
+ (?:${it}:){5}(?::${nn}|(?::${it}){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
12
+ (?:${it}:){4}(?:(?::${it}){0,1}:${nn}|(?::${it}){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
13
+ (?:${it}:){3}(?:(?::${it}){0,2}:${nn}|(?::${it}){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
14
+ (?:${it}:){2}(?:(?::${it}){0,3}:${nn}|(?::${it}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
15
+ (?:${it}:){1}(?:(?::${it}){0,4}:${nn}|(?::${it}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
16
+ (?::(?:(?::${it}){0,5}:${nn}|(?::${it}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
17
17
  )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
18
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),YA=new RegExp(`(?:^${tn}$)|(?:^${G1}$)`),QA=new RegExp(`^${tn}$`),XA=new RegExp(`^${G1}$`),fp=r=>r&&r.exact?YA:new RegExp(`(?:${Co(r)}${tn}${Co(r)})|(?:${Co(r)}${G1}${Co(r)})`,"g");fp.v4=r=>r&&r.exact?QA:new RegExp(`${Co(r)}${tn}${Co(r)}`,"g");fp.v6=r=>r&&r.exact?XA:new RegExp(`${Co(r)}${G1}${Co(r)}`,"g");var hp=fp;function pp(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function _g(){return!1}var{toString:jA}=Object.prototype;function mp(r){return jA.call(r)==="[object RegExp]"}var kg={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function gp(r,e={}){if(!mp(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(kg).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?kg[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function yp(r,e,{timeout:t}={}){try{return pp(()=>gp(r).test(e),{timeout:t})()}catch(n){if(_g(n))return!1;throw n}}var ZA=15,JA=45,Tg={timeout:400};function wp(r){return r.length>JA?!1:yp(hp.v6({exact:!0}),r,Tg)}function Cg(r){return r.length>ZA?!1:yp(hp.v4({exact:!0}),r,Tg)}var Pg={http:"80",https:"443",ws:"80",wss:"443"},eI=["http","https","ws","wss"];function Rg(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:s}=tI(r),a="/"+[rI(o,t),nI(s,n),oI(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return X(a)}function tI(r){let[e]=r.split(":");eI.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let s=sI(e);s!=null&&(o=s),s==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function rI(r,e){if(!(r==null||r==="")){if(Cg(r))return["ip4",r];if(wp(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(wp(t))return["ip6",t]}return[e,r]}}function nI(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function oI(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function sI(r){if(!(r==null||r===""||Pg[r]==null))return Pg[r]}var iI=["https://trustless-gateway.link","https://4everland.io"],aI=2336;function cI(r){return r=r.toString(),{id:bn(re.createV1(aI,dr.digest(O(r)))),multiaddrs:[Rg(r)]}}var bp=class{gateways;constructor(e={}){this.gateways=(e.gateways??iI).map(t=>cI(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function xp(r={}){return new bp(r)}var Ep=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 vp(r){return new Ep(r)}var ic=class extends Xn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(it.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(it.encode(e.multihash.bytes));if(t==null)throw new Rr;return t}has(e){return this.data.has(it.encode(e.multihash.bytes))}async delete(e){this.data.delete(it.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:re.createV1(fl,Te(it.decode(e))),block:t}}};var IW=hr("blockstore:core:tiered");var Ng="SHARDING";function uI(r){return r[Symbol.asyncIterator]!=null}function dI(r){if(uI(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 ac=dI;function fI(r){return r[Symbol.asyncIterator]!=null}function hI(r,e){return fI(r)?async function*(){yield*(await ac(r)).sort(e)}():function*(){yield*ac(r).sort(e)}()}var Y1=hI;var jn=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 zt(this.putMany(e,n)),e=[],await zt(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=Jr(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Jr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>Y1(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=Jr(n,()=>o++>=s)}return e.limit!=null&&(n=oo(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Jr(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Jr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>Y1(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=Jr(n,()=>s++>=o)}return e.limit!=null&&(n=oo(n,e.limit)),n}};var ms=class extends jn{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 new Rr;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 Le(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Le(e)}};var oz=new Le(Ng);var wz=hr("datastore:core:tiered");var Q1=class extends h1{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 Sp=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=Z(),this.haveNext=Z()}[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=Z(),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=Z(),await ke(this.readNext.promise,t?.signal,t)}};function Og(){return new Sp}var X1=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var Ap=class extends Error{code;constructor(e,t){super(e),this.code=t}},Ip=class extends Ap{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function j1(r,e){let t=Og();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 Ip("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 ce:f}for(;o.byteLength<i;){let{value:u,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new X1("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 Z1=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},J1=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},ed=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function An(r,e={}){let t=j1(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=he(e.maxDataLength));let n=e?.lengthDecoder??Bt,o=e?.lengthEncoder??$e;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(a<0)throw new Z1("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new ed("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new J1("message length 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 _p(){let r=Z(),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=_p(),e=_p();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var bi=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function td(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function kp(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function Tp(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function or(r,...e){if(!Tp(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 Cp(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 Ug(r,e){or(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)),Fg=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),pI=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!pI)throw new Error("Non little-endian hardware is not supported");function mI(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function rd(r){if(typeof r=="string")r=mI(r);else if(Tp(r))r=nd(r);else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function $g(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Vg(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 Pp=(r,e)=>(Object.assign(e,r),e);function Rp(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 nd(r){return Uint8Array.from(r)}function Jn(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var Hg=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),gI=Hg("expand 16-byte k"),yI=Hg("expand 32-byte k"),wI=Zn(gI),qg=Zn(yI),aG=qg.slice();function Y(r,e){return r<<e|r>>>32-e}function Lp(r){return r.byteOffset%4===0}var od=64,bI=16,Wg=2**32-1,Kg=new Uint32Array;function xI(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(od),d=Zn(l),u=Lp(o)&&Lp(s),f=u?Zn(o):Kg,h=u?Zn(s):Kg;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=Wg)throw new Error("arx: counter overflow");let m=Math.min(od,c-p);if(u&&m===od){let g=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,b;y<bI;y++)b=g+y,h[b]=f[b]^d[y];p+=od;continue}for(let g=0,y;g<m;g++)y=p+g,s[y]=o[y]^l[g];p+=m}}function Dp(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=$g({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return td(o),td(i),kp(s),kp(t),(a,c,l,d,u=0)=>{or(a),or(c),or(l);let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),or(d),td(u),u<0||u>=Wg)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,m,g;if(p===32)h.push(m=nd(a)),g=qg;else if(p===16&&t)m=new Uint8Array(32),m.set(a),m.set(a,16),g=wI,h.push(m);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);Lp(c)||h.push(c=nd(c));let y=Zn(m);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(g,y,Zn(c.subarray(0,16)),y),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 w=Zn(c);return xI(r,g,y,w,l,d,u,i),Jn(...h),d}}var vt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,Np=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=rd(e),or(e,32);let t=vt(e,0),n=vt(e,2),o=vt(e,4),s=vt(e,6),i=vt(e,8),a=vt(e,10),c=vt(e,12),l=vt(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]=vt(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],m=i[8],g=i[9],y=vt(e,t+0),b=vt(e,t+2),w=vt(e,t+4),x=vt(e,t+6),k=vt(e,t+8),T=vt(e,t+10),E=vt(e,t+12),S=vt(e,t+14),_=s[0]+(y&8191),F=s[1]+((y>>>13|b<<3)&8191),N=s[2]+((b>>>10|w<<6)&8191),M=s[3]+((w>>>7|x<<9)&8191),B=s[4]+((x>>>4|k<<12)&8191),L=s[5]+(k>>>1&8191),D=s[6]+((k>>>14|T<<2)&8191),I=s[7]+((T>>>11|E<<5)&8191),A=s[8]+((E>>>8|S<<8)&8191),R=s[9]+(S>>>5|o),P=0,q=P+_*a+F*(5*g)+N*(5*m)+M*(5*p)+B*(5*h);P=q>>>13,q&=8191,q+=L*(5*f)+D*(5*u)+I*(5*d)+A*(5*l)+R*(5*c),P+=q>>>13,q&=8191;let z=P+_*c+F*a+N*(5*g)+M*(5*m)+B*(5*p);P=z>>>13,z&=8191,z+=L*(5*h)+D*(5*f)+I*(5*u)+A*(5*d)+R*(5*l),P+=z>>>13,z&=8191;let j=P+_*l+F*c+N*a+M*(5*g)+B*(5*m);P=j>>>13,j&=8191,j+=L*(5*p)+D*(5*h)+I*(5*f)+A*(5*u)+R*(5*d),P+=j>>>13,j&=8191;let ae=P+_*d+F*l+N*c+M*a+B*(5*g);P=ae>>>13,ae&=8191,ae+=L*(5*m)+D*(5*p)+I*(5*h)+A*(5*f)+R*(5*u),P+=ae>>>13,ae&=8191;let le=P+_*u+F*d+N*l+M*c+B*a;P=le>>>13,le&=8191,le+=L*(5*g)+D*(5*m)+I*(5*p)+A*(5*h)+R*(5*f),P+=le>>>13,le&=8191;let fe=P+_*f+F*u+N*d+M*l+B*c;P=fe>>>13,fe&=8191,fe+=L*a+D*(5*g)+I*(5*m)+A*(5*p)+R*(5*h),P+=fe>>>13,fe&=8191;let be=P+_*h+F*f+N*u+M*d+B*l;P=be>>>13,be&=8191,be+=L*c+D*a+I*(5*g)+A*(5*m)+R*(5*p),P+=be>>>13,be&=8191;let De=P+_*p+F*h+N*f+M*u+B*d;P=De>>>13,De&=8191,De+=L*l+D*c+I*a+A*(5*g)+R*(5*m),P+=De>>>13,De&=8191;let Ne=P+_*m+F*p+N*h+M*f+B*u;P=Ne>>>13,Ne&=8191,Ne+=L*d+D*l+I*c+A*a+R*(5*g),P+=Ne>>>13,Ne&=8191;let Fe=P+_*g+F*m+N*p+M*h+B*f;P=Fe>>>13,Fe&=8191,Fe+=L*u+D*d+I*l+A*c+R*a,P+=Fe>>>13,Fe&=8191,P=(P<<2)+P|0,P=P+q|0,q=P&8191,P=P>>>13,z+=P,s[0]=q,s[1]=z,s[2]=j,s[3]=ae,s[4]=le,s[5]=fe,s[6]=be,s[7]=De,s[8]=Ne,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;Jn(n)}update(e){Cp(this);let{buffer:t,blockLen:n}=this;e=rd(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(){Jn(this.h,this.r,this.buffer,this.pad)}digestInto(e){Cp(this),Ug(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 EI(r){let e=(n,o)=>r(o).update(rd(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var zg=EI(r=>new Np(r));function Qg(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],m=e[5],g=e[6],y=e[7],b=o,w=t[0],x=t[1],k=t[2],T=i,E=a,S=c,_=l,F=d,N=u,M=f,B=h,L=p,D=m,I=g,A=y,R=b,P=w,q=x,z=k;for(let ae=0;ae<s;ae+=2)T=T+F|0,R=Y(R^T,16),L=L+R|0,F=Y(F^L,12),T=T+F|0,R=Y(R^T,8),L=L+R|0,F=Y(F^L,7),E=E+N|0,P=Y(P^E,16),D=D+P|0,N=Y(N^D,12),E=E+N|0,P=Y(P^E,8),D=D+P|0,N=Y(N^D,7),S=S+M|0,q=Y(q^S,16),I=I+q|0,M=Y(M^I,12),S=S+M|0,q=Y(q^S,8),I=I+q|0,M=Y(M^I,7),_=_+B|0,z=Y(z^_,16),A=A+z|0,B=Y(B^A,12),_=_+B|0,z=Y(z^_,8),A=A+z|0,B=Y(B^A,7),T=T+N|0,z=Y(z^T,16),I=I+z|0,N=Y(N^I,12),T=T+N|0,z=Y(z^T,8),I=I+z|0,N=Y(N^I,7),E=E+M|0,R=Y(R^E,16),A=A+R|0,M=Y(M^A,12),E=E+M|0,R=Y(R^E,8),A=A+R|0,M=Y(M^A,7),S=S+B|0,P=Y(P^S,16),L=L+P|0,B=Y(B^L,12),S=S+B|0,P=Y(P^S,8),L=L+P|0,B=Y(B^L,7),_=_+F|0,q=Y(q^_,16),D=D+q|0,F=Y(F^D,12),_=_+F|0,q=Y(q^_,8),D=D+q|0,F=Y(F^D,7);let j=0;n[j++]=i+T|0,n[j++]=a+E|0,n[j++]=c+S|0,n[j++]=l+_|0,n[j++]=d+F|0,n[j++]=u+N|0,n[j++]=f+M|0,n[j++]=h+B|0,n[j++]=p+L|0,n[j++]=m+D|0,n[j++]=g+I|0,n[j++]=y+A|0,n[j++]=b+R|0,n[j++]=w+P|0,n[j++]=x+q|0,n[j++]=k+z|0}function vI(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],m=e[7],g=t[0],y=t[1],b=t[2],w=t[3];for(let k=0;k<20;k+=2)o=o+c|0,g=Y(g^o,16),f=f+g|0,c=Y(c^f,12),o=o+c|0,g=Y(g^o,8),f=f+g|0,c=Y(c^f,7),s=s+l|0,y=Y(y^s,16),h=h+y|0,l=Y(l^h,12),s=s+l|0,y=Y(y^s,8),h=h+y|0,l=Y(l^h,7),i=i+d|0,b=Y(b^i,16),p=p+b|0,d=Y(d^p,12),i=i+d|0,b=Y(b^i,8),p=p+b|0,d=Y(d^p,7),a=a+u|0,w=Y(w^a,16),m=m+w|0,u=Y(u^m,12),a=a+u|0,w=Y(w^a,8),m=m+w|0,u=Y(u^m,7),o=o+l|0,w=Y(w^o,16),p=p+w|0,l=Y(l^p,12),o=o+l|0,w=Y(w^o,8),p=p+w|0,l=Y(l^p,7),s=s+d|0,g=Y(g^s,16),m=m+g|0,d=Y(d^m,12),s=s+d|0,g=Y(g^s,8),m=m+g|0,d=Y(d^m,7),i=i+u|0,y=Y(y^i,16),f=f+y|0,u=Y(u^f,12),i=i+u|0,y=Y(y^i,8),f=f+y|0,u=Y(u^f,7),a=a+c|0,b=Y(b^a,16),h=h+b|0,c=Y(c^h,12),a=a+c|0,b=Y(b^a,8),h=h+b|0,c=Y(c^h,7);let x=0;n[x++]=o,n[x++]=s,n[x++]=i,n[x++]=a,n[x++]=g,n[x++]=y,n[x++]=b,n[x++]=w}var SI=Dp(Qg,{counterRight:!1,counterLength:4,allowShortKeys:!1}),AI=Dp(Qg,{counterRight:!1,counterLength:8,extendNonceFn:vI,allowShortKeys:!1});var II=new Uint8Array(16),Gg=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(II.subarray(t))},_I=new Uint8Array(32);function Yg(r,e,t,n,o){let s=r(e,t,_I),i=zg.create(s);o&&Gg(i,o),Gg(i,n);let a=new Uint8Array(16),c=Fg(a);Rp(c,0,BigInt(o?o.length:0),!0),Rp(c,8,BigInt(n.length),!0),i.update(a);let l=i.digest();return Jn(s,a),l}var Xg=r=>(e,t,n)=>(or(e,32),or(t),{encrypt(s,i){let a=s.length,c=a+16;i?or(i,c):i=new Uint8Array(c),r(e,t,s,i,1);let l=Yg(r,e,t,i.subarray(0,-16),n);return i.set(l,a),Jn(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?or(i,c):i=new Uint8Array(c);let l=s.subarray(0,-16),d=s.subarray(-16),u=Yg(r,e,t,l,n);if(!Vg(d,u))throw new Error("invalid tag");return r(e,t,l,i,1),Jn(u),i}}),Bp=Pp({blockSize:64,nonceLength:12,tagLength:16},Xg(SI)),gG=Pp({blockSize:64,nonceLength:24,tagLength:16},Xg(AI));function Zg(r,e,t){return Qo(r),t===void 0&&(t=new Uint8Array(r.outputLen)),xo(r,qr(t),qr(e))}var Op=new Uint8Array([0]),jg=new Uint8Array;function Jg(r,e,t,n=32){if(Qo(r),ao(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=jg);let s=new Uint8Array(o*r.outputLen),i=xo.create(r,e),a=i._cloneInto(),c=new Uint8Array(i.outputLen);for(let l=0;l<o;l++)Op[0]=l+1,a.update(l===0?jg:c).update(t).update(Op).digestInto(c),s.set(c,r.outputLen*l),i._cloneInto(a);return i.destroy(),a.destroy(),c.fill(0),Op.fill(0),s.slice(0,n)}var Mp={hashSHA256(r){return Sr(r.subarray())},getHKDF(r,e){let t=Zg(Sr,e,r),o=Jg(Sr,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=pa.utils.randomPrivateKey();return{publicKey:pa.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:pa.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return pa.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return Bp(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return Bp(n,e,t).decrypt(r.subarray(),o)}};var e7=Mp;function t7(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 xi=r=>{let e=We(2);return e[0]=r>>8,e[1]=r,e};xi.bytes=2;var cc=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)};cc.bytes=2;function r7(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 Up(r,e){!e.enabled||!bi||(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 Fp(r,e){!e.enabled||!bi||(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 n7(r,e){!e.enabled||!bi||e(r?`REMOTE_STATIC_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote static public key.")}function $p(r,e){!e.enabled||!bi||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function Vp(r,e,t){!t.enabled||!bi||(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 rn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=We(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var Ei=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var kI=0,TI=4294967295,CI="Cipherstate has reached maximum n, a new handshake must be performed",sd=class{n;bytes;view;constructor(e=kI){this.n=e,this.bytes=ie(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>TI)throw new Error(CI)}};var gs=ie(0),vi=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new sd(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}},Kp=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=O(t,"utf-8");this.h=PI(e,n),this.ck=this.h,this.cs=new vi(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new vi(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,gs);return[new vi(this.crypto,e),new vi(this.crypto,t)]}},Hp=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 Kp(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()}},lc=class extends Hp{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 Ei(`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 Ei(`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 Ei(`handshake stage 2 validation fail: ${t.message}`)}}};function PI(r,e){if(e.length<=32){let t=ie(32);return t.set(e),t}else return r.hash(e)}var id;(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=>te(t,r.codec())})(id||(id={}));var uc;(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),id.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:ie(0),identitySig:ie(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=id.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=>te(t,r.codec())})(uc||(uc={}));async function qp(r,e,t){let n=await r.sign(o7(e));return uc.encode({identityKey:Rt(r.publicKey),identitySig:n,extensions:t})}async function Wp(r,e,t){try{let n=uc.decode(r),o=Je(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let s=o7(e);if(!await o.verify(s,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new qc(n.message)}}function o7(r){let e=O("noise-libp2p-static-key:");return r instanceof Uint8Array?Pe([e,r],e.length+r.length):(r.prepend(e),r)}async function s7(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await qp(s,a.publicKey,l),u=new lc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});Up(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(gs),e),t.trace("Stage 0 - Initiator finished sending first message."),Fp(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."),$p(u.re,t),n7(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await Wp(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,m]=u.ss.split();return Vp(p,m,t),{payload:h,encrypt:g=>p.encryptWithAd(gs,g),decrypt:(g,y)=>m.decryptWithAd(gs,g,y)}}async function i7(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await qp(s,a.publicKey,l),u=new lc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});Up(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."),$p(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."),Fp(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 Wp(f,u.rs,c),[p,m]=u.ss.split();return Vp(p,m,t),{payload:h,encrypt:g=>m.encryptWithAd(gs,g),decrypt:(g,y)=>p.decryptWithAd(gs,g,y)}}var c7=16;function l7(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(xi(i.byteLength),i)}}}function u7(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-c7<o)throw new Error("Invalid chunk");let i=n.sublist(o,s),a=n.subarray(o,s-c7);try{let c=r.decrypt(i,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var ad=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??e7;this.crypto=t7(c),this.extensions=o,this.metrics=a?r7(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??ie(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Se]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=An(e,{lengthEncoder:xi,lengthDecoder:cc,maxDataLength:65535}),o=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),s=await this.createSecureConnection(n,o);e.source=s.source,e.sink=s.sink;let i=Je(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:wn(i)}}async secureInbound(e,t){let n=An(e,{lengthEncoder:xi,lengthDecoder:cc,maxDataLength:65535}),o=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),s=await this.createSecureConnection(n,o);e.source=s.source,e.sink=s.sink;let i=Je(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:wn(i)}}async performHandshakeInitiator(e,t,n,o){let s;try{s=await s7({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 i7({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]=Mg(),s=e.unwrap();return await Ve(n,l7(t,this.metrics),s,i=>Yt(i,{lengthDecoder:cc}),u7(t,this.metrics),n),o}};function Si(r={}){return e=>new ad(e,r)}function cd(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 nn=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},Ai=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Ii=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},ld=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},ud=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},dd=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},fd=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},_i=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var d7=new Set([nn.name,Ai.name,Ii.name,ud.name,dd.name,fd.name,_i.name]),fc=256*1024,f7=16*1024*1024;var h7={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:fc,maxStreamWindowSize:f7,maxMessageSize:64*1024};function p7(r){if(r.keepAliveInterval<=0)throw new C("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new C("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new C("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<fc)throw new C("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new C("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new C("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new C("MaxMessageSize must be greater than a kilobyte")}var Xe;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Xe||(Xe={}));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 YY=Object.values(qe).filter(r=>typeof r!="string"),m7=0,Dr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Dr||(Dr={}));var Po=12;var g7=2**24;function RI(r){if(r[0]!==m7)throw new nn("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*g7+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*g7+(r[9]<<16)+(r[10]<<8)+r[11]}}var hd=class{source;buffer;frameInProgress;constructor(e){this.source=LI(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===Xe.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new ld("decoding frame already in progress");if(this.buffer.length<Po)return;let e=RI(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 LI(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 zp(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 y7(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function pd(r,e){let t=cd(r).return?.();y7(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var DI=5e3;function Gp(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var In=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=Z(),this.closed=Z(),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??DI,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=Tt({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 Ko(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);Gp(o)&&await o}let n=()=>{pd(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);Gp(s)&&(this.sendingData=Z(),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();Gp(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 Yc("stream reset");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 Nr;(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"})(Nr||(Nr={}));var md=class extends In{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Nr.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=fc,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=ds(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:Xe.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Xe.WindowUpdate,flag:qe.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|qe.FIN;this.sendFrame({type:Xe.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 dt("Stream aborted")):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 _i("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&qe.ACK)===qe.ACK&&this.state===Nr.SYNSent&&(this.state=Nr.Established),(e&qe.FIN)===qe.FIN&&this.remoteCloseWrite(),(e&qe.RST)===qe.RST&&this.reset()}getSendFlags(){switch(this.state){case Nr.Init:return this.state=Nr.SYNSent,qe.SYN;case Nr.SYNReceived:return this.state=Nr.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:Xe.WindowUpdate,flag:e,streamID:this._id,length:o})}};var w7="/yamux/1.0.0",NI=500,gd=class{protocol=w7;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Se]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new Yp(this._components,{...this._init,...e})}},Yp=class{protocol=w7;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={...h7,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),p7(this.config),this.closeController=new AbortController,V(1/0,this.closeController.signal),this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=Tt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=cd(n);if(a.return!=null){let c=a.return();BI(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},s,i;try{let a=new hd(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=Dr.NormalTermination}catch(a){d7.has(a.name)?(this.log?.error("protocol error in sink",a),s=Dr.ProtocolError):(this.log?.error("internal error in sink",a),s=Dr.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 dn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new dn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new no("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Nr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new dn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new dn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,s)=>{let i=()=>{s(new dn("Muxer closed locally"))};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??Dr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(NI);V(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??Dr.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 C("Stream already exists with that id");let s=new md({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 Xe.Ping:{this.handlePing(e);return}case Xe.GoAway:{this.handleGoAway(s);return}default:throw new nn("Invalid frame type")}else switch(e.type){case Xe.Data:case Xe.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new nn("Invalid frame type")}}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 nn("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Ai("ping not requested");if(this.activePing.id!==e)throw new Ii("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Dr[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===Xe.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 Xe.WindowUpdate:{i.handleWindowUpdate(e);return}case Xe.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 C("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Xe.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:Xe.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Nr.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===Xe.Data){if(t===void 0)throw new nn("Invalid frame");this.source.push(new ce(zp(e),t))}else this.source.push(zp(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:Xe.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Dr.NormalTermination){this.log?.("sending GoAway reason=%s",Dr[e]),this.localGoAway=e,this.sendFrame({type:Xe.GoAway,flag:0,streamID:0,length:e})}};function BI(r){return r!=null&&typeof r.then=="function"}function b7(r={}){return e=>new gd(e,r)}var yd=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=Z(),a=Z(),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=Z(),await i.promise),d)break;let m={done:!1};s.push(m),p().then(g=>{m.done=!0,m.ok=!0,m.value=g,o.dispatchEvent(new yd("task-complete"))},g=>{m.done=!0,m.err=g,o.dispatchEvent(new yd("task-complete"))})}c=!0,o.dispatchEvent(new yd("task-complete"))}catch(p){l=p,o.dispatchEvent(new yd("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 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=Z(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&s.length===0)break}}var x7="libp2p",E7="autonat",v7="1.0.0";var ye;(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,h={})=>{let p={addrs:[]},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.id=u.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Oe('Decode error - map field "addrs" had too many elements');p.addrs.push(u.bytes());break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>ne(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(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,h={})=>{let p={},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(u,u.uint32(),{limits:h.limits?.peer});break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>ne(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(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,h={})=>{let p={},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(u);break}case 2:{p.statusText=u.string();break}case 3:{p.addr=u.bytes();break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>ne(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(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,u={})=>{let f={},h=d==null?l.len:l.pos+d;for(;l.pos<h;){let p=l.uint32();switch(p>>>3){case 1:{f.type=r.MessageType.codec().decode(l);break}case 2:{f.dial=r.Dial.codec().decode(l,l.uint32(),{limits:u.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:u.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>ne(l,r.codec()),r.decode=(l,d)=>te(l,r.codec(),d)})(ye||(ye={}));var Qp=4,wd=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??x7}/${E7}/${v7}`,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 dt)};t.addEventListener("abort",n,{once:!0}),V(1/0,t);try{let o=this;await Ve(e.stream,s=>Yt(s),async function*(s){let i=await ps(s);if(i==null){o.log("no message received"),yield ye.encode({type:ye.MessageType.DIAL_RESPONSE,dialResponse:{status:ye.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let a;try{a=ye.decode(i)}catch(c){o.log.error("could not decode message",c),yield ye.encode({type:ye.MessageType.DIAL_RESPONSE,dialResponse:{status:ye.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}yield ye.encode(await o.handleAutonatMessage(a,e.connection,{signal:t}))},s=>Gt(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:ye.MessageType.DIAL_RESPONSE,dialResponse:{status:ye.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:ye.MessageType.DIAL_RESPONSE,dialResponse:{status:ye.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let u=Te(a.id);i=pt(u)}catch(u){return this.log.error("invalid PeerId",u),{type:ye.MessageType.DIAL_RESPONSE,dialResponse:{status:ye.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:ye.MessageType.DIAL_RESPONSE,dialResponse:{status:ye.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>X(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=!(tr(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:ye.MessageType.DIAL_RESPONSE,dialResponse:{status:ye.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:ye.MessageType.DIAL_RESPONSE,dialResponse:{status:ye.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(J("p2p").code).bytes}}}catch(h){this.log("could not dial %p",i,h),l=h.message}finally{f!=null&&await f.close()}}return{type:ye.MessageType.DIAL_RESPONSE,dialResponse:{status:ye.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!(tr(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);V(1/0,n);let o=this;try{this.log("verify multiaddrs %s",t.map(l=>l.toString()).join(", "));let s=ye.encode({type:ye.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,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 dt)},n.addEventListener("abort",d,{once:!0});let h=await Ve([s],m=>Gt(m),f,m=>Yt(m),async m=>ps(m));if(h==null){this.log("no response received from %p",u.remotePeer);return}let p=ye.decode(h);if(p.type!==ye.MessageType.DIAL_RESPONSE||p.dialResponse==null){this.log("invalid autonat response from %p",u.remotePeer);return}if(p.dialResponse.status===ye.ResponseStatus.OK){let m=u.remoteAddr.toOptions(),g;if(m.family===4)g=m.host.split(".")[0];else if(m.family===6)g=m.host.split(":")[0];else{this.log('remote address "%s" was not IP4 or IP6?',m.host);return}if(a.includes(g)){this.log("already have response from network segment %d - %s",g,m.host);return}a.push(g)}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(Qt(this.components.randomWalk.walk({signal:n}),d=>async()=>c(d)),{concurrency:Qp}))try{if(l==null)continue;let d=l.addr==null?t[0]:X(l.addr);if(this.log("autonat response for %a is %s",d,l.status),l.status===ye.ResponseStatus.E_BAD_REQUEST||l.status===ye.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===ye.ResponseStatus.OK?i[u].success++:l.status===ye.ResponseStatus.E_DIAL_ERROR&&i[u].failure++,i[u].success===Qp){this.log("%a is externally dialable",d),e.confirmObservedAddr(d);return}if(i[u].failure===Qp){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 S7(r={}){return e=>new wd(e,r)}var VI=W("dns4"),KI=W("dns6"),HI=W("dnsaddr"),Lo=tt(W("dns"),HI,VI,KI),bd=tt(W("ip4"),W("ip6")),ki=tt(se(bd,W("tcp")),se(Lo,W("tcp"))),xd=se(bd,W("udp")),qI=se(xd,W("utp")),WI=se(xd,W("quic")),zI=se(xd,W("quic-v1")),Xp=tt(se(ki,W("ws")),se(Lo,W("ws"))),Ti=tt(se(Xp,W("p2p")),Xp),jp=tt(se(ki,W("wss")),se(Lo,W("wss")),se(ki,W("tls"),W("ws")),se(Lo,W("tls"),W("ws"))),ys=tt(se(jp,W("p2p")),jp),Zp=tt(se(ki,W("http")),se(bd,W("http")),se(Lo,W("http"))),Jp=tt(se(ki,W("https")),se(bd,W("https")),se(Lo,W("https"))),A7=se(xd,W("webrtc-direct"),W("certhash")),k7=tt(se(A7,W("p2p")),A7),I7=se(zI,W("webtransport"),W("certhash"),W("certhash")),T7=tt(se(I7,W("p2p")),I7),C7=tt(se(Ti,W("p2p-webrtc-star"),W("p2p")),se(ys,W("p2p-webrtc-star"),W("p2p")),se(Ti,W("p2p-webrtc-star")),se(ys,W("p2p-webrtc-star"))),tX=tt(se(Ti,W("p2p-websocket-star"),W("p2p")),se(ys,W("p2p-websocket-star"),W("p2p")),se(Ti,W("p2p-websocket-star")),se(ys,W("p2p-websocket-star"))),P7=tt(se(Zp,W("p2p-webrtc-direct"),W("p2p")),se(Jp,W("p2p-webrtc-direct"),W("p2p")),se(Zp,W("p2p-webrtc-direct")),se(Jp,W("p2p-webrtc-direct"))),ws=tt(Xp,jp,Zp,Jp,C7,P7,ki,qI,WI,Lo,k7,T7),rX=tt(se(ws,W("p2p-stardust"),W("p2p")),se(ws,W("p2p-stardust"))),Ro=tt(se(ws,W("p2p")),C7,P7,k7,T7,W("p2p")),_7=tt(se(Ro,W("p2p-circuit"),Ro),se(Ro,W("p2p-circuit")),se(W("p2p-circuit"),Ro),se(ws,W("p2p-circuit")),se(W("p2p-circuit"),ws),W("p2p-circuit")),R7=()=>tt(se(_7,R7),_7),sn=R7(),L7=tt(se(sn,Ro,sn),se(Ro,sn),se(sn,Ro),sn,Ro);var nX=tt(se(sn,W("webrtc"),W("p2p")),se(sn,W("webrtc")),se(ws,W("webrtc"),W("p2p")),se(ws,W("webrtc")),W("webrtc"));function D7(r){function e(t){let n;try{n=X(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:D7(e),partialMatch:e}}function tt(...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:D7(e),partialMatch:e}}function W(r){let e=r;function t(o){let s;try{s=X(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 GI="bootstrap",YI=50,QI=1e3,e3=class extends pe{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??QI,this.list=[];for(let n of t.list){if(!L7.matches(n)){this.log.error("Invalid multiaddr");continue}let o=X(n),s=o.getPeerId();if(s==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let i={id:Re(s),multiaddrs:[o]};this.list.push(i)}this._init=t}[Vo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Se]=["@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??GI]:{value:this._init.tagValue??YI,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function B7(r){return e=>new e3(e,r)}var hc;(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,o={})=>{let s={publicKey:ie(0),payloadType:ie(0),payload:ie(0),signature:ie(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.publicKey=t.bytes();break}case 2:{s.payloadType=t.bytes();break}case 3:{s.payload=t.bytes();break}case 5:{s.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(hc||(hc={}));var Ed=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var br=class r{static createFromProtobuf=async e=>{let t=hc.decode(e),n=Je(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,s=e.marshal(),i=O7(n,o,s),a=await t.sign(i.subarray());return new r({publicKey:t.publicKey,payloadType:o,payload:s,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new Ed("Envelope signature is not valid for the given domain");return n};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:s}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){return this.marshaled==null&&(this.marshaled=hc.encode({publicKey:Rt(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return ee(this.marshal(),e.marshal())}async validate(e){let t=O7(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},O7=(r,e,t)=>{let n=O(r),o=$e(n.byteLength),s=$e(e.length),i=$e(t.length);return new ce(o,n,s,e,i,t)};function M7(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 U7="libp2p-peer-record",F7=Uint8Array.from([3,1]);var pc;(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,a={})=>{let c={multiaddr:ie(0)},l=i==null?s.len:s.pos+i;for(;s.pos<l;){let d=s.uint32();switch(d>>>3){case 1:{c.multiaddr=s.bytes();break}default:{s.skipType(d&7);break}}}return c})),o),n.encode=s=>ne(s,n.codec()),n.decode=(s,i)=>te(s,n.codec(),i)})(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,s={})=>{let i={peerId:ie(0),seq:0n,addresses:[]},a=o==null?n.len:n.pos+o;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{i.peerId=n.bytes();break}case 2:{i.seq=n.uint64();break}case 3:{if(s.limits?.addresses!=null&&i.addresses.length===s.limits.addresses)throw new Oe('Decode error - map field "addresses" had too many elements');i.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:s.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return i})),t),r.encode=n=>ne(n,r.codec()),r.decode=(n,o)=>te(n,r.codec(),o)})(pc||(pc={}));var $t=class r{static createFromProtobuf=e=>{let t=pc.decode(e),n=pt(Te(t.peerId)),o=(t.addresses??[]).map(i=>X(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=U7;static CODEC=F7;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=pc.encode({peerId:this.peerId.toMultihash().bytes,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||!M7(this.multiaddrs,e.multiaddrs))}};function Ye(r,e){let t=An(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 OX=BigInt(131072),bs="/libp2p/circuit/relay/0.2.0/hop",t3="/libp2p/circuit/relay/0.2.0/stop",MX=30*1e3,UX=30*1e3,r3=300,V7=4096,K7=.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),Ci.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),vd.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Pi.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),St.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=Ci.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=vd.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=St.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(Do||(Do={}));var _n;(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),Ci.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Pi.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),St.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=Ci.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=St.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(_n||(_n={}));var Ci;(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:ie(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 Oe('Decode error - map field "addrs" had too many elements');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)=>te(t,r.codec(),n)})(Ci||(Ci={}));var vd;(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 Oe('Decode error - map field "addrs" had too many elements');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)=>te(t,r.codec(),n)})(vd||(vd={}));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)=>te(t,r.codec(),n)})(Pi||(Pi={}));var St;(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"})(St||(St={}));var n3;(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"})(n3||(n3={}));(function(r){r.codec=()=>Ke(n3)})(St||(St={}));var H7;(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:ie(0),peer:ie(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)=>te(t,r.codec(),n)})(H7||(H7={}));function o3(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var mc=class{expires;bytes;constructor(e){e?.duration!=null&&e?.duration!==0&&(this.expires=Date.now()+e.duration*1e3),this.bytes=e?.data,this.bytes===0n&&(this.bytes=void 0),this.onData=this.onData.bind(this)}onData(e){this.bytes!=null&&(this.bytes-=BigInt(e.byteLength),this.bytes<0n&&(this.bytes=0n))}getLimits(){if(this.expires==null&&this.bytes==null)return;let e={};if(this.bytes!=null){let t=this;Object.defineProperty(e,"bytes",{get(){return t.bytes}})}if(this.expires!=null){let t=this;Object.defineProperty(e,"seconds",{get(){return Math.round(((t.expires??0)-Date.now())/1e3)}})}return e}};function s3(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:o,onDataWrite:s}=r,i=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async p=>{await l(p),h(!0)};let d=e.abort.bind(e);e.abort=p=>{d(p),h(!0)};let u=e.sink.bind(e);e.sink=async p=>{try{await u(Ve(p,m=>ds(m,g=>s?.(g))))}catch(m){m.type!=="aborted"&&i.error("%s error in sink",t,m)}finally{c=!0,h()}};let f={log:i,sink:e.sink,source:async function*(){try{for await(let p of e.source)o?.(p),yield p}finally{a=!0,h()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function h(p){p===!0&&(a=!0,c=!0),a&&c&&f.timeline.close==null&&(f.timeline.close=Date.now())}return f}var Sd=class extends pe{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,V(1/0,this.discoveryController.signal)}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(bs,{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,V(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(bs)],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 Wt({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=xe([this.discoveryController.signal,AbortSignal.timeout(5e3)]);V(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 i3=class extends pe{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 mt,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 jc("Did not have reservation after making 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=>X(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 q7(r){return new i3(r)}var JI=60*1e3*10,e_=60*1e3*5,t_=30*1e3,Ad=class extends pe{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 mt,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e3,this.started=!1,this.relayFilter=j0(100),this.reserveQueue=new Wt({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.toMultihash().bytes)){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(o3(o.reservation.expire)>JI){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);V(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=o3(a.expire),l=Math.min(Math.max(c-e_,t_),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([X(`/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.toMultihash().bytes)}},{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(bs,t),s=Ye(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===St.OK&&i.reservation!=null){let c=!1,l=e.remoteAddr.bytes;for(let d of i.reservation.addrs)if(ee(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 n_=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(X)}catch{return!1}return!0},a3={maxInboundStopStreams:r3,maxOutboundStopStreams:r3,stopTimeout:3e4},Id=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??a3.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??a3.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??a3.stopTimeout;let n=t.discoverRelays??0;n>0&&(this.discovery=new Sd(e,{filter:t.discoveryFilter??t2(V7,K7)}),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 Ad(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";[Se]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[Vr](){return this.discovery!=null?["@libp2p/identify"]:[]}[un]=!0;isStarted(){return this.started}async start(){await this.registrar.handle(t3,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,runOnLimitedConnection:!0}),await Ht(this.discovery,this.reservationStore),this.started=!0}async stop(){await qt(this.discovery,this.reservationStore),await this.registrar.unhandle(t3),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 Cn(p)}let n=e.toString().split("/p2p-circuit"),o=X(n[0]),s=X(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 Cn(p)}let c=Re(i),l=Re(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(bs),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=Ye(e),d=l.pb(Do);c?.(new H("circuit-relay:write-connect-message")),await d.write({type:Do.Type.CONNECT,peer:{id:n.toMultihash().bytes,addrs:[X(o).bytes]}}),c?.(new H("circuit-relay:read-connect-response"));let u=await d.read();if(u.status!==St.OK)throw new ue(`failed to connect via relay with status ${u?.status?.toString()??"undefined"}`);let f=new mc(u.limit),h=s3({stream:l.unwrap(),remoteAddr:i,localAddr:s.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:f.onData,onDataWrite:f.onData});return this.log("new outbound relayed connection %a",h.remoteAddr),await this.upgrader.upgradeOutbound(h,{limits:f.getLimits(),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 q7({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(u){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",u)}let n=AbortSignal.timeout(this.stopTimeout),o=Ye(t).pb(_n),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:_n.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(s.type!==_n.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:_n.Type.STATUS,status:St.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!n_(s)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:_n.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let i=pt(Te(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:_n.Type.STATUS,status:St.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:_n.Type.STATUS,status:St.OK},{signal:n});let a=new mc(s.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),l=this.addressManager.getAddresses()[0],d=s3({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",d.remoteAddr),await this.upgrader.upgradeInbound(d,{limits:a.getLimits()}),this.log("%s connection %a upgraded","inbound",d.remoteAddr)}};function c3(r={}){return e=>new Id(e,r)}var W7=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},o_=new WeakMap;function s_({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(W7());let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(W7())},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}),o_.set(u,()=>{c(s),s=null,i()}),u}}var i_=s_(),_d=i_;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,i={})=>{let a={observedAddresses:[]},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:{if(i.limits?.observedAddresses!=null&&a.observedAddresses.length===i.limits.observedAddresses)throw new Oe('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(o.bytes());break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(an||(an={}));function l3(r,e){return vn.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:_1.matches(r)?!0:ng.matches(r)?tr(r.toOptions().host)===!1:!1}var z7=1024*4,G7=100,kd={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Td=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??kd.timeout,this.retries=t.retries??kd.retries,this.maxInboundStreams=t.maxInboundStreams??kd.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??kd.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[Vr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(gc,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{vn.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(gc,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,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(gc),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([gc],{signal:o.signal,runOnLimitedConnection:!0});let s=Ye(t,{maxDataLength:z7}).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 ue("DCUtR message type was incorrect");let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new ue("DCUtR connect message had no multiaddrs");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 _d(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:G7});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=>l3(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(vn.exactMatch(s.remoteAddr))throw new Error("Could not open a new, non-limited, 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=Ye(e,{maxDataLength:z7}).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 ue("DCUtR message type was incorrect");if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new ue("DCUtR connect message had no multiaddrs");let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs"),new ue("DCUtR connect message had no dialable multiaddrs");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 ue("DCUtR message type was incorrect");this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:G7,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=X(n);if(!l3(o,this.transportManager))continue;t.push(o)}catch{}return t}};var gc="/libp2p/dcutr";function Y7(r={}){return e=>new Td(e,r)}var Q7="0.1.0",X7="id",j7="id/push",Z7="1.0.0",J7="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,o={})=>{let s={listenAddrs:[],protocols:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 5:{s.protocolVersion=t.string();break}case 6:{s.agentVersion=t.string();break}case 1:{s.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&s.listenAddrs.length===o.limits.listenAddrs)throw new Oe('Decode error - map field "listenAddrs" had too many elements');s.listenAddrs.push(t.bytes());break}case 4:{s.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&s.protocols.length===o.limits.protocols)throw new Oe('Decode error - map field "protocols" had too many elements');s.protocols.push(t.string());break}case 8:{s.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(No||(No={}));var r9=kt(t9(),1),u3=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,Cd=(0,r9.default)(),Pd=u3&&!Cd,n9=Cd&&!u3,o9=Cd&&u3,s9=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!Cd,Rd=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,nZ=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",i9=typeof navigator<"u"&&navigator.product==="ReactNative";var sr={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function a9(r){if(r!=null&&r.length>0)try{return X(r)}catch{}}function u_(r,e){return e!=null||(e=`${r.name}/${r.version}`,s9||n9?e+=` UserAgent=${globalThis.process.version}`:(Pd||Rd||o9||i9)&&(e+=` UserAgent=${globalThis.navigator.userAgent}`)),e}async function Ld(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new ue("message was null or undefined");let s={};if(o.listenAddrs.length>0&&(s.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:X(c)}))),o.protocols.length>0&&(s.protocols=o.protocols),o.publicKey!=null){let c=Je(o.publicKey);if(!wn(c).equals(n.remotePeer))throw new ue("public key did not match remote PeerId");s.publicKey=c}let i;if(o.signedPeerRecord!=null){t("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await br.openAndCertify(c,$t.DOMAIN),d=$t.createFromProtobuf(l.payload),u=bn(l.publicKey.toCID());if(!d.peerId.equals(u))throw new ue("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(d.peerId))throw new ue("signing key does not match remote PeerId");let f;try{f=await r.get(d.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(s.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=await br.createFromProtobuf(f.peerRecordEnvelope),p=$t.createFromProtobuf(h.payload);p.seqNumber>=d.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,d.seqNumber),d=p,c=f.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=O(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=O(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=>X(c)),observedAddr:o.observedAddr==null?void 0:X(o.observedAddr),protocols:o.protocols,signedPeerRecord:i,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var Ri=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??sr.timeout,this.maxInboundStreams=t.maxInboundStreams??sr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??sr.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??sr.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??sr.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??sr.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??sr.protocolPrefix}/${Q7}`,agentVersion:u_(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:O(this.host.agentVersion),ProtocolVersion:O(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,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var Dd=class extends Ri{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??sr.protocolPrefix}/${j7}/${J7}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??sr.concurrency,(t.runOnSelfUpdate??sr.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Se]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(d=>d.decapsulateCode(J("p2p").code)),t=new $t({peerId:this.peerId,multiaddrs:e}),n=await br.seal(t,this.privateKey),o=this.registrar.getProtocols(),s=await this.peerStore.get(this.peerId),i=U(s.metadata.get("AgentVersion")??O(this.host.agentVersion)),a=U(s.metadata.get("ProtocolVersion")??O(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);V(1/0,h);try{f=await d.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await Ye(f,{maxDataLength:c.maxMessageSize}).pb(No).write({listenAddrs:e.map(m=>m.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 zt(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 Ye(n,{maxDataLength:this.maxMessageSize}).pb(No).read(o);await n.close(o),await Ld(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 Nd=class extends Ri{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??sr.protocolPrefix}/${X7}/${Z7}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??sr.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)})})}[Se]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);V(1/0,o),t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let s=await Ye(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 ue("public key was missing from identify message");let a=Je(o),c=bn(a.toCID());if(!e.remotePeer.equals(c))throw new ue("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new ue("identified peer is our own peer id?");let l=a9(i);return this.log("identify completed for peer %p and protocols %o",c,s),this.log("our observed address is %a",l),l!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(this.log("storing our observed address %a",l),this.addressManager.addObservedAddr(l)),Ld(this.peerStore,this.events,this.log,e,n)}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);V(1/0,o);try{let s=await this.peerStore.get(this.peerId),i=this.addressManager.getAddresses().map(d=>d.decapsulateCode(J("p2p").code)),a=s.peerRecordEnvelope;if(i.length>0&&a==null){let d=new $t({peerId:this.peerId,multiaddrs:i});a=(await br.seal(d,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;rg.matches(t.remoteAddr)||(c=void 0),await Ye(n).pb(No).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Rt(this.privateKey.publicKey),listenAddrs:i.map(d=>d.bytes),signedPeerRecord:a,observedAddr:c,protocols:s.protocols},{signal:o}),await n.close({signal:o})}catch(s){this.log.error("could not respond to identify request",s),n.abort(s)}}};function c9(r={}){return e=>new Nd(e,r)}function l9(r={}){return e=>new Dd(e,r)}var u9="/ipfs/kad/1.0.0",d9="/dht/record",d3="/dht/provider";var yc;(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:ie(0),value:ie(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)=>te(t,r.codec(),n)})(yc||(yc={}));function f9(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 h9(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 At=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 yc.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:f9(this.timeReceived)}}static deserialize(e){let t=yc.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=h9(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 Bo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Bd=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},Od=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},Md=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var p9;(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,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.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 3:{s.author=t.bytes();break}case 4:{s.signature=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)=>te(t,r.codec(),n)})(p9||(p9={}));var we;(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"})(we||(we={}));var Ud;(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"})(Ud||(Ud={}));(function(r){r.codec=()=>Ke(Ud)})(we||(we={}));var Di;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Di||(Di={}));var f3;(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"})(f3||(f3={}));(function(r){r.codec=()=>Ke(f3)})(Di||(Di={}));var Li;(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),Di.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:ie(0),multiaddrs:[]},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?.multiaddrs!=null&&s.multiaddrs.length===o.limits.multiaddrs)throw new Oe('Decode error - map field "multiaddrs" had too many elements');s.multiaddrs.push(t.bytes());break}case 3:{s.connection=Di.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Li||(Li={}));var Br;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&Ud[t.type]!==0&&(n.uint32(8),we.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),Li.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Li.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={type:we.PUT_VALUE,closer:[],providers:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.type=we.codec().decode(t);break}case 10:{s.clusterLevel=t.int32();break}case 2:{s.key=t.bytes();break}case 3:{s.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&s.closer.length===o.limits.closer)throw new Oe('Decode error - map field "closer" had too many elements');s.closer.push(Li.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&s.providers.length===o.limits.providers)throw new Oe('Decode error - map field "providers" had too many elements');s.providers.push(Li.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Br||(Br={}));function h3(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new CustomEvent("kad-dht:query:send-query",{detail:t})),t}function wc(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new CustomEvent("kad-dht:query:peer-response",{detail:t})),t}function Fd(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function xr(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function p3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function bc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function m3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function m9(r,e,t){if(t.length===0)throw new C("No records given");let o=U(e).split("/");if(o.length<3)throw new C("Record key does not have a selector function");let s=r[o[1].toString()];if(s==null)throw new Md(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:s(e,t)}function f_(r,e){return 0}var g9={pk:f_};async function Ni(r,e){let t=e.key,o=U(t).split("/");if(o.length<3)return;let s=r[o[1].toString()];if(s==null)throw new C(`No validator available for key type "${o[1]}"`);await s(t,e.value)}var h_=async(r,e)=>{if(!(r instanceof Uint8Array))throw new C('"key" must be a Uint8Array');if(r.byteLength<5)throw new C("Invalid public key record");if(U(r.subarray(0,4))!=="/pk/")throw new C("key was not prefixed with /pk/");let n=Je(e),o=r.slice(4);if(!ee(o,n.toMultihash().bytes))throw new C("public key does not match passed in key")},y9={pk:h_};var p_=O("/pk/");function w9(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=tr(n);return o==null?!0:!o})}}async function Oo(r){return(await ft.digest(r)).digest}async function Or(r){return Oo(r.toMultihash().bytes)}function Mo(r){return new Le(`${d9}/${U(r,"base32")}`,!1)}function b9(r){return Pe([p_,r.toMultihash().bytes])}function x9(r){return U(r.subarray(0,4))==="/pk/"}function E9(r){let e=Te(r.subarray(4));return pt(e)}function g3(r,e){let t=new Date;return new At(r,e,t).serialize()}function v9(r,e=100){let t;return()=>{clearTimeout(t),t=setTimeout(()=>{r()},e)}}var m_=290,g_=54,y_=55,w_=56,b_=4,x_=41;function S9(r){let e=r.stringTuples();for(let t of e)if(t[0]===m_)return!1;if(e[0][0]===g_||e[0][0]===y_||e[0][0]===w_)return!0;if(e[0][0]===b_||e[0][0]===x_){let t=tr(`${e[0][1]}`);return t==null||!t}return!1}var $d=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=Mo(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=At.deserialize(n);return await Ni(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let s=g3(e,n);for(let{value:i,from:a}of t){if(ee(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=Mo(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:we.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&ee(d.record.value,At.deserialize(s).value)&&(c=!0),yield d;c||(yield xr({from:a,error:new Bo("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=g3(e,t),s=Mo(e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray()),yield*Ve(this.peerRouting.getClosestPeers(e,{signal:n.signal}),i=>Qt(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:we.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&&ee(d.record.value,At.deserialize(o).value)||c.push(xr({from:a.peer.id,error:new Bo("Value not put correctly")},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=m9(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new Be("Best value was 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 bc({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 bc({from:s,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function I9(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function xc(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Te(r.id);return{id:pt(e),multiaddrs:(r.multiaddrs??[]).map(t=>X(t))}}var Vd=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:we.ADD_PROVIDER,key:o,providers:[I9({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(xr({from:c.peer.id,error:d},n))}return l};yield*Ve(this.peerRouting.getClosestPeers(o,n),c=>Qt(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.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",u)}if(yield wc({from:this.components.peerId,messageType:we.GET_PROVIDERS,providers:d},t),yield p3({from:this.components.peerId,providers:d},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u}){let f={type:we.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d,f,{...t,signal:u})},l=new er(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 p3({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var Bi=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 E_=1.2,v_=2,S_=2e3,Oi=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Bi(e.interval??5e3),this.failure=new Bi(e.interval??5e3),this.next=new Bi(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??v_,this.timeoutMultiplier=e.timeoutMultiplier??E_,this.minTimeout=e.minTimeout??S_,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=xe([e.signal,n]);return V(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 Kd=class extends pe{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 Oi({...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 C("Message type was missing");this.log("sending %s to %p",t.type,e),yield m3({peer:e},n),yield h3({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 wc({from:e,messageType:c.type,closer:c.closer.map(xc),providers:c.providers.map(xc),record:c.record==null?void 0:At.deserialize(c.record)},n)}catch(a){s?.abort(a),this.log.error("could not send %s to %p",t.type,e,a),yield xr({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 C("Message type was missing");this.log("sending %s to %p",t.type,e),yield m3({peer:e},n),yield h3({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 wc({from:e,messageType:o},n)}catch(a){s?.abort(a),yield xr({from:e,error:a},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){let o=Ye(e);await o.write(t,Br,n),await o.unwrap().close(n)}async _writeReadMessage(e,t,n){let o=Ye(e);await o.write(t,Br,n);let s=await o.read(Br,n);return await o.unwrap().close(n),s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:xc(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:xc(i)})}),s}};function Mi(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 Ui=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 Or(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)=>Mi(o.distance,s.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await Or(e),n=rn(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Mi(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var Hd=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.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")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:we.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=b9(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let s=Je(o.record.value),i=wn(s);if(!i.equals(e))throw new Tn("public key does not match id");if(i.publicKey==null)throw new Tn("public key missing");yield bc({from:e,value:o.record.value},t)}throw new Bo(`Node not responding with its public key: ${e.toString()}`)}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 Fd({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:we.FIND_NODE,key:e.toMultihash().bytes};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 Fd({from:l.from,peer:d},t))}};for await(let i of this.queryManager.run(e.toMultihash().bytes,s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}n||(yield xr({from:this.peerId,error:new Be("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Oo(e),o=this.routingTable.closestPeers(n),s=this,i=new Ui(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:we.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 Fd({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 xr({from:o.from,error:new Bo(i)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new Od("invalid record received");await Ni(this.validators,new At(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await Oo(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.name!=="NotFoundError")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 _9=kt(d2(),1);var qd=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,_9.default)(n??256),this.syncQueue=new kr({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:d3});for await(let a of i)try{let{cid:c,peerId:l}=k9(a.key),d=T9(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=Ec(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=Ec(e),n=this.cache.get(t);return n==null&&(n=await T_(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=Ec(e);this.cache.set(s,n),await k_(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=>Re(n))),{throwOnTimeout:!0})}};function Ec(r){let e=typeof r=="string"?r:U(r.multihash.bytes,"base32");return`${d3}/${e}`}async function k_(r,e,t,n){let o=[Ec(e),"/",t.toString()].join(""),s=new Le(o),i=$e(n.getTime());await r.put(s,i)}function k9(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 T_(r,e){let t=new Map,n=r.query({prefix:Ec(e)});for await(let o of n){let{peerId:s}=k9(o.key);t.set(s,T9(o.value))}return t}function T9(r){return new Date(Bt(r))}async function*C9(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 lr({concurrency:i,sort:(g,y)=>Mi(g.options.distance,y.options.distance)}),p=await Oo(e);function m(g,y){if(g==null)return;u.add(g);let b=rn(y,p);h.add(async()=>{let w=[o];l!=null&&w.push(AbortSignal.timeout(l));let x=xe(w);V(1/0,x);try{for await(let k of s({key:e,peer:g,signal:x,pathIndex:a,numPaths:c})){if(x.aborted)return;if(k.name==="PEER_RESPONSE")for(let T of k.closer){if(u.has(T.id)){d("already seen %p in query",T.id);continue}if(n.equals(T.id)){d("not querying ourselves");continue}if(!await f.isDialable(T.multiaddrs)){d("not querying undialable peer");continue}let E=await Or(T.id),S=rn(E,p);if(Mi(S,b)!==-1){d("skipping %p as they are not closer to %b than %p",T.id,e,g);continue}d("querying closer peer %p",T.id),m(T.id,E)}h.safeDispatchEvent("completed",{detail:k})}}catch(k){if(!o.aborted)return xr({from:g,error:k},r)}finally{x.clear()}},{distance:b}).catch(w=>{d.error(w)})}m(t,await Or(t));try{for await(let g of h.toGenerator({signal:o}))g!=null&&(yield g)}catch(g){throw o.aborted?new Bd("Query aborted"):g}}var Wd=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,V(1/0,this.shutDownController.signal)}isStarted(){return this.running}async start(){this.running=!0,this.shutDownController=new AbortController,V(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);V(1/0,d),n={...n,signal:d}}let s=new AbortController,i=xe([this.shutDownController.signal,s.signal,n.signal]);V(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 ke(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),a("query:start"),this.queries++,this.metrics?.runningQueries.update(this.queries);let d=await Oo(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 er,p=f.map((m,g)=>C9({key:e,startingPeer:m,ourPeerId:this.peerId,signal:i,query:t,pathIndex:g,numPaths:f.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:a,peersSeen:h,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 g of[...m.closer,...m.providers])await this.connectionManager.isDialable(g.multiaddrs)&&await this.routingTable.add(g.id);yield m}l=!0}catch(d){if(!(!this.running&&d.name==="QueryAbortedError"))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 C_(r){return r[Symbol.asyncIterator]!=null}function P_(r){if(C_(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 zd=P_;var R_=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 L_(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}=R_(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=Xr(o,{milliseconds:t.timeout});return s.cancel=n,s}return o}function vc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=L_(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var Gd=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=Z(),this.started){this.controller=new AbortController;let e=AbortSignal.timeout(this.queryTimeout),t=xe([this.controller.signal,e]);V(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 vc(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 Ve(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),s=>oo(s,this.count),async s=>zd(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 D_(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 R9(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 Sc(r){return Array.isArray(r?.peers)}var Yd=class extends pe{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,R9("options.localPeer.kadId",e.localPeer.kadId),this.root={prefix:"",depth:0,peers:[]}}add(e){R9("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 Ui(e,t);for(let o of this.toIterable())n.addWitKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Qt(n.peers,o=>o.id)}count(){function e(t){if(Sc(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(Sc(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+U(rn(e,t),"base16"))}_determineBucket(e){let n=U(e,"base2").substring(0,this.prefixLength);function o(s,i=0){return Sc(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=>D_(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 N_="kad-close",B_=50,Ac=20,O_=32,M_=1e4,U_=10,Qd=class extends pe{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??M_,this.pingConcurrency=t.pingConcurrency??U_,this.running=!1,this.protocol=t.protocol,this.tagName=t.tagName??N_,this.tagValue=t.tagValue??B_,this.prefixLength=t.prefixLength??O_,this.splitThreshold=t.splitThreshold??Ac,this.pingQueue=new Wt({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 Yd({localPeer:{kadId:await Or(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 Or(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 er,n=v9(()=>{let o=new er(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=Ye(c);await u.write({type:we.PING},Br,l);let f=await u.read(Br,l);if(await u.unwrap().close(),f.type!==we.PING)throw new ue(`Incorrect message type received, expected PING got ${f.type}`);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 Or(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 Or(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 Or(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(Sc(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 L9=[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 Xd=15,jd=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);V(1/0,s);let i=await zd(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{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>Xd&&(e=Xd);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=lt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),s=Te(o);return pt(s)}async _makePeerId(e,t,n){if(n>Xd)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Xd}`);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=L9[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,ft.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 Zd=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 ue("Missing key");let n;try{n=re.decode(t.key)}catch{throw new ue("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(i=>X(i).toString()));let s=Te(o.id);await this.providers.addProvider(n,pt(s))}))}};var Jd=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 ue("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);ee(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(J("p2p").code))});let o={type:we.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:s})=>s.length).map(s=>({id:s.id.toMultihash().bytes,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 ef=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 ue("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=re.decode(t.key)}catch{throw new ue("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:we.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:a.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toMultihash().bytes,multiaddrs:l.multiaddrs.map(d=>d.bytes)})),providers:i.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toMultihash().bytes,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.name!=="NotFoundError")throw o}return t}};var tf=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 ue("Invalid key");let o={type:we.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(x9(n)){this.log("is public key");let a=E9(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Be("No public key found in key book");c=Rt(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new At(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.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Mo(e),n;try{n=await this.datastore.get(t)}catch(s){if(s.name==="NotFoundError")return;throw s}let o=At.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>1296e5){await this.datastore.delete(t);return}return o}};var rf=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 nf=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 ue(o)}try{let o=At.deserialize(t.record);await Ni(this.validators,o),o.timeReceived=new Date;let s=Mo(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 of=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={[we.GET_VALUE.toString()]:new tf(e,{peerRouting:o,logPrefix:i}),[we.PUT_VALUE.toString()]:new nf(e,{validators:s,logPrefix:i}),[we.FIND_NODE.toString()]:new Jd(e,{peerRouting:o,logPrefix:i,peerInfoMapper:a}),[we.ADD_PROVIDER.toString()]:new Zd(e,{providers:n,logPrefix:i}),[we.GET_PROVIDERS.toString()]:new ef(e,{peerRouting:o,providers:n,logPrefix:i,peerInfoMapper:a}),[we.PING.toString()]:new rf(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 Ve(t,i=>Yt(i),async function*(i){for await(let a of i){let c=Br.decode(a);s.log("incoming %s from %p",c.type,o);let l=await s.handleMessage(o,c);l!=null&&(yield Br.encode(l))}},i=>Gt(i),t)}).catch(t=>{this.log.error(t)})}};var sf=class extends pe{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 CustomEvent("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var w3=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await zt(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 zt(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 Be("Could not find value for key")}},b3=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 Be("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},F_=32,$_=64,af=class extends pe{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,m=l??"libp2p:kad-dht";this.running=!1,this.components=e,this.log=e.logger.forComponent(m),this.protocol=c??u9,this.kBucketSize=n??20,this.clientMode=o??!0,this.maxInboundStreams=f??F_,this.maxOutboundStreams=h??$_,this.peerInfoMapper=t.peerInfoMapper??w9,this.routingTable=new Qd(e,{kBucketSize:n,pingTimeout:d,pingConcurrency:u,protocol:this.protocol,logPrefix:m}),this.providers=new qd(e,p??{}),this.validators={...y9,...s},this.selectors={...g9,...i},this.network=new Kd(e,{protocol:this.protocol,logPrefix:m});let g=Z();t.allowQueryWithZeroPeers===!0&&g.resolve(),this.queryManager=new Wd(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:m,initialQuerySelfHasRun:g,routingTable:this.routingTable}),this.peerRouting=new Hd(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:m}),this.contentFetching=new $d(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:m}),this.contentRouting=new Vd(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:m}),this.routingTableRefresh=new jd(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:m}),this.rpc=new of(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:m,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new sf(e,{protocol:this.protocol,logPrefix:m}),this.querySelf=new Gd(e,{peerRouting:this.peerRouting,interval:a,initialInterval:t.initialQuerySelfInterval,logPrefix:m,initialQuerySelfHasRun:g,routingTable:this.routingTable}),this.network.addEventListener("peer",y=>{let b=y.detail;this.onPeerConnect(b).catch(w=>{this.log.error("could not add %p to routing table",b.id,w)}),this.dispatchEvent(new CustomEvent("peer",{detail:b}))}),this.topologyListener.addEventListener("peer",y=>{let b=y.detail;Promise.resolve().then(async()=>{let w=await this.components.peerStore.get(b),x={id:b,multiaddrs:w.addresses.map(({multiaddr:k})=>k),protocols:w.protocols};await this.onPeerConnect(x)}).catch(w=>{this.log.error("could not add %p to routing table",b,w)})}),this.dhtPeerRouting=new b3(this),this.dhtContentRouting=new w3(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",y=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let b=y.detail.peer.addresses.some(({multiaddr:x})=>S9(x)),w=this.getMode();b&&w==="client"?await this.setMode("server"):w==="server"&&!b&&await this.setMode("client")}).catch(b=>{this.log.error("error setting dht server mode",b)})})}[Symbol.toStringTag]="@libp2p/kad-dht";[Se]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[Vr]=["@libp2p/identify"];get[cn](){return this.dhtContentRouting}get[ln](){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 Ht(this.querySelf,this.providers,this.queryManager,this.network,this.routingTable,this.topologyListener,this.routingTableRefresh)}async stop(){this.running=!1,await qt(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 D9;(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"})(D9||(D9={}));function N9(r={}){return e=>new af(e,r)}var H9=kt(K9(),1),Vi=H9.default;var ry=kt(Z9(),1);var Ki={};yt(Ki,{create:()=>ok,derivedEmptyPasswordKey:()=>uf});var uf={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function ok(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=Jt.get();t*=8;async function c(u,f){let h=a.getRandomValues(new Uint8Array(s)),p=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:p};typeof f=="string"&&(f=O(f));let g;if(f.length===0){g=await a.subtle.importKey("jwk",uf,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,w,{name:e,length:t},!0,["encrypt"])}catch{g=await a.subtle.importKey("jwk",uf,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,w,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(m,g,u);return Pe([h,m.iv,new Uint8Array(y)])}async function l(u,f){let h=u.subarray(0,s),p=u.subarray(s,s+n),m=u.subarray(s+n),g={name:e,iv:p};typeof f=="string"&&(f=O(f));let y;if(f.length===0)try{let w={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},x=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",uf,{name:"AES-GCM"},!0,["decrypt"])}else{let w={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},x=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(g,y,m);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}async function E3(r,e){let n=await Ki.create().encrypt(r,e);return rt.encode(n)}async function v3(r,e,t){if(r.type==="RSA")return ak(r,e,t);if(r.type==="Ed25519")return sk(r,e,t);if(r.type==="secp256k1")return ik(r,e,t);throw new $r}async function sk(r,e,t="libp2p-key"){if(t==="libp2p-key")return E3(Js(r),e);throw new C(`export format '${t}' is not supported`)}async function ik(r,e,t="libp2p-key"){if(t==="libp2p-key")return E3(Js(r),e);throw new C("Export format is not supported")}async function ak(r,e,t="pkcs-8"){if(t==="pkcs-8")return ck(r,e);if(t==="libp2p-key")return E3(Js(r),e);throw new C("Export format is not supported")}async function ck(r,e){let t=Jt.get(),o=new ct({value:[new Ze({value:0}),new ct({value:[new Ir({value:"1.2.840.113549.1.1.1"}),new $n]}),new Vn({valueHex:r.raw})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=lt(16),a=await _u(fo,e,i,{c:1e4,dkLen:32}),c=lt(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 ct({value:[new Vn({valueHex:i}),new Ze({value:1e4}),new Ze({value:32}),new ct({value:[new Ir({value:"1.2.840.113549.2.11"}),new $n]})]}),f=new ct({value:[new Ir({value:"1.2.840.113549.1.5.13"}),new ct({value:[new ct({value:[new Ir({value:"1.2.840.113549.1.5.12"}),u]}),new ct({value:[new Ir({value:"2.16.840.1.101.3.4.1.42"}),new Vn({valueHex:c})]})]})]}),p=new ct({value:[f,new Vn({valueHex:d})]}).toBER(),m=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...U(m,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
19
- `)}async function S3(r,e){try{let t=await lk(r,e);return N6(t)}catch{}if(!r.includes("BEGIN"))throw new C("Encrypted key was not a libp2p-key or a PEM file");return uk(r,e)}async function lk(r,e){let t=rt.decode(r);return Ki.create().decrypt(t,e)}async function uk(r,e){let t=Jt.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let s=O(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=os(s),{iv:a,salt:c,iterations:l,keySize:d,cipherText:u}=dk(i),f=await _u(fo,e,c,{c:l,dkLen:d}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Ic(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:m}=os(p);n=ty(m)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let s=O(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=os(s);n=ty(i)}else throw new C("Could not parse private key from PEM data");let o=B6(n);if(o.type!=="RSA")throw new C("Could not parse RSA private key from PEM data");return o}function dk(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new C("Only pkcs5PBES2 encrypted private keys are supported");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 C("Only pkcs5PBKDF2 key derivation functions are supported");let s=n.valueBlock.value[1],i=Ic(s.valueBlock.value[0].getValue()),a=1e4,c=32;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 C("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");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 C("Only AES-CBC encryption schemes are supported")}}}}let u=Ic(l.valueBlock.value[1].getValue());return{cipherText:Ic(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function ty(r){return Ic(r.valueBlock.value[2].getValue())}function Ic(r){return new Uint8Array(r,0,r.byteLength)}var fk="/pkcs8/",I3="/info/",_c=new WeakMap,xs={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},A3={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function Hi(r){return r==null||typeof r!="string"?!1:r===(0,ry.default)(r.trim())&&r.length>0}async function It(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function Es(r){return new Le(fk+r)}function qi(r){return new Le(I3+r)}async function hk(r){let e=Js(r),t=await ft.digest(e);return Ee.encode(t.bytes).substring(1)}var df=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=Vi(A3,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<xs.minKeyLength)throw new Error(`dek.keyLength must be least ${xs.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<xs.minSaltLength)throw new Error(`dek.saltLength must be least ${xs.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<xs.minIterationCount)throw new Error(`dek.iterationCount must be least ${xs.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Ma(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";_c.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Se]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},A3),t=Math.ceil(xs.minSaltLength/3)*3;return e.dek.salt=U(lt(t),"base64"),e}static get options(){return A3}async findKeyByName(e){if(!Hi(e))throw await It(),new C(`Invalid key name '${e}'`);let t=qi(e);try{let n=await this.components.datastore.get(t);return JSON.parse(U(n))}catch(n){throw await It(),this.log.error(n),new Be(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:I3};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(U(n.value));if(o.id===e)return o}throw new C(`Key with id '${e}' does not exist.`)}catch(t){throw await It(),t}}async importKey(e,t){if(!Hi(e))throw await It(),new C(`Invalid key name '${e}'`);if(t==null)throw await It(),new C("Key is required");let n=Es(e);if(await this.components.datastore.has(n))throw await It(),new C(`Key '${e}' already exists`);let s,i;try{s=await hk(t);let l=_c.get(this);if(l==null)throw new C("dek missing");let d=l.dek;i=await v3(t,d,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await It(),l}let a={name:e,id:s},c=this.components.datastore.batch();return c.put(n,O(i)),c.put(qi(e),O(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Hi(e))throw await It(),new C(`Invalid key name '${e}'`);let t=Es(e);try{let n=await this.components.datastore.get(t),o=U(n),s=_c.get(this);if(s==null)throw new C("dek missing");let i=s.dek;return await S3(o,i)}catch(n){throw await It(),n}}async removeKey(e){if(!Hi(e)||e==="self")throw await It(),new C(`Invalid key name '${e}'`);let t=Es(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(qi(e)),await o.commit(),n}async listKeys(){let e={prefix:I3},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(U(n.value)));return t}async renameKey(e,t){if(!Hi(e)||e==="self")throw await It(),new C(`Invalid old key name '${e}'`);if(!Hi(t)||t==="self")throw await It(),new C(`Invalid new key name '${t}'`);let n=Es(e),o=Es(t),s=qi(e),i=qi(t);if(await this.components.datastore.has(o))throw await It(),new C(`Key '${t}' 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,O(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await It(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await It(),new C(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await It(),new C(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await It(),new C(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=_c.get(this);if(n==null)throw new C("dek missing");let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?Ma(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";_c.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(Es(a.name)),l=U(c),d=await S3(l,o),u=s.toString(),f=await v3(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(Es(a.name),O(f)),h.put(qi(a.name),O(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function ff(r={}){return e=>new df(e,r)}var hf=class extends Error{remainingPoints;msBeforeNext;consumedPoints;isFirstInDuration;constructor(e="Rate limit exceeded",t){super(e),this.name="RateLimitError",this.remainingPoints=t.remainingPoints,this.msBeforeNext=t.msBeforeNext,this.consumedPoints=t.consumedPoints,this.isFirstInDuration=t.isFirstInDuration}};var Wi=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 _3}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 hf("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 _d(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)}},_3=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 ge;(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"})(ge||(ge={}));var kc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),k3=Object.freeze({NEW_STREAM:ge.NEW_STREAM,MESSAGE:ge.MESSAGE_INITIATOR,CLOSE:ge.CLOSE_INITIATOR,RESET:ge.RESET_INITIATOR}),ny=Object.freeze({MESSAGE:ge.MESSAGE_RECEIVER,CLOSE:ge.CLOSE_RECEIVER,RESET:ge.RESET_RECEIVER});var T3=1<<20,pk=4<<20,pf=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=T3,t=pk){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 new ue("Unprocessed message queue size too large!");let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.name==="InvalidMessageError")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===ge.NEW_STREAM||o===ge.MESSAGE_INITIATOR||o===ge.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}=sy(e),{value:o,offset:s}=sy(e,n),i=t&7;if(kc[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw new ue("Message size too large");return{id:t>>3,type:i,offset:n+s,length:o}}},mk=128,oy=127;function sy(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&oy)<<n:(s&oy)*Math.pow(2,n),n+=7}while(s>=mk);return e=o-e,{value:t,offset:e}}var C3=10*1024,P3=class{_pool;_poolOffset;constructor(){this._pool=We(C3),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;$e(e.id<<3|e.type,n,o),o+=he(e.id<<3|e.type),(e.type===ge.NEW_STREAM||e.type===ge.MESSAGE_INITIATOR||e.type===ge.MESSAGE_RECEIVER)&&e.data!=null?($e(e.data.length,n,o),o+=he(e.data.length)):($e(0,n,o),o+=he(0));let s=n.subarray(this._poolOffset,o);C3-o<100?(this._pool=We(C3),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===ge.NEW_STREAM||e.type===ge.MESSAGE_INITIATOR||e.type===ge.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},gk=new P3;async function*iy(r){for await(let e of r){let t=new ce;gk.write(e,t),yield t}}var mf=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var R3=class extends In{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?k3:ny,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:k3.NEW_STREAM,data:new ce(O(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 ay(r){let{id:e,name:t,send:n,onEnd:o,type:s="initiator",maxMsgSize:i=T3}=r;return new R3({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 yk=1024,wk=1024,bk=1024*1024*4,xk=5,Ek=500;function cy(r){let e={...r,type:`${kc[r.type]} (${r.type})`};return r.type===ge.NEW_STREAM&&(e.data=U(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===ge.MESSAGE_INITIATOR||r.type===ge.MESSAGE_RECEIVER)&&(e.data=U(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var gf=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??Ek,this.sink=this._createSink(),this._source=Tt({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=Ve(this._source,n=>iy(n)),this.closeController=new AbortController,this.rateLimiter=new Wi({points:t.disconnectThreshold??xk,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 dn("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??wk))throw new no("Too many outbound streams open");if(s.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=ay({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,cy(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=()=>{pd(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new pf(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",cy(e)),e.type===ge.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??yk)){this.log("too many inbound streams open"),this._source.push({id:t,type:ge.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,kc[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??bk;try{switch(n){case ge.MESSAGE_INITIATOR:case ge.MESSAGE_RECEIVER:if(s.sourceReadableLength()>i)throw this._source.push({id:e.id,type:n===ge.MESSAGE_INITIATOR?ge.RESET_RECEIVER:ge.RESET_INITIATOR}),new mf("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");s.sourcePush(e.data);break;case ge.CLOSE_INITIATOR:case ge.CLOSE_RECEIVER:s.remoteCloseWrite();break;case ge.RESET_INITIATOR:case ge.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 L3=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Se]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new gf(this.components,{...e,...this._init})}};function ly(r={}){return e=>new L3(e,r)}var uy="1.0.0",dy="ping",fy="ipfs";var yf=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??fy}/${dy}/${uy}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!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,runOnLimitedConnection:this.runOnLimitedConnection}),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 ar("ping timeout"))}),Ve(t,async function*(s){let i=0;for await(let a of s){if(i+=a.byteLength,i>32){t?.abort(new ue("Too much data received"));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=lt(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,runOnLimitedConnection:this.runOnLimitedConnection}),a=()=>{i?.abort(new dt)},t.signal?.addEventListener("abort",a,{once:!0});let c=await Ve([o],i,async d=>ps(d)),l=Date.now()-n;if(c==null)throw new ea(`Did not receive a ping ack after ${l}ms`);if(!ee(o,c.subarray()))throw new ea(`Received wrong ping ack after ${l}ms`);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 py(r={}){return e=>new yf(e,r)}var my=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))},Ik=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var _k=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var kk=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 Tk=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var Ck=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var Pk=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,Rk=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,gy=3,Lk=[["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",Pk]],yy=[["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 by(r){return r?wy(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new Ck:typeof navigator<"u"?wy(navigator.userAgent):Bk()}function Dk(r){return r!==""&&Lk.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 wy(r){var e=Dk(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new Tk;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<gy&&(o=my(my([],o,!0),Ok(gy-o.length),!0)):o=[];var s=o.join("."),i=Nk(r),a=Rk.exec(r);return a&&a[1]?new kk(t,s,i,a[1]):new Ik(t,s,i)}function Nk(r){for(var e=0,t=yy.length;e<t;e++){var n=yy[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function Bk(){var r=typeof process<"u"&&process.version;return r?new _k(process.version.slice(1)):null}function Ok(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var xy=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"];var Ey=by(),Tc=Ey!=null&&Ey.name==="firefox",wf=async function*(){},bf=async r=>{},Mk=30*1e3;function vy(r,e,t=Mk,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=Z(),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 Xr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function Cc(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??xy.map(e=>({urls:[e]})),r}var vs=class{log;peerConnection;remoteAddr;timeline;metrics;source=wf();sink=bf;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 Vt;(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,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.flag=r.Flag.codec().decode(o);break}case 2:{a.message=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(Vt||(Vt={}));var Uk=2*1024*1024,Fk=30*1e3,xf=16*1024;function $k(r=xf){let e=he(r-he(r)),t=1+he(Object.keys(Vt.Flag).length-1),n=1,o=r-e-t-n,s=he(o);return e+t+n+s}var Vk=$k(),Kk=5e3,Hk=5e3,D3=class extends In{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 Xr(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=Tt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??Fk,this.maxBufferedAmount=e.maxBufferedAmount??Uk,this.maxMessageSize=(e.maxMessageSize??xf)-Vk,this.receiveFinAck=Z(),this.finAckTimeout=e.closeTimeout??Kk,this.openTimeout=e.openTimeout??Hk,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 Ko("Unknown datachannel 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 Yt(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 vc(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof ar?new ar(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new Ko(`Invalid datachannel state - ${this.channel.readyState}`);this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await vc(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=Vt.encode({message:n}),s=Gt.single(o);await this._sendMessage(s),e.consume(t)}}async sendReset(){await this._sendFlag(Vt.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag(Vt.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",errorName:"FinAckNotReceivedError"})}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(Vt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Vt.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===Vt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Vt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Vt.Flag.RESET&&this.reset(),t.flag===Vt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Vt.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=Vt.encode({flag:e}),n=Gt.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 zi(r){let{channel:e,direction:t}=r;return new D3({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var Sy="/webrtc",Uo=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=zi({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 N3(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},N3=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=zi({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),vy(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=wf();sink=bf;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=zi({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 Ss=globalThis.RTCPeerConnection,Ef=globalThis.RTCSessionDescription,Ay=globalThis.RTCIceCandidate;var Fo=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Mr=class extends Fo{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var Pc=class extends Fo{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`),this.name="WebRTC/DataChannelError"}},vf=class extends Fo{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`),this.name="WebRTC/InappropriateMultiaddrError"}};var Rc=class extends Fo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var Sf=class extends Fo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},Af=class extends Fo{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var ir;(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,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.data=o.string();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(ir||(ir={}));var If=async(r,e,t)=>{try{let n=Z();for(qk(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!==ir.Type.ICE_CANDIDATE)throw new ue("ICE candidate message expected");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 Ay(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&&_f(r)!=="connected")throw n}};function _f(r){return Tc?r.iceConnectionState:r.connectionState}function qk(r,e){r[Tc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(_f(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new Cs("RTCPeerConnection was closed"));break;default:break}}}async function Iy({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:s,transportManager:i,log:a,logger:c,onProgress:l}){let{baseAddr:d}=_y(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",d);let u=d.getPeerId();if(u==null)throw new C("Relay peer was missing");let f=s.getConnections(Re(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 m=await h.newStream(kf,{signal:t,runOnLimitedConnection:!0}),g=Ye(m).pb(ir),y=new Ss(r),b=new Uo({logger:c},{peerConnection:y,dataChannelOptions:e});try{let w=y.createDataChannel("init");y.onicecandidate=({candidate:E})=>{let S=JSON.stringify(E?.toJSON()??null);a.trace("initiator sending ICE candidate %o",E),g.write({type:ir.Type.ICE_CANDIDATE,data:S},{signal:t}).catch(_=>{a.error("error sending ICE candidate",_)})},y.onicecandidateerror=E=>{a.error("initiator ICE candidate error",E)};let x=await y.createOffer().catch(E=>{throw a.error("could not execute createOffer",E),new Mr("Failed to set createOffer")});a.trace("initiator send SDP offer %s",x.sdp),l?.(new H("webrtc:send-sdp-offer")),await g.write({type:ir.Type.SDP_OFFER,data:x.sdp},{signal:t}),await y.setLocalDescription(x).catch(E=>{throw a.error("could not execute setLocalDescription",E),new Mr("Failed to set localDescription")}),l?.(new H("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let k=await g.read({signal:t});if(k.type!==ir.Type.SDP_ANSWER)throw new Mr("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",k.data);let T=new Ef({type:"answer",sdp:k.data});return await y.setRemoteDescription(T).catch(E=>{throw a.error("could not execute setRemoteDescription",E),new Mr("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await If(y,g,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),w.close(),l?.(new H("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:y,muxerFactory:b}}catch(w){throw a.error("outgoing signaling error",w),y.close(),m.abort(w),w}finally{y.onicecandidate=null,y.onicecandidateerror=null}}finally{if(p)try{await h.close({signal:t})}catch(m){h.abort(m)}}}var Tf=class extends pe{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 ky({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let s=Ye(e).pb(ir);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),s.write({type:ir.Type.ICE_CANDIDATE,data:u},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})},o.trace("recipient read SDP offer");let a=await s.read({signal:t});if(a.type!==ir.Type.SDP_OFFER)throw new Mr(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new Ef({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new Mr("Failed to set remoteDescription")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new Mr("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await s.write({type:ir.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new Mr("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await If(r,s,{direction:"recipient",signal:t,log:o})}catch(a){if(_f(r)!=="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=X(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",i),{remoteAddress:i}}var Wk="/webrtc",zk="/p2p-circuit",kf="/webrtc-signaling/0.0.1",Gk=30*1e3,Cf=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,V(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";[Se]=["@libp2p/transport"];[Vr]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(kf,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(kf),this._started=!1}createListener(e){return new Tf(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(lg.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 Iy({rtcConfiguration:await Cc(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 vs(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??Gk),o=new Ss(await Cc(this.init.rtcConfiguration)),s=new Uo(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i}=await ky({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new vs(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 _y(r){let e=r.toString().split(Wk+"/");if(e.length!==2)throw new C("webrtc protocol was not present in multiaddr");if(!e[0].includes(zk))throw new C("p2p-circuit protocol was not present in multiaddr");let t=X(e[0]),o=X("/"+e[1]).getPeerId();if(o==null)throw new C("destination peer id was missing");let s=t.protos().pop();if(s===void 0)throw new C("invalid multiaddr");return s.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:Re(o)}}var B3=Object.values(Ln).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Ty(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:Qk(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 new Rc("","no fingerprint on local certificate");return n}var Yk=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Qk(r){return r.match(Yk)?.groups?.fingerprint}function Xk(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function Pf(r){let t=r.stringTuples().filter(n=>n[0]===Ry).map(n=>n[1])[0];if(t===void 0||t==="")throw new C(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function O3(r){return ze.decode(B3.decode(r))}function jk(r){let e=O3(Pf(r)),t=M3(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 new Rc(n,r.toString());return[`${t} ${o.join(":").toUpperCase()}`,n]}function M3(r){switch(r){case 17:return"SHA-1";case 18:return"SHA-256";case 19:return"SHA-512";default:throw new Af(r)}}function Zk(r,e){let{host:t,port:n}=r.toOptions(),o=Xk(r),[s]=jk(r);return`v=0
18
+ `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),n_=new RegExp(`(?:^${nn}$)|(?:^${id}$)`),o_=new RegExp(`^${nn}$`),s_=new RegExp(`^${id}$`),Wp=r=>r&&r.exact?n_:new RegExp(`(?:${Do(r)}${nn}${Do(r)})|(?:${Do(r)}${id}${Do(r)})`,"g");Wp.v4=r=>r&&r.exact?o_:new RegExp(`${Do(r)}${nn}${Do(r)}`,"g");Wp.v6=r=>r&&r.exact?s_:new RegExp(`${Do(r)}${id}${Do(r)}`,"g");var zp=Wp;function Gp(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function n7(){return!1}var{toString:i_}=Object.prototype;function Yp(r){return i_.call(r)==="[object RegExp]"}var o7={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function Qp(r,e={}){if(!Yp(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(o7).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?o7[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function Xp(r,e,{timeout:t}={}){try{return Gp(()=>Qp(r).test(e),{timeout:t})()}catch(n){if(n7(n))return!1;throw n}}var a_=15,c_=45,s7={timeout:400};function jp(r){return r.length>c_?!1:Xp(zp.v6({exact:!0}),r,s7)}function i7(r){return r.length>a_?!1:Xp(zp.v4({exact:!0}),r,s7)}var a7={http:"80",https:"443",ws:"80",wss:"443"},l_=["http","https","ws","wss"];function c7(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:s}=u_(r),a="/"+[d_(o,t),f_(s,n),h_(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return X(a)}function u_(r){let[e]=r.split(":");l_.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let s=p_(e);s!=null&&(o=s),s==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function d_(r,e){if(!(r==null||r==="")){if(i7(r))return["ip4",r];if(jp(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(jp(t))return["ip6",t]}return[e,r]}}function f_(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function h_(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function p_(r){if(!(r==null||r===""||a7[r]==null))return a7[r]}var m_=["https://trustless-gateway.link","https://4everland.io"],g_=2336;function y_(r){return r=r.toString(),{id:vn(Z.createV1(g_,Zt.digest(O(r)))),multiaddrs:[c7(r)]}}var Zp=class{gateways;constructor(e={}){this.gateways=(e.gateways??m_).map(t=>y_(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function Jp(r={}){return new Zp(r)}var e3=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 t3(r){return new e3(r)}var bc=class extends Jn{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 new Pr;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:Z.createV1(ca,Ce(lt.decode(e))),block:t}}};var Az=hr("blockstore:core:tiered");var d7="SHARDING";function b_(r){return r[Symbol.asyncIterator]!=null}function x_(r){if(b_(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 xc=x_;function E_(r){return r[Symbol.asyncIterator]!=null}function v_(r,e){return E_(r)?async function*(){yield*(await xc(r)).sort(e)}():function*(){yield*xc(r).sort(e)}()}var ad=v_;var to=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)=>ad(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=tn(n,()=>o++>=s)}return e.limit!=null&&(n=ao(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)=>ad(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=tn(n,()=>s++>=o)}return e.limit!=null&&(n=ao(n,e.limit)),n}};var ys=class extends to{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 new Pr;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 nG=new De(d7);var yG=hr("datastore:core:tiered");var cd=class extends A1{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 r3=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=J(),this.haveNext=J()}[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=J(),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=J(),await ke(this.readNext.promise,t?.signal,t)}};function h7(){return new r3}var ld=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var n3=class extends Error{code;constructor(e,t){super(e),this.code=t}},o3=class extends n3{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function ws(r,e){let t=h7();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 o3("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 ce:f}for(;o.byteLength<i;){let{value:u,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new ld("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 ud=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},dd=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},fd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function _n(r,e={}){let t=ws(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=he(e.maxDataLength));let n=e?.lengthDecoder??Ot,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(a<0)throw new ud("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new fd("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new dd("message length 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 s3(){let r=J(),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 p7(){let r=s3(),e=s3();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var _i=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function hd(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function i3(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function a3(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function ar(r,...e){if(!a3(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 c3(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 m7(r,e){ar(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var ro=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),g7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),S_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!S_)throw new Error("Non little-endian hardware is not supported");function A_(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function pd(r){if(typeof r=="string")r=A_(r);else if(a3(r))r=md(r);else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function y7(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function w7(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 l3=(r,e)=>(Object.assign(e,r),e);function u3(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 md(r){return Uint8Array.from(r)}function no(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var x7=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),I_=x7("expand 16-byte k"),__=x7("expand 32-byte k"),T_=ro(I_),E7=ro(__),iY=E7.slice();function Y(r,e){return r<<e|r>>>32-e}function d3(r){return r.byteOffset%4===0}var gd=64,k_=16,v7=2**32-1,b7=new Uint32Array;function C_(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(gd),d=ro(l),u=d3(o)&&d3(s),f=u?ro(o):b7,h=u?ro(s):b7;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=v7)throw new Error("arx: counter overflow");let m=Math.min(gd,c-p);if(u&&m===gd){let g=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,b;y<k_;y++)b=g+y,h[b]=f[b]^d[y];p+=gd;continue}for(let g=0,y;g<m;g++)y=p+g,s[y]=o[y]^l[g];p+=m}}function f3(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=y7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return hd(o),hd(i),i3(s),i3(t),(a,c,l,d,u=0)=>{ar(a),ar(c),ar(l);let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),ar(d),hd(u),u<0||u>=v7)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,m,g;if(p===32)h.push(m=md(a)),g=E7;else if(p===16&&t)m=new Uint8Array(32),m.set(a),m.set(a,16),g=T_,h.push(m);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);d3(c)||h.push(c=md(c));let y=ro(m);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(g,y,ro(c.subarray(0,16)),y),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 w=ro(c);return C_(r,g,y,w,l,d,u,i),no(...h),d}}var vt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,h3=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=pd(e),ar(e,32);let t=vt(e,0),n=vt(e,2),o=vt(e,4),s=vt(e,6),i=vt(e,8),a=vt(e,10),c=vt(e,12),l=vt(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]=vt(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],m=i[8],g=i[9],y=vt(e,t+0),b=vt(e,t+2),w=vt(e,t+4),x=vt(e,t+6),T=vt(e,t+8),k=vt(e,t+10),v=vt(e,t+12),S=vt(e,t+14),_=s[0]+(y&8191),$=s[1]+((y>>>13|b<<3)&8191),N=s[2]+((b>>>10|w<<6)&8191),M=s[3]+((w>>>7|x<<9)&8191),B=s[4]+((x>>>4|T<<12)&8191),D=s[5]+(T>>>1&8191),L=s[6]+((T>>>14|k<<2)&8191),I=s[7]+((k>>>11|v<<5)&8191),A=s[8]+((v>>>8|S<<8)&8191),R=s[9]+(S>>>5|o),P=0,q=P+_*a+$*(5*g)+N*(5*m)+M*(5*p)+B*(5*h);P=q>>>13,q&=8191,q+=D*(5*f)+L*(5*u)+I*(5*d)+A*(5*l)+R*(5*c),P+=q>>>13,q&=8191;let z=P+_*c+$*a+N*(5*g)+M*(5*m)+B*(5*p);P=z>>>13,z&=8191,z+=D*(5*h)+L*(5*f)+I*(5*u)+A*(5*d)+R*(5*l),P+=z>>>13,z&=8191;let j=P+_*l+$*c+N*a+M*(5*g)+B*(5*m);P=j>>>13,j&=8191,j+=D*(5*p)+L*(5*h)+I*(5*f)+A*(5*u)+R*(5*d),P+=j>>>13,j&=8191;let ae=P+_*d+$*l+N*c+M*a+B*(5*g);P=ae>>>13,ae&=8191,ae+=D*(5*m)+L*(5*p)+I*(5*h)+A*(5*f)+R*(5*u),P+=ae>>>13,ae&=8191;let le=P+_*u+$*d+N*l+M*c+B*a;P=le>>>13,le&=8191,le+=D*(5*g)+L*(5*m)+I*(5*p)+A*(5*h)+R*(5*f),P+=le>>>13,le&=8191;let fe=P+_*f+$*u+N*d+M*l+B*c;P=fe>>>13,fe&=8191,fe+=D*a+L*(5*g)+I*(5*m)+A*(5*p)+R*(5*h),P+=fe>>>13,fe&=8191;let xe=P+_*h+$*f+N*u+M*d+B*l;P=xe>>>13,xe&=8191,xe+=D*c+L*a+I*(5*g)+A*(5*m)+R*(5*p),P+=xe>>>13,xe&=8191;let Le=P+_*p+$*h+N*f+M*u+B*d;P=Le>>>13,Le&=8191,Le+=D*l+L*c+I*a+A*(5*g)+R*(5*m),P+=Le>>>13,Le&=8191;let Ne=P+_*m+$*p+N*h+M*f+B*u;P=Ne>>>13,Ne&=8191,Ne+=D*d+L*l+I*c+A*a+R*(5*g),P+=Ne>>>13,Ne&=8191;let $e=P+_*g+$*m+N*p+M*h+B*f;P=$e>>>13,$e&=8191,$e+=D*u+L*d+I*l+A*c+R*a,P+=$e>>>13,$e&=8191,P=(P<<2)+P|0,P=P+q|0,q=P&8191,P=P>>>13,z+=P,s[0]=q,s[1]=z,s[2]=j,s[3]=ae,s[4]=le,s[5]=fe,s[6]=xe,s[7]=Le,s[8]=Ne,s[9]=$e}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;no(n)}update(e){c3(this);let{buffer:t,blockLen:n}=this;e=pd(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(){no(this.h,this.r,this.buffer,this.pad)}digestInto(e){c3(this),m7(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 P_(r){let e=(n,o)=>r(o).update(pd(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var S7=P_(r=>new h3(r));function _7(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],m=e[5],g=e[6],y=e[7],b=o,w=t[0],x=t[1],T=t[2],k=i,v=a,S=c,_=l,$=d,N=u,M=f,B=h,D=p,L=m,I=g,A=y,R=b,P=w,q=x,z=T;for(let ae=0;ae<s;ae+=2)k=k+$|0,R=Y(R^k,16),D=D+R|0,$=Y($^D,12),k=k+$|0,R=Y(R^k,8),D=D+R|0,$=Y($^D,7),v=v+N|0,P=Y(P^v,16),L=L+P|0,N=Y(N^L,12),v=v+N|0,P=Y(P^v,8),L=L+P|0,N=Y(N^L,7),S=S+M|0,q=Y(q^S,16),I=I+q|0,M=Y(M^I,12),S=S+M|0,q=Y(q^S,8),I=I+q|0,M=Y(M^I,7),_=_+B|0,z=Y(z^_,16),A=A+z|0,B=Y(B^A,12),_=_+B|0,z=Y(z^_,8),A=A+z|0,B=Y(B^A,7),k=k+N|0,z=Y(z^k,16),I=I+z|0,N=Y(N^I,12),k=k+N|0,z=Y(z^k,8),I=I+z|0,N=Y(N^I,7),v=v+M|0,R=Y(R^v,16),A=A+R|0,M=Y(M^A,12),v=v+M|0,R=Y(R^v,8),A=A+R|0,M=Y(M^A,7),S=S+B|0,P=Y(P^S,16),D=D+P|0,B=Y(B^D,12),S=S+B|0,P=Y(P^S,8),D=D+P|0,B=Y(B^D,7),_=_+$|0,q=Y(q^_,16),L=L+q|0,$=Y($^L,12),_=_+$|0,q=Y(q^_,8),L=L+q|0,$=Y($^L,7);let j=0;n[j++]=i+k|0,n[j++]=a+v|0,n[j++]=c+S|0,n[j++]=l+_|0,n[j++]=d+$|0,n[j++]=u+N|0,n[j++]=f+M|0,n[j++]=h+B|0,n[j++]=p+D|0,n[j++]=m+L|0,n[j++]=g+I|0,n[j++]=y+A|0,n[j++]=b+R|0,n[j++]=w+P|0,n[j++]=x+q|0,n[j++]=T+z|0}function R_(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],m=e[7],g=t[0],y=t[1],b=t[2],w=t[3];for(let T=0;T<20;T+=2)o=o+c|0,g=Y(g^o,16),f=f+g|0,c=Y(c^f,12),o=o+c|0,g=Y(g^o,8),f=f+g|0,c=Y(c^f,7),s=s+l|0,y=Y(y^s,16),h=h+y|0,l=Y(l^h,12),s=s+l|0,y=Y(y^s,8),h=h+y|0,l=Y(l^h,7),i=i+d|0,b=Y(b^i,16),p=p+b|0,d=Y(d^p,12),i=i+d|0,b=Y(b^i,8),p=p+b|0,d=Y(d^p,7),a=a+u|0,w=Y(w^a,16),m=m+w|0,u=Y(u^m,12),a=a+u|0,w=Y(w^a,8),m=m+w|0,u=Y(u^m,7),o=o+l|0,w=Y(w^o,16),p=p+w|0,l=Y(l^p,12),o=o+l|0,w=Y(w^o,8),p=p+w|0,l=Y(l^p,7),s=s+d|0,g=Y(g^s,16),m=m+g|0,d=Y(d^m,12),s=s+d|0,g=Y(g^s,8),m=m+g|0,d=Y(d^m,7),i=i+u|0,y=Y(y^i,16),f=f+y|0,u=Y(u^f,12),i=i+u|0,y=Y(y^i,8),f=f+y|0,u=Y(u^f,7),a=a+c|0,b=Y(b^a,16),h=h+b|0,c=Y(c^h,12),a=a+c|0,b=Y(b^a,8),h=h+b|0,c=Y(c^h,7);let x=0;n[x++]=o,n[x++]=s,n[x++]=i,n[x++]=a,n[x++]=g,n[x++]=y,n[x++]=b,n[x++]=w}var D_=f3(_7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),L_=f3(_7,{counterRight:!1,counterLength:8,extendNonceFn:R_,allowShortKeys:!1});var N_=new Uint8Array(16),A7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(N_.subarray(t))},B_=new Uint8Array(32);function I7(r,e,t,n,o){let s=r(e,t,B_),i=S7.create(s);o&&A7(i,o),A7(i,n);let a=new Uint8Array(16),c=g7(a);u3(c,0,BigInt(o?o.length:0),!0),u3(c,8,BigInt(n.length),!0),i.update(a);let l=i.digest();return no(s,a),l}var T7=r=>(e,t,n)=>(ar(e,32),ar(t),{encrypt(s,i){let a=s.length,c=a+16;i?ar(i,c):i=new Uint8Array(c),r(e,t,s,i,1);let l=I7(r,e,t,i.subarray(0,-16),n);return i.set(l,a),no(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?ar(i,c):i=new Uint8Array(c);let l=s.subarray(0,-16),d=s.subarray(-16),u=I7(r,e,t,l,n);if(!w7(d,u))throw new Error("invalid tag");return r(e,t,l,i,1),no(u),i}}),p3=l3({blockSize:64,nonceLength:12,tagLength:16},T7(D_)),mY=l3({blockSize:64,nonceLength:24,tagLength:16},T7(L_));function C7(r,e,t){return jo(r),t===void 0&&(t=new Uint8Array(r.outputLen)),So(r,qr(t),qr(e))}var m3=new Uint8Array([0]),k7=new Uint8Array;function P7(r,e,t,n=32){if(jo(r),uo(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=k7);let s=new Uint8Array(o*r.outputLen),i=So.create(r,e),a=i._cloneInto(),c=new Uint8Array(i.outputLen);for(let l=0;l<o;l++)m3[0]=l+1,a.update(l===0?k7:c).update(t).update(m3).digestInto(c),s.set(c,r.outputLen*l),i._cloneInto(a);return i.destroy(),a.destroy(),c.fill(0),m3.fill(0),s.slice(0,n)}var g3={hashSHA256(r){return Sr(r.subarray())},getHKDF(r,e){let t=C7(Sr,e,r),o=P7(Sr,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=Ea.utils.randomPrivateKey();return{publicKey:Ea.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ea.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ea.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return p3(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return p3(n,e,t).decrypt(r.subarray(),o)}};var R7=g3;function D7(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 Ti=r=>{let e=We(2);return e[0]=r>>8,e[1]=r,e};Ti.bytes=2;var Ec=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)};Ec.bytes=2;function L7(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 y3(r,e){!e.enabled||!_i||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${F(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${F(r.privateKey,"hex")}`)):e("Missing local static keys."))}function w3(r,e){!e.enabled||!_i||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${F(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${F(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function N7(r,e){!e.enabled||!_i||e(r?`REMOTE_STATIC_PUBLIC_KEY ${F(r.subarray(),"hex")}`:"Missing remote static public key.")}function b3(r,e){!e.enabled||!_i||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${F(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function x3(r,e,t){!t.enabled||!_i||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&F(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&F(e.k,"hex")}`))}function on(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=We(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var ki=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var O_=0,M_=4294967295,U_="Cipherstate has reached maximum n, a new handshake must be performed",yd=class{n;bytes;view;constructor(e=O_){this.n=e,this.bytes=ie(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>M_)throw new Error(U_)}};var bs=ie(0),Ci=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new yd(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}},E3=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=O(t,"utf-8");this.h=F_(e,n),this.ck=this.h,this.cs=new Ci(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Ci(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 Ci(this.crypto,e),new Ci(this.crypto,t)]}},v3=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 E3(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()}},vc=class extends v3{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 ki(`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 ki(`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 ki(`handshake stage 2 validation fail: ${t.message}`)}}};function F_(r,e){if(e.length<=32){let t=ie(32);return t.set(e),t}else return r.hash(e)}var wd;(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())})(wd||(wd={}));var Sc;(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),wd.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:ie(0),identitySig:ie(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=wd.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())})(Sc||(Sc={}));async function S3(r,e,t){let n=await r.sign(B7(e));return Sc.encode({identityKey:Rt(r.publicKey),identitySig:n,extensions:t})}async function A3(r,e,t){try{let n=Sc.decode(r),o=rt(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let s=B7(e);if(!await o.verify(s,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new el(n.message)}}function B7(r){let e=O("noise-libp2p-static-key:");return r instanceof Uint8Array?Pe([e,r],e.length+r.length):(r.prepend(e),r)}async function O7(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await S3(s,a.publicKey,l),u=new vc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});y3(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(bs),e),t.trace("Stage 0 - Initiator finished sending first message."),w3(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."),b3(u.re,t),N7(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await A3(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,m]=u.ss.split();return x3(p,m,t),{payload:h,encrypt:g=>p.encryptWithAd(bs,g),decrypt:(g,y)=>m.decryptWithAd(bs,g,y)}}async function M7(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await S3(s,a.publicKey,l),u=new vc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});y3(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."),b3(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."),w3(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 A3(f,u.rs,c),[p,m]=u.ss.split();return x3(p,m,t),{payload:h,encrypt:g=>m.encryptWithAd(bs,g),decrypt:(g,y)=>p.decryptWithAd(bs,g,y)}}var F7=16;function $7(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(Ti(i.byteLength),i)}}}function V7(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-F7<o)throw new Error("Invalid chunk");let i=n.sublist(o,s),a=n.subarray(o,s-F7);try{let c=r.decrypt(i,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var bd=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??R7;this.crypto=D7(c),this.extensions=o,this.metrics=a?L7(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??ie(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Se]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=_n(e,{lengthEncoder:Ti,lengthDecoder:Ec,maxDataLength:65535}),o=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),s=await this.createSecureConnection(n,o);e.source=s.source,e.sink=s.sink;let i=rt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:En(i)}}async secureInbound(e,t){let n=_n(e,{lengthEncoder:Ti,lengthDecoder:Ec,maxDataLength:65535}),o=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),s=await this.createSecureConnection(n,o);e.source=s.source,e.sink=s.sink;let i=rt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:En(i)}}async performHandshakeInitiator(e,t,n,o){let s;try{s=await O7({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 M7({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]=p7(),s=e.unwrap();return await Je(n,$7(t,this.metrics),s,i=>Qt(i,{lengthDecoder:Ec}),V7(t,this.metrics),n),o}};function Pi(r={}){return e=>new bd(e,r)}function xd(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 sn=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},Ri=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Di=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},Ed=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},vd=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},Sd=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},Ad=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Li=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var K7=new Set([sn.name,Ri.name,Di.name,vd.name,Sd.name,Ad.name,Li.name]),Ic=256*1024,H7=16*1024*1024;var q7={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Ic,maxStreamWindowSize:H7,maxMessageSize:64*1024};function W7(r){if(r.keepAliveInterval<=0)throw new C("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new C("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new C("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Ic)throw new C("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new C("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new C("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new C("MaxMessageSize must be greater than a kilobyte")}var Ze;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Ze||(Ze={}));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 GQ=Object.values(qe).filter(r=>typeof r!="string"),z7=0,Rr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Rr||(Rr={}));var Lo=12;var G7=2**24;function $_(r){if(r[0]!==z7)throw new sn("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*G7+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*G7+(r[9]<<16)+(r[10]<<8)+r[11]}}var Id=class{source;buffer;frameInProgress;constructor(e){this.source=V_(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===Ze.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new Ed("decoding frame already in progress");if(this.buffer.length<Lo)return;let e=$_(this.buffer.subarray(0,Lo));return this.buffer.consume(Lo),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 V_(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 I3(r){let e=new Uint8Array(Lo);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 Y7(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function _d(r,e){let t=xd(r).return?.();Y7(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var K_=5e3;function _3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Tn=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=J(),this.closed=J(),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??K_,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=kt({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 Wo(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);_3(o)&&await o}let n=()=>{_d(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);_3(s)&&(this.sendingData=J(),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();_3(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 nl("stream reset");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 Dr;(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"})(Dr||(Dr={}));var Td=class extends Tn{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Dr.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Ic,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=hs(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-Lo,e.length),o=this.getSendFlags();this.sendFrame({type:Ze.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Ze.WindowUpdate,flag:qe.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|qe.FIN;this.sendFrame({type:Ze.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 pt("Stream aborted")):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 Li("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&qe.ACK)===qe.ACK&&this.state===Dr.SYNSent&&(this.state=Dr.Established),(e&qe.FIN)===qe.FIN&&this.remoteCloseWrite(),(e&qe.RST)===qe.RST&&this.reset()}getSendFlags(){switch(this.state){case Dr.Init:return this.state=Dr.SYNSent,qe.SYN;case Dr.SYNReceived:return this.state=Dr.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:Ze.WindowUpdate,flag:e,streamID:this._id,length:o})}};var Q7="/yamux/1.0.0",H_=500,kd=class{protocol=Q7;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Se]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new T3(this._components,{...this._init,...e})}},T3=class{protocol=Q7;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={...q7,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),W7(this.config),this.closeController=new AbortController,V(1/0,this.closeController.signal),this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=kt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=xd(n);if(a.return!=null){let c=a.return();q_(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},s,i;try{let a=new Id(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=Rr.NormalTermination}catch(a){K7.has(a.name)?(this.log?.error("protocol error in sink",a),s=Rr.ProtocolError):(this.log?.error("internal error in sink",a),s=Rr.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 hn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new hn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new io("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Dr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new hn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new hn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,s)=>{let i=()=>{s(new hn("Muxer closed locally"))};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??Rr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(H_);V(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??Rr.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 C("Stream already exists with that id");let s=new Td({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 Ze.Ping:{this.handlePing(e);return}case Ze.GoAway:{this.handleGoAway(s);return}default:throw new sn("Invalid frame type")}else switch(e.type){case Ze.Data:case Ze.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new sn("Invalid frame type")}}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 sn("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Ri("ping not requested");if(this.activePing.id!==e)throw new Di("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Rr[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===Ze.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(s){case Ze.WindowUpdate:{i.handleWindowUpdate(e);return}case Ze.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 C("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Ze.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:Ze.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Dr.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===Ze.Data){if(t===void 0)throw new sn("Invalid frame");this.source.push(new ce(I3(e),t))}else this.source.push(I3(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:Ze.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Rr.NormalTermination){this.log?.("sending GoAway reason=%s",Rr[e]),this.localGoAway=e,this.sendFrame({type:Ze.GoAway,flag:0,streamID:0,length:e})}};function q_(r){return r!=null&&typeof r.then=="function"}function X7(r={}){return e=>new kd(e,r)}var Cd=globalThis.CustomEvent??Event;async function*an(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=J(),a=J(),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=J(),await i.promise),d)break;let m={done:!1};s.push(m),p().then(g=>{m.done=!0,m.ok=!0,m.value=g,o.dispatchEvent(new Cd("task-complete"))},g=>{m.done=!0,m.err=g,o.dispatchEvent(new Cd("task-complete"))})}c=!0,o.dispatchEvent(new Cd("task-complete"))}catch(p){l=p,o.dispatchEvent(new Cd("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 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=J(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&s.length===0)break}}var j7="libp2p",Z7="autonat",J7="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,h={})=>{let p={addrs:[]},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.id=u.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Oe('Decode error - map field "addrs" had too many elements');p.addrs.push(u.bytes());break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>ne(u,l.codec()),l.decode=(u,f)=>re(u,l.codec(),f)})(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,h={})=>{let p={},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(u,u.uint32(),{limits:h.limits?.peer});break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>ne(u,l.codec()),l.decode=(u,f)=>re(u,l.codec(),f)})(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,h={})=>{let p={},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(u);break}case 2:{p.statusText=u.string();break}case 3:{p.addr=u.bytes();break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>ne(u,l.codec()),l.decode=(u,f)=>re(u,l.codec(),f)})(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,u={})=>{let f={},h=d==null?l.len:l.pos+d;for(;l.pos<h;){let p=l.uint32();switch(p>>>3){case 1:{f.type=r.MessageType.codec().decode(l);break}case 2:{f.dial=r.Dial.codec().decode(l,l.uint32(),{limits:u.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:u.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>ne(l,r.codec()),r.decode=(l,d)=>re(l,r.codec(),d)})(we||(we={}));var k3=4,Pd=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??j7}/${Z7}/${J7}`,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 pt)};t.addEventListener("abort",n,{once:!0}),V(1/0,t);try{let o=this;await Je(e.stream,s=>Qt(s),async function*(s){let i=await wc(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=>Yt(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{let u=Ce(a.id);i=gt(u)}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=>X(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=!(Nt(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(ee("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!(Nt(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);V(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.toMultihash().bytes,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 pt)},n.addEventListener("abort",d,{once:!0});let h=await Je([s],m=>Yt(m),f,m=>Qt(m),async m=>wc(m));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 m=u.remoteAddr.toOptions(),g;if(m.family===4)g=m.host.split(".")[0];else if(m.family===6)g=m.host.split(":")[0];else{this.log('remote address "%s" was not IP4 or IP6?',m.host);return}if(a.includes(g)){this.log("already have response from network segment %d - %s",g,m.host);return}a.push(g)}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 an(Xt(this.components.randomWalk.walk({signal:n}),d=>async()=>c(d)),{concurrency:k3}))try{if(l==null)continue;let d=l.addr==null?t[0]:X(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===k3){this.log("%a is externally dialable",d),e.confirmObservedAddr(d);return}if(i[u].failure===k3){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 e9(r={}){return e=>new Pd(e,r)}var X_=W("dns4"),j_=W("dns6"),Z_=W("dnsaddr"),Bo=ot(W("dns"),Z_,X_,j_),Rd=ot(W("ip4"),W("ip6")),Ni=ot(se(Rd,W("tcp")),se(Bo,W("tcp"))),Dd=se(Rd,W("udp")),J_=se(Dd,W("utp")),eT=se(Dd,W("quic")),tT=se(Dd,W("quic-v1")),C3=ot(se(Ni,W("ws")),se(Bo,W("ws"))),Bi=ot(se(C3,W("p2p")),C3),P3=ot(se(Ni,W("wss")),se(Bo,W("wss")),se(Ni,W("tls"),W("ws")),se(Bo,W("tls"),W("ws"))),xs=ot(se(P3,W("p2p")),P3),R3=ot(se(Ni,W("http")),se(Rd,W("http")),se(Bo,W("http"))),D3=ot(se(Ni,W("https")),se(Rd,W("https")),se(Bo,W("https"))),t9=se(Dd,W("webrtc-direct"),W("certhash")),o9=ot(se(t9,W("p2p")),t9),r9=se(tT,W("webtransport"),W("certhash"),W("certhash")),s9=ot(se(r9,W("p2p")),r9),i9=ot(se(Bi,W("p2p-webrtc-star"),W("p2p")),se(xs,W("p2p-webrtc-star"),W("p2p")),se(Bi,W("p2p-webrtc-star")),se(xs,W("p2p-webrtc-star"))),ej=ot(se(Bi,W("p2p-websocket-star"),W("p2p")),se(xs,W("p2p-websocket-star"),W("p2p")),se(Bi,W("p2p-websocket-star")),se(xs,W("p2p-websocket-star"))),a9=ot(se(R3,W("p2p-webrtc-direct"),W("p2p")),se(D3,W("p2p-webrtc-direct"),W("p2p")),se(R3,W("p2p-webrtc-direct")),se(D3,W("p2p-webrtc-direct"))),Es=ot(C3,P3,R3,D3,i9,a9,Ni,J_,eT,Bo,o9,s9),tj=ot(se(Es,W("p2p-stardust"),W("p2p")),se(Es,W("p2p-stardust"))),No=ot(se(Es,W("p2p")),i9,a9,o9,s9,W("p2p")),n9=ot(se(No,W("p2p-circuit"),No),se(No,W("p2p-circuit")),se(W("p2p-circuit"),No),se(Es,W("p2p-circuit")),se(W("p2p-circuit"),Es),W("p2p-circuit")),c9=()=>ot(se(n9,c9),n9),cn=c9(),l9=ot(se(cn,No,cn),se(No,cn),se(cn,No),cn,No);var rj=ot(se(cn,W("webrtc"),W("p2p")),se(cn,W("webrtc")),se(Es,W("webrtc"),W("p2p")),se(Es,W("webrtc")),W("webrtc"));function u9(r){function e(t){let n;try{n=X(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:u9(e),partialMatch:e}}function ot(...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:u9(e),partialMatch:e}}function W(r){let e=r;function t(o){let s;try{s=X(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 rT="bootstrap",nT=50,oT=1e3,L3=class extends pe{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??oT,this.list=[];for(let n of t.list){if(!l9.matches(n)){this.log.error("Invalid multiaddr");continue}let o=X(n),s=o.getPeerId();if(s==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let i={id:Re(s),multiaddrs:[o]};this.list.push(i)}this._init=t}[qo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Se]=["@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??rT]:{value:this._init.tagValue??nT,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function f9(r){return e=>new L3(e,r)}var _c;(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,o={})=>{let s={publicKey:ie(0),payloadType:ie(0),payload:ie(0),signature:ie(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.publicKey=t.bytes();break}case 2:{s.payloadType=t.bytes();break}case 3:{s.payload=t.bytes();break}case 5:{s.signature=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)})(_c||(_c={}));var Ld=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var br=class r{static createFromProtobuf=async e=>{let t=_c.decode(e),n=rt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,s=e.marshal(),i=h9(n,o,s),a=await t.sign(i.subarray());return new r({publicKey:t.publicKey,payloadType:o,payload:s,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new Ld("Envelope signature is not valid for the given domain");return n};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:s}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){return this.marshaled==null&&(this.marshaled=_c.encode({publicKey:Rt(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return te(this.marshal(),e.marshal())}async validate(e){let t=h9(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},h9=(r,e,t)=>{let n=O(r),o=Ve(n.byteLength),s=Ve(e.length),i=Ve(t.length);return new ce(o,n,s,e,i,t)};function p9(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 m9="libp2p-peer-record",g9=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,a={})=>{let c={multiaddr:ie(0)},l=i==null?s.len:s.pos+i;for(;s.pos<l;){let d=s.uint32();switch(d>>>3){case 1:{c.multiaddr=s.bytes();break}default:{s.skipType(d&7);break}}}return c})),o),n.encode=s=>ne(s,n.codec()),n.decode=(s,i)=>re(s,n.codec(),i)})(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,s={})=>{let i={peerId:ie(0),seq:0n,addresses:[]},a=o==null?n.len:n.pos+o;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{i.peerId=n.bytes();break}case 2:{i.seq=n.uint64();break}case 3:{if(s.limits?.addresses!=null&&i.addresses.length===s.limits.addresses)throw new Oe('Decode error - map field "addresses" had too many elements');i.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:s.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return i})),t),r.encode=n=>ne(n,r.codec()),r.decode=(n,o)=>re(n,r.codec(),o)})(Tc||(Tc={}));var Vt=class r{static createFromProtobuf=e=>{let t=Tc.decode(e),n=gt(Ce(t.peerId)),o=(t.addresses??[]).map(i=>X(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=m9;static CODEC=g9;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.toMultihash().bytes,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||!p9(this.multiaddrs,e.multiaddrs))}};function Qe(r,e){let t=_n(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 y9="circuit-relay-relay";var Bj=BigInt(131072),vs="/libp2p/circuit/relay/0.2.0/hop",N3="/libp2p/circuit/relay/0.2.0/stop",Oj=30*1e3,Mj=30*1e3,B3=300,w9=4096,b9=.001;var Oo;(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),Oi.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),Nd.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Mi.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),St.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=Oi.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=Nd.codec().decode(o,o.uint32(),{limits:i.limits?.reservation});break}case 4:{a.limit=Mi.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 5:{a.status=St.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)})(Oo||(Oo={}));var kn;(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),Oi.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Mi.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),St.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=Oi.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.limit=Mi.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 4:{a.status=St.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)})(kn||(kn={}));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.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:ie(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 Oe('Decode error - map field "addrs" had too many elements');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)})(Oi||(Oi={}));var Nd;(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 Oe('Decode error - map field "addrs" had too many elements');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)})(Nd||(Nd={}));var Mi;(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)})(Mi||(Mi={}));var St;(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"})(St||(St={}));var O3;(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"})(O3||(O3={}));(function(r){r.codec=()=>Ke(O3)})(St||(St={}));var x9;(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:ie(0),peer:ie(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)})(x9||(x9={}));function M3(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var kc=class{expires;bytes;constructor(e){e?.duration!=null&&e?.duration!==0&&(this.expires=Date.now()+e.duration*1e3),this.bytes=e?.data,this.bytes===0n&&(this.bytes=void 0),this.onData=this.onData.bind(this)}onData(e){this.bytes!=null&&(this.bytes-=BigInt(e.byteLength),this.bytes<0n&&(this.bytes=0n))}getLimits(){if(this.expires==null&&this.bytes==null)return;let e={};if(this.bytes!=null){let t=this;Object.defineProperty(e,"bytes",{get(){return t.bytes}})}if(this.expires!=null){let t=this;Object.defineProperty(e,"seconds",{get(){return Math.round(((t.expires??0)-Date.now())/1e3)}})}return e}};function U3(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:o,onDataWrite:s}=r,i=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async p=>{await l(p),h(!0)};let d=e.abort.bind(e);e.abort=p=>{d(p),h(!0)};let u=e.sink.bind(e);e.sink=async p=>{try{await u(Je(p,m=>hs(m,g=>s?.(g))))}catch(m){m.type!=="aborted"&&i.error("%s error in sink",t,m)}finally{c=!0,h()}};let f={log:i,sink:e.sink,source:async function*(){try{for await(let p of e.source)o?.(p),yield p}finally{a=!0,h()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function h(p){p===!0&&(a=!0,c=!0),a&&c&&f.timeline.close==null&&(f.timeline.close=Date.now())}return f}var Bd=class extends pe{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,V(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,V(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 zt({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=me([this.discoveryController.signal,AbortSignal.timeout(5e3)]);V(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 F3=class extends pe{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 yt,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 il("Did not have reservation after making 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=>X(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 E9(r){return new F3(r)}var cT=60*1e3*10,lT=60*1e3*5,uT=30*1e3,Od=class extends pe{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 yt,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e3,this.started=!1,this.relayFilter=u2(100),this.reserveQueue=new zt({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.toMultihash().bytes)){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(M3(o.reservation.expire)>cT){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);V(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=M3(a.expire),l=Math.min(Math.max(c-lT,uT),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:{[y9]:{value:1,ttl:c}}}),await this.transportManager.listen([X(`/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.toMultihash().bytes)}},{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=Qe(n).pb(Oo);await s.write({type:Oo.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===St.OK&&i.reservation!=null){let c=!1,l=e.remoteAddr.bytes;for(let d of i.reservation.addrs)if(te(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 fT=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(X)}catch{return!1}return!0},$3={maxInboundStopStreams:B3,maxOutboundStopStreams:B3,stopTimeout:3e4},Md=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??$3.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??$3.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??$3.stopTimeout;let n=t.discoverRelays??0;n>0&&(this.discovery=new Bd(e,{filter:t.discoveryFilter??p2(w9,b9)}),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 Od(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";[Se]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[$r](){return this.discovery!=null?["@libp2p/identify"]:[]}[fn]=!0;isStarted(){return this.started}async start(){await this.registrar.handle(N3,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,runOnLimitedConnection:!0}),await qt(this.discovery,this.reservationStore),this.started=!0}async stop(){await Wt(this.discovery,this.reservationStore),await this.registrar.unhandle(N3),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 Dn(p)}let n=e.toString().split("/p2p-circuit"),o=X(n[0]),s=X(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 Dn(p)}let c=Re(i),l=Re(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(vs),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=Qe(e),d=l.pb(Oo);c?.(new H("circuit-relay:write-connect-message")),await d.write({type:Oo.Type.CONNECT,peer:{id:n.toMultihash().bytes,addrs:[X(o).bytes]}}),c?.(new H("circuit-relay:read-connect-response"));let u=await d.read();if(u.status!==St.OK)throw new ue(`failed to connect via relay with status ${u?.status?.toString()??"undefined"}`);let f=new kc(u.limit),h=U3({stream:l.unwrap(),remoteAddr:i,localAddr:s.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:f.onData,onDataWrite:f.onData});return this.log("new outbound relayed connection %a",h.remoteAddr),await this.upgrader.upgradeOutbound(h,{limits:f.getLimits(),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 E9({connectionManager:this.connectionManager,relayStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>cn.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(u){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",u)}let n=AbortSignal.timeout(this.stopTimeout),o=Qe(t).pb(kn),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:kn.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(s.type!==kn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:kn.Type.STATUS,status:St.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!fT(s)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:kn.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let i=gt(Ce(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:kn.Type.STATUS,status:St.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:kn.Type.STATUS,status:St.OK},{signal:n});let a=new kc(s.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),l=this.addressManager.getAddresses()[0],d=U3({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",d.remoteAddr),await this.upgrader.upgradeInbound(d,{limits:a.getLimits()}),this.log("%s connection %a upgraded","inbound",d.remoteAddr)}};function V3(r={}){return e=>new Md(e,r)}var v9=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},hT=new WeakMap;function pT({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(v9());let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(v9())},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}),hT.set(u,()=>{c(s),s=null,i()}),u}}var mT=pT(),Ud=mT;var ln;(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,i={})=>{let a={observedAddresses:[]},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:{if(i.limits?.observedAddresses!=null&&a.observedAddresses.length===i.limits.observedAddresses)throw new Oe('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(o.bytes());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)})(ln||(ln={}));function K3(r,e){return An.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:$1.matches(r)?!0:Og.matches(r)?Nt(r.toOptions().host)===!1:!1}var S9=1024*4,A9=100,Fd={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},$d=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??Fd.timeout,this.retries=t.retries??Fd.retries,this.maxInboundStreams=t.maxInboundStreams??Fd.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Fd.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[$r]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Cc,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{An.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Cc,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,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Cc),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([Cc],{signal:o.signal,runOnLimitedConnection:!0});let s=Qe(t,{maxDataLength:S9}).pb(ln);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:ln.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!==ln.Type.CONNECT)throw this.log("A sent wrong message type"),new ue("DCUtR message type was incorrect");let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new ue("DCUtR connect message had no multiaddrs");let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:ln.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await Ud(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:A9});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=>K3(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(An.exactMatch(s.remoteAddr))throw new Error("Could not open a new, non-limited, 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=Qe(e,{maxDataLength:S9}).pb(ln);this.log("A receiving connect");let s=await o.read(n);if(s.type!==ln.Type.CONNECT)throw this.log("B sent wrong message type"),new ue("DCUtR message type was incorrect");if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new ue("DCUtR connect message had no multiaddrs");let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs"),new ue("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:ln.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==ln.Type.SYNC)throw new ue("DCUtR message type was incorrect");this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:A9,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=X(n);if(!K3(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Cc="/libp2p/dcutr";function I9(r={}){return e=>new $d(e,r)}var _9="0.1.0",T9="id",k9="id/push",C9="1.0.0",P9="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,o={})=>{let s={listenAddrs:[],protocols:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 5:{s.protocolVersion=t.string();break}case 6:{s.agentVersion=t.string();break}case 1:{s.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&s.listenAddrs.length===o.limits.listenAddrs)throw new Oe('Decode error - map field "listenAddrs" had too many elements');s.listenAddrs.push(t.bytes());break}case 4:{s.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&s.protocols.length===o.limits.protocols)throw new Oe('Decode error - map field "protocols" had too many elements');s.protocols.push(t.string());break}case 8:{s.signedPeerRecord=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)})(Mo||(Mo={}));var L9=Tt(D9(),1),H3=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,Vd=(0,L9.default)(),Kd=H3&&!Vd,N9=Vd&&!H3,B9=Vd&&H3,O9=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!Vd,Hd=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,rJ=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",M9=typeof navigator<"u"&&navigator.product==="ReactNative";var cr={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function U9(r){if(r!=null&&r.length>0)try{return X(r)}catch{}}function bT(r,e){return e!=null||(e=`${r.name}/${r.version}`,O9||N9?e+=` UserAgent=${globalThis.process.version}`:(Kd||Hd||B9||M9)&&(e+=` UserAgent=${globalThis.navigator.userAgent}`)),e}async function qd(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new ue("message was null or undefined");let s={};if(o.listenAddrs.length>0&&(s.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:X(c)}))),o.protocols.length>0&&(s.protocols=o.protocols),o.publicKey!=null){let c=rt(o.publicKey);if(!En(c).equals(n.remotePeer))throw new ue("public key did not match remote PeerId");s.publicKey=c}let i;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await br.openAndCertify(c,Vt.DOMAIN),d=Vt.createFromProtobuf(l.payload),u=vn(l.publicKey.toCID());if(!d.peerId.equals(u))throw new ue("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(d.peerId))throw new ue("signing key does not match remote PeerId");let f;try{f=await r.get(d.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(s.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=await br.createFromProtobuf(f.peerRecordEnvelope),p=Vt.createFromProtobuf(h.payload);p.seqNumber>=d.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,d.seqNumber),d=p,c=f.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.trace("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=O(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=O(o.protocolVersion)),t.trace("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=>X(c)),observedAddr:o.observedAddr==null?void 0:X(o.observedAddr),protocols:o.protocols,signedPeerRecord:i,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var Ui=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??cr.timeout,this.maxInboundStreams=t.maxInboundStreams??cr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??cr.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??cr.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??cr.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??cr.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??cr.protocolPrefix}/${_9}`,agentVersion:bT(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:O(this.host.agentVersion),ProtocolVersion:O(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,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var Wd=class extends Ui{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??cr.protocolPrefix}/${k9}/${P9}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??cr.concurrency,(t.runOnSelfUpdate??cr.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Se]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(d=>d.decapsulateCode(ee("p2p").code)),t=new Vt({peerId:this.peerId,multiaddrs:e}),n=await br.seal(t,this.privateKey),o=this.registrar.getProtocols(),s=await this.peerStore.get(this.peerId),i=F(s.metadata.get("AgentVersion")??O(this.host.agentVersion)),a=F(s.metadata.get("ProtocolVersion")??O(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);V(1/0,h);try{f=await d.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await Qe(f,{maxDataLength:c.maxMessageSize}).pb(Mo).write({listenAddrs:e.map(m=>m.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(an(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 Qe(n,{maxDataLength:this.maxMessageSize}).pb(Mo).read(o);await n.close(o),await qd(this.peerStore,this.events,this.log,t,i)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log.trace("handled push from %p",t.remotePeer)}};var zd=class extends Ui{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??cr.protocolPrefix}/${T9}/${C9}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??cr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(s=>{s.name!==Rn.name&&this.log.error("error during identify trigged by connection:open",s)})})}[Se]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);V(1/0,o),t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let s=await Qe(n,{maxDataLength:this.maxMessageSize}).pb(Mo).read(t);return await n.close(t),s}catch(o){throw 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 ue("public key was missing from identify message");let a=rt(o),c=vn(a.toCID());if(!e.remotePeer.equals(c))throw new ue("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new ue("identified peer is our own peer id?");let l=U9(i);return this.log("identify completed for peer %p and protocols %o",c,s),l!=null&&(this.log("our observed address was %a",l),Nt(l?.nodeAddress().address)===!0?this.log("our observed address was private"):this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(this.log("storing our observed address"),this.addressManager.addObservedAddr(l))),qd(this.peerStore,this.events,this.log,e,n)}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);V(1/0,o);try{let s=await this.peerStore.get(this.peerId),i=this.addressManager.getAddresses().map(d=>d.decapsulateCode(ee("p2p").code)),a=s.peerRecordEnvelope;if(i.length>0&&a==null){let d=new Vt({peerId:this.peerId,multiaddrs:i});a=(await br.seal(d,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;Bg.matches(t.remoteAddr)||(c=void 0),await Qe(n).pb(Mo).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Rt(this.privateKey.publicKey),listenAddrs:i.map(d=>d.bytes),signedPeerRecord:a,observedAddr:c,protocols:s.protocols},{signal:o}),await n.close({signal:o})}catch(s){this.log.error("could not respond to identify request",s),n.abort(s)}}};function F9(r={}){return e=>new zd(e,r)}function $9(r={}){return e=>new Wd(e,r)}var V9="/ipfs/kad/1.0.0",K9="/dht/record",q3="/dht/provider";var Pc;(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:ie(0),value:ie(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)})(Pc||(Pc={}));function H9(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 q9(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 At=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 Pc.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:H9(this.timeReceived)}}static deserialize(e){let t=Pc.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=q9(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 Uo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Gd=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},Yd=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},Qd=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var W9;(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,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.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 3:{s.author=t.bytes();break}case 4:{s.signature=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)})(W9||(W9={}));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 Xd;(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"})(Xd||(Xd={}));(function(r){r.codec=()=>Ke(Xd)})(be||(be={}));var $i;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})($i||($i={}));var W3;(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"})(W3||(W3={}));(function(r){r.codec=()=>Ke(W3)})($i||($i={}));var Fi;(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),$i.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:ie(0),multiaddrs:[]},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?.multiaddrs!=null&&s.multiaddrs.length===o.limits.multiaddrs)throw new Oe('Decode error - map field "multiaddrs" had too many elements');s.multiaddrs.push(t.bytes());break}case 3:{s.connection=$i.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)})(Fi||(Fi={}));var Lr;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&Xd[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),Fi.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Fi.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={type:be.PUT_VALUE,closer:[],providers:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.type=be.codec().decode(t);break}case 10:{s.clusterLevel=t.int32();break}case 2:{s.key=t.bytes();break}case 3:{s.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&s.closer.length===o.limits.closer)throw new Oe('Decode error - map field "closer" had too many elements');s.closer.push(Fi.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&s.providers.length===o.limits.providers)throw new Oe('Decode error - map field "providers" had too many elements');s.providers.push(Fi.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));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)})(Lr||(Lr={}));function z3(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new CustomEvent("kad-dht:query:send-query",{detail:t})),t}function Rc(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new CustomEvent("kad-dht:query:peer-response",{detail:t})),t}function jd(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function xr(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function G3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function Dc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function Y3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function z9(r,e,t){if(t.length===0)throw new C("No records given");let o=F(e).split("/");if(o.length<3)throw new C("Record key does not have a selector function");let s=r[o[1].toString()];if(s==null)throw new Qd(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:s(e,t)}function ET(r,e){return 0}var G9={pk:ET};async function Vi(r,e){let t=e.key,o=F(t).split("/");if(o.length<3)return;let s=r[o[1].toString()];if(s==null)throw new C(`No validator available for key type "${o[1]}"`);await s(t,e.value)}var vT=async(r,e)=>{if(!(r instanceof Uint8Array))throw new C('"key" must be a Uint8Array');if(r.byteLength<5)throw new C("Invalid public key record");if(F(r.subarray(0,4))!=="/pk/")throw new C("key was not prefixed with /pk/");let n=rt(e),o=r.slice(4);if(!te(o,n.toMultihash().bytes))throw new C("public key does not match passed in key")},Y9={pk:vT};var ST=O("/pk/");function Q9(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=Nt(n);return o==null?!0:!o})}}async function Fo(r){return(await ut.digest(r)).digest}async function Nr(r){return Fo(r.toMultihash().bytes)}function $o(r){return new De(`${K9}/${F(r,"base32")}`,!1)}function X9(r){return Pe([ST,r.toMultihash().bytes])}function j9(r){return F(r.subarray(0,4))==="/pk/"}function Z9(r){let e=Ce(r.subarray(4));return gt(e)}function Q3(r,e){let t=new Date;return new At(r,e,t).serialize()}function J9(r,e=100){let t;return()=>{clearTimeout(t),t=setTimeout(()=>{r()},e)}}var AT=290,IT=54,_T=55,TT=56,kT=4,CT=41;function ey(r){let e=r.stringTuples();for(let t of e)if(t[0]===AT)return!1;if(e[0][0]===IT||e[0][0]===_T||e[0][0]===TT)return!0;if(e[0][0]===kT||e[0][0]===CT){let t=Nt(`${e[0][1]}`);return t==null||!t}return!1}var Zd=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=$o(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=At.deserialize(n);return await Vi(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let s=Q3(e,n);for(let{value:i,from:a}of t){if(te(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=$o(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&&te(d.record.value,At.deserialize(s).value)&&(c=!0),yield d;c||(yield xr({from:a,error:new Uo("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=Q3(e,t),s=$o(e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray()),yield*Je(this.peerRouting.getClosestPeers(e,{signal:n.signal}),i=>Xt(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&&te(d.record.value,At.deserialize(o).value)||c.push(xr({from:a.peer.id,error:new Uo("Value not put correctly")},n)));return c}),i=>an(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=z9(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new Be("Best value was 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 Dc({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 Dc({from:s,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function ry(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Lc(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Ce(r.id);return{id:gt(e),multiaddrs:(r.multiaddrs??[]).map(t=>X(t))}}var Jd=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:[ry({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(xr({from:c.peer.id,error:d},n))}return l};yield*Je(this.peerRouting.getClosestPeers(o,n),c=>Xt(c,l=>a(l)),c=>an(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.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",u)}if(yield Rc({from:this.components.peerId,messageType:be.GET_PROVIDERS,providers:d},t),yield G3({from:this.components.peerId,providers:d},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u}){let f={type:be.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d,f,{...t,signal:u})},l=new rr(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 G3({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var Ki=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 PT=1.2,RT=2,DT=2e3,Hi=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Ki(e.interval??5e3),this.failure=new Ki(e.interval??5e3),this.next=new Ki(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??RT,this.timeoutMultiplier=e.timeoutMultiplier??PT,this.minTimeout=e.minTimeout??DT,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=me([e.signal,n]);return V(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 ef=class extends pe{log;protocol;running;components;timeout;metrics;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 Hi({...t.timeout??{},metrics:e.metrics,metricName:`${t.logPrefix.replaceAll(":","_")}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.logPrefix.replaceAll(":","_")}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.logPrefix.replaceAll(":","_")}_outbound_rpc_errors_total`)}}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 C("Message type was missing");this.log("sending %s to %p",t.type,e),yield Y3({peer:e},n),yield z3({to:e,type:o},n);let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[o]:!0}),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 Rc({from:e,messageType:c.type,closer:c.closer.map(Lc),providers:c.providers.map(Lc),record:c.record==null?void 0:At.deserialize(c.record)},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield xr({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 C("Message type was missing");this.log("sending %s to %p",t.type,e),yield Y3({peer:e},n),yield z3({to:e,type:o},n);let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[o]:!0}),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 Rc({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.abort(a),yield xr({from:e,error:a},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){let o=Qe(e);await o.write(t,Lr,n),await o.unwrap().close(n)}async _writeReadMessage(e,t,n){let o=Qe(e);await o.write(t,Lr,n);let s=await o.read(Lr,n);return await o.unwrap().close(n),s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:Lc(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:Lc(i)})}),s}};function qi(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 Wi=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 Nr(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:on(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,s)=>qi(o.distance,s.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await Nr(e),n=on(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return qi(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var tf=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.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")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=X9(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let s=rt(o.record.value),i=En(s);if(!i.equals(e))throw new Pn("public key does not match id");if(i.publicKey==null)throw new Pn("public key missing");yield Dc({from:e,value:o.record.value},t)}throw new Uo(`Node not responding with its public key: ${e.toString()}`)}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 jd({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.toMultihash().bytes};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 jd({from:l.from,peer:d},t))}};for await(let i of this.queryManager.run(e.toMultihash().bytes,s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}n||(yield xr({from:this.peerId,error:new Be("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Fo(e),o=this.routingTable.closestPeers(n),s=this,i=new Wi(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",F(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 jd({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 xr({from:o.from,error:new Uo(i)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new Yd("invalid record received");await Vi(this.validators,new At(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await Fo(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.name!=="NotFoundError")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 ny=Tt(A2(),1);var rf=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,ny.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:q3});for await(let a of i)try{let{cid:c,peerId:l}=oy(a.key),d=sy(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=Nc(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=Nc(e),n=this.cache.get(t);return n==null&&(n=await MT(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=Nc(e);this.cache.set(s,n),await OT(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=>Re(n))),{throwOnTimeout:!0})}};function Nc(r){let e=typeof r=="string"?r:F(r.multihash.bytes,"base32");return`${q3}/${e}`}async function OT(r,e,t,n){let o=[Nc(e),"/",t.toString()].join(""),s=new De(o),i=Ve(n.getTime());await r.put(s,i)}function oy(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 MT(r,e){let t=new Map,n=r.query({prefix:Nc(e)});for await(let o of n){let{peerId:s}=oy(o.key);t.set(s,sy(o.value))}return t}function sy(r){return new Date(Ot(r))}async function*iy(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 dr({concurrency:i,sort:(g,y)=>qi(g.options.distance,y.options.distance)}),p=await Fo(e);function m(g,y){if(g==null)return;u.add(g);let b=on(y,p);h.add(async()=>{let w=[o];l!=null&&w.push(AbortSignal.timeout(l));let x=me(w);V(1/0,x);try{for await(let T of s({key:e,peer:g,signal:x,pathIndex:a,numPaths:c})){if(x.aborted)return;if(T.name==="PEER_RESPONSE")for(let k of T.closer){if(u.has(k.id)){d.trace("already seen %p in query",k.id);continue}if(n.equals(k.id)){d("not querying ourselves");continue}if(!await f.isDialable(k.multiaddrs)){d("not querying undialable peer");continue}let v=await Nr(k.id),S=on(v,p);if(qi(S,b)!==-1){d.trace("skipping %p as they are not closer to %b than %p",k.id,e,g);continue}d.trace("querying closer peer %p",k.id),m(k.id,v)}h.safeDispatchEvent("completed",{detail:T})}}catch(T){if(!o.aborted)return xr({from:g,error:T},r)}finally{x.clear()}},{distance:b}).catch(w=>{d.error(w)})}m(t,await Nr(t));try{for await(let g of h.toGenerator({signal:o}))g!=null&&(yield g)}catch(g){throw o.aborted?new Gd("Query aborted"):g}}var nf=class{disjointPaths;alpha;shutDownController;running;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.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.metrics={queries:e.metrics?.registerCounter(`${s.replaceAll(":","_")}_queries_total`),errors:e.metrics?.registerCounter(`${s.replaceAll(":","_")}_query_errors_total`),queryTime:e.metrics?.registerMetric(`${s.replaceAll(":","_")}_query_time_seconds`)},this.shutDownController=new AbortController,V(1/0,this.shutDownController.signal)}isStarted(){return this.running}async start(){this.running=!0,this.shutDownController=new AbortController,V(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);V(1/0,d),n={...n,signal:d}}let s=new AbortController,i=me([this.shutDownController.signal,s.signal,n.signal]);V(1/0,i,s.signal);let a=this.logger.forComponent(`${this.logPrefix}:query:`+F(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.metrics?.queries?.increment();let d=await Fo(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 rr,p=f.map((m,g)=>iy({key:e,startingPeer:m,ourPeerId:this.peerId,signal:i,query:t,pathIndex:g,numPaths:f.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:a,peersSeen:h,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let m of Mt(...p)){if(m.name==="QUERY_ERROR"&&a.error("query error",m.error),m.name==="PEER_RESPONSE")for(let g of[...m.closer,...m.providers])await this.connectionManager.isDialable(g.multiaddrs)&&await this.routingTable.add(g.id);yield m}l=!0}catch(d){if(l||this.metrics?.errors?.increment(),!(!this.running&&d.name==="QueryAbortedError"))throw d}finally{l||(a("query exited early"),s.abort()),i.clear(),o?.(),a("query:done in %dms",Date.now()-c)}}};function UT(r){return r[Symbol.asyncIterator]!=null}function FT(r){if(UT(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 of=FT;var $T=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 VT(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}=$T(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=Xr(o,{milliseconds:t.timeout});return s.cancel=n,s}return o}function Bc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=VT(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var sf=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=J(),this.started){this.controller=new AbortController;let e=AbortSignal.timeout(this.queryTimeout),t=me([this.controller.signal,e]);V(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 Bc(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 Je(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),s=>ao(s,this.count),async s=>of(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 KT(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 cy(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 Oc(r){return Array.isArray(r?.peers)}var af=class extends pe{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;constructor(e){super(),this.localPeer=e.localPeer,this.prefixLength=e.prefixLength,this.kBucketSize=e.kBucketSize??Mc,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfNodesToPing??3,cy("options.localPeer.kadId",e.localPeer.kadId),this.root={prefix:"",depth:0,peers:[]}}add(e){cy("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 Wi(e,t);for(let o of this.toIterable())n.addWitKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Xt(n.peers,o=>o.id)}count(){function e(t){if(Oc(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(Oc(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+F(on(e,t),"base16"))}_determineBucket(e){let n=F(e,"base2").substring(0,this.prefixLength);function o(s,i=0){return Oc(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=>KT(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)F(s.kadId,"base2")[t]==="0"?n.peers.push(s):o.peers.push(s);delete e.peers,e.left=n,e.right=o}};var HT="kad-close",qT=50,Mc=20,WT=32,zT=1e4,GT=10,cf=class extends pe{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??Mc,this.pingTimeout=t.pingTimeout??zT,this.pingConcurrency=t.pingConcurrency??GT,this.running=!1,this.protocol=t.protocol,this.tagName=t.tagName??HT,this.tagValue=t.tagValue??qT,this.prefixLength=t.prefixLength??WT,this.splitThreshold=t.splitThreshold??Mc,this.pingQueue=new zt({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`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.logPrefix.replaceAll(":","_")}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running=!0;let e=new af({localPeer:{kadId:await Nr(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.metrics?.kadBucketEvents.increment({ping:!0}),this._onPing(n).catch(o=>{this.metrics?.kadBucketEvents.increment({ping_error:!0}),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 Nr(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 rr,n=J9(()=>{let o=new rr(e.closest(e.localPeer.kadId,Mc)),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.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:o.detail.peerId})}),e.addEventListener("removed",o=>{n(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),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=Qe(c);await u.write({type:be.PING},Lr,l);let f=await u.read(Lr,l);if(await u.unwrap().close(),f.type!==be.PING)throw new ue(`Incorrect message type received, expected PING got ${f.type}`);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.updateMetrics()}},{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 Nr(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 Nr(e);this.kb.add({kadId:t,peerId:e}),this.log.trace("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 Nr(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(Oc(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 ly=[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 lf=15,uf=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);V(1/0,s);let i=await of(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{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>lf&&(e=lf);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=ht(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),s=Ce(o);return gt(s)}async _makePeerId(e,t,n){if(n>lf)throw new Error(`Cannot generate peer ID for common prefix length greater than ${lf}`);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=ly[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,ut.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=on(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var df=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(t.key==null||t.key.length===0)throw new ue("Missing key");let n;try{n=Z.decode(t.key)}catch{throw new ue("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us to store provider record for for %c",e,n),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.trace("received provider %p for %s (addrs %s)",e,n,o.multiaddrs.map(i=>X(i).toString()));let s=Ce(o.id);await this.providers.addProvider(n,gt(s))}))}};var ff=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 ue("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);te(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(ee("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.toMultihash().bytes,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 hf=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 ue("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=Z.decode(t.key)}catch{throw new ue("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.toMultihash().bytes,multiaddrs:l.multiaddrs.map(d=>d.bytes)})),providers:i.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toMultihash().bytes,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.name!=="NotFoundError")throw o}return t}};var pf=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 ue("Invalid key");let o={type:be.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(j9(n)){this.log("is public key");let a=Z9(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Be("No public key found in key book");c=Rt(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new At(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.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=$o(e),n;try{n=await this.datastore.get(t)}catch(s){if(s.name==="NotFoundError")return;throw s}let o=At.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>1296e5){await this.datastore.delete(t);return}return o}};var mf=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 gf=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 ue(o)}try{let o=At.deserialize(t.record);await Vi(this.validators,o),o.timeReceived=new Date;let s=$o(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 yf=class{handlers;routingTable;log;metrics;constructor(e,t){let{providers:n,peerRouting:o,validators:s,logPrefix:i,peerInfoMapper:a}=t;this.metrics={operations:e.metrics?.registerCounterGroup(`${i.replaceAll(":","_")}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${i.replaceAll(":","_")}_inbound_rpc_errors_total`)},this.log=e.logger.forComponent(`${i}:rpc`),this.routingTable=t.routingTable,this.handlers={[be.GET_VALUE.toString()]:new pf(e,{peerRouting:o,logPrefix:i}),[be.PUT_VALUE.toString()]:new gf(e,{validators:s,logPrefix:i}),[be.FIND_NODE.toString()]:new ff(e,{peerRouting:o,logPrefix:i,peerInfoMapper:a}),[be.ADD_PROVIDER.toString()]:new df(e,{providers:n,logPrefix:i}),[be.GET_PROVIDERS.toString()]:new hf(e,{peerRouting:o,providers:n,logPrefix:i,peerInfoMapper:a}),[be.PING.toString()]:new mf(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}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}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 Je(t,i=>Qt(i),async function*(i){for await(let a of i){let c=Lr.decode(a);s.log("incoming %s from %p",c.type,o);let l=await s.handleMessage(o,c);l!=null&&(yield Lr.encode(l))}},i=>Yt(i),t)}).catch(t=>{this.log.error(t)})}};var wf=class extends pe{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 CustomEvent("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var j3=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 Be("Could not find value for key")}},Z3=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 Be("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},YT=32,QT=64,bf=class extends pe{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,m=l??"libp2p:kad-dht";this.running=!1,this.components=e,this.log=e.logger.forComponent(m),this.protocol=c??V9,this.kBucketSize=n??20,this.clientMode=o??!0,this.maxInboundStreams=f??YT,this.maxOutboundStreams=h??QT,this.peerInfoMapper=t.peerInfoMapper??Q9,this.routingTable=new cf(e,{kBucketSize:n,pingTimeout:d,pingConcurrency:u,protocol:this.protocol,logPrefix:m}),this.providers=new rf(e,p??{}),this.validators={...Y9,...s},this.selectors={...G9,...i},this.network=new ef(e,{protocol:this.protocol,logPrefix:m});let g=J();t.allowQueryWithZeroPeers===!0&&g.resolve(),this.queryManager=new nf(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:m,initialQuerySelfHasRun:g,routingTable:this.routingTable}),this.peerRouting=new tf(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:m}),this.contentFetching=new Zd(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:m}),this.contentRouting=new Jd(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:m}),this.routingTableRefresh=new uf(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:m}),this.rpc=new yf(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:m,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new wf(e,{protocol:this.protocol,logPrefix:m}),this.querySelf=new sf(e,{peerRouting:this.peerRouting,interval:a,initialInterval:t.initialQuerySelfInterval,logPrefix:m,initialQuerySelfHasRun:g,routingTable:this.routingTable}),this.network.addEventListener("peer",y=>{let b=y.detail;this.onPeerConnect(b).catch(w=>{this.log.error("could not add %p to routing table",b.id,w)}),this.dispatchEvent(new CustomEvent("peer",{detail:b}))}),this.topologyListener.addEventListener("peer",y=>{let b=y.detail;Promise.resolve().then(async()=>{let w=await this.components.peerStore.get(b),x={id:b,multiaddrs:w.addresses.map(({multiaddr:T})=>T),protocols:w.protocols};await this.onPeerConnect(x)}).catch(w=>{this.log.error("could not add %p to routing table",b,w)})}),this.dhtPeerRouting=new Z3(this),this.dhtContentRouting=new j3(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",y=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let b=y.detail.peer.addresses.some(({multiaddr:x})=>ey(x)),w=this.getMode();b&&w==="client"?await this.setMode("server"):w==="server"&&!b&&await this.setMode("client")}).catch(b=>{this.log.error("error setting dht server mode",b)})})}[Symbol.toStringTag]="@libp2p/kad-dht";[Se]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[$r]=["@libp2p/identify"];get[un](){return this.dhtContentRouting}get[dn](){return this.dhtPeerRouting}get[qo](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("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,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}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",!0),await qt(this.querySelf,this.providers,this.queryManager,this.network,this.routingTable,this.topologyListener,this.routingTableRefresh)}async stop(){this.running=!1,await Wt(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 uy;(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"})(uy||(uy={}));function dy(r={}){return e=>new bf(e,r)}var xy=Tt(by(),1),Yi=xy.default;var Ly=Tt(Cy(),1);var Qi={};Xe(Qi,{create:()=>hk,derivedEmptyPasswordKey:()=>vf});var vf={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function hk(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=tr.get();t*=8;async function c(u,f){let h=a.getRandomValues(new Uint8Array(s)),p=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:p};typeof f=="string"&&(f=O(f));let g;if(f.length===0){g=await a.subtle.importKey("jwk",vf,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,w,{name:e,length:t},!0,["encrypt"])}catch{g=await a.subtle.importKey("jwk",vf,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,w,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(m,g,u);return Pe([h,m.iv,new Uint8Array(y)])}async function l(u,f){let h=u.subarray(0,s),p=u.subarray(s,s+n),m=u.subarray(s+n),g={name:e,iv:p};typeof f=="string"&&(f=O(f));let y;if(f.length===0)try{let w={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},x=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",vf,{name:"AES-GCM"},!0,["decrypt"])}else{let w={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},x=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(g,y,m);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}async function em(r,e){let n=await Qi.create().encrypt(r,e);return st.encode(n)}async function tm(r,e,t){if(r.type==="RSA")return gk(r,e,t);if(r.type==="Ed25519")return pk(r,e,t);if(r.type==="secp256k1")return mk(r,e,t);throw new Fr}async function pk(r,e,t="libp2p-key"){if(t==="libp2p-key")return em(si(r),e);throw new C(`export format '${t}' is not supported`)}async function mk(r,e,t="libp2p-key"){if(t==="libp2p-key")return em(si(r),e);throw new C("Export format is not supported")}async function gk(r,e,t="pkcs-8"){if(t==="pkcs-8")return yk(r,e);if(t==="libp2p-key")return em(si(r),e);throw new C("Export format is not supported")}async function yk(r,e){let t=tr.get(),o=new ft({value:[new tt({value:0}),new ft({value:[new Ir({value:"1.2.840.113549.1.1.1"}),new Kn]}),new Hn({valueHex:r.raw})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=ht(16),a=await Ou(mo,e,i,{c:1e4,dkLen:32}),c=ht(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 ft({value:[new Hn({valueHex:i}),new tt({value:1e4}),new tt({value:32}),new ft({value:[new Ir({value:"1.2.840.113549.2.11"}),new Kn]})]}),f=new ft({value:[new Ir({value:"1.2.840.113549.1.5.13"}),new ft({value:[new ft({value:[new Ir({value:"1.2.840.113549.1.5.12"}),u]}),new ft({value:[new Ir({value:"2.16.840.1.101.3.4.1.42"}),new Hn({valueHex:c})]})]})]}),p=new ft({value:[f,new Hn({valueHex:d})]}).toBER(),m=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...F(m,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
19
+ `)}async function rm(r,e){try{let t=await wk(r,e);return f8(t)}catch{}if(!r.includes("BEGIN"))throw new C("Encrypted key was not a libp2p-key or a PEM file");return bk(r,e)}async function wk(r,e){let t=st.decode(r);return Qi.create().decrypt(t,e)}async function bk(r,e){let t=tr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let s=O(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=is(s),{iv:a,salt:c,iterations:l,keySize:d,cipherText:u}=xk(i),f=await Ou(mo,e,c,{c:l,dkLen:d}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Uc(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:m}=is(p);n=Dy(m)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let s=O(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=is(s);n=Dy(i)}else throw new C("Could not parse private key from PEM data");let o=h8(n);if(o.type!=="RSA")throw new C("Could not parse RSA private key from PEM data");return o}function xk(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new C("Only pkcs5PBES2 encrypted private keys are supported");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 C("Only pkcs5PBKDF2 key derivation functions are supported");let s=n.valueBlock.value[1],i=Uc(s.valueBlock.value[0].getValue()),a=1e4,c=32;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 C("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");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 C("Only AES-CBC encryption schemes are supported")}}}}let u=Uc(l.valueBlock.value[1].getValue());return{cipherText:Uc(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function Dy(r){return Uc(r.valueBlock.value[2].getValue())}function Uc(r){return new Uint8Array(r,0,r.byteLength)}var Ek="/pkcs8/",om="/info/",Fc=new WeakMap,Ss={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},nm={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function Xi(r){return r==null||typeof r!="string"?!1:r===(0,Ly.default)(r.trim())&&r.length>0}async function It(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function As(r){return new De(Ek+r)}function ji(r){return new De(om+r)}async function vk(r){let e=si(r),t=await ut.digest(e);return Ee.encode(t.bytes).substring(1)}var Sf=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=Yi(nm,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<Ss.minKeyLength)throw new Error(`dek.keyLength must be least ${Ss.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Ss.minSaltLength)throw new Error(`dek.saltLength must be least ${Ss.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Ss.minIterationCount)throw new Error(`dek.iterationCount must be least ${Ss.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?qa(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Fc.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Se]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},nm),t=Math.ceil(Ss.minSaltLength/3)*3;return e.dek.salt=F(ht(t),"base64"),e}static get options(){return nm}async findKeyByName(e){if(!Xi(e))throw await It(),new C(`Invalid key name '${e}'`);let t=ji(e);try{let n=await this.components.datastore.get(t);return JSON.parse(F(n))}catch(n){throw await It(),this.log.error(n),new Be(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:om};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(F(n.value));if(o.id===e)return o}throw new C(`Key with id '${e}' does not exist.`)}catch(t){throw await It(),t}}async importKey(e,t){if(!Xi(e))throw await It(),new C(`Invalid key name '${e}'`);if(t==null)throw await It(),new C("Key is required");let n=As(e);if(await this.components.datastore.has(n))throw await It(),new C(`Key '${e}' already exists`);let s,i;try{s=await vk(t);let l=Fc.get(this);if(l==null)throw new C("dek missing");let d=l.dek;i=await tm(t,d,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await It(),l}let a={name:e,id:s},c=this.components.datastore.batch();return c.put(n,O(i)),c.put(ji(e),O(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Xi(e))throw await It(),new C(`Invalid key name '${e}'`);let t=As(e);try{let n=await this.components.datastore.get(t),o=F(n),s=Fc.get(this);if(s==null)throw new C("dek missing");let i=s.dek;return await rm(o,i)}catch(n){throw await It(),n}}async removeKey(e){if(!Xi(e)||e==="self")throw await It(),new C(`Invalid key name '${e}'`);let t=As(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(ji(e)),await o.commit(),n}async listKeys(){let e={prefix:om},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(F(n.value)));return t}async renameKey(e,t){if(!Xi(e)||e==="self")throw await It(),new C(`Invalid old key name '${e}'`);if(!Xi(t)||t==="self")throw await It(),new C(`Invalid new key name '${t}'`);let n=As(e),o=As(t),s=ji(e),i=ji(t);if(await this.components.datastore.has(o))throw await It(),new C(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(F(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,O(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await It(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await It(),new C(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await It(),new C(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await It(),new C(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=Fc.get(this);if(n==null)throw new C("dek missing");let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?qa(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Fc.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(As(a.name)),l=F(c),d=await rm(l,o),u=s.toString(),f=await tm(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(As(a.name),O(f)),h.put(ji(a.name),O(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function Af(r={}){return e=>new Sf(e,r)}var If=class extends Error{remainingPoints;msBeforeNext;consumedPoints;isFirstInDuration;constructor(e="Rate limit exceeded",t){super(e),this.name="RateLimitError",this.remainingPoints=t.remainingPoints,this.msBeforeNext=t.msBeforeNext,this.consumedPoints=t.consumedPoints,this.isFirstInDuration=t.isFirstInDuration}};var Zi=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 sm}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 If("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 Ud(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)}},sm=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 $c=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),im=Object.freeze({NEW_STREAM:ye.NEW_STREAM,MESSAGE:ye.MESSAGE_INITIATOR,CLOSE:ye.CLOSE_INITIATOR,RESET:ye.RESET_INITIATOR}),Ny=Object.freeze({MESSAGE:ye.MESSAGE_RECEIVER,CLOSE:ye.CLOSE_RECEIVER,RESET:ye.RESET_RECEIVER});var am=1<<20,Sk=4<<20,_f=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=am,t=Sk){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 new ue("Unprocessed message queue size too large!");let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.name==="InvalidMessageError")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}=Oy(e),{value:o,offset:s}=Oy(e,n),i=t&7;if($c[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw new ue("Message size too large");return{id:t>>3,type:i,offset:n+s,length:o}}},Ak=128,By=127;function Oy(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&By)<<n:(s&By)*Math.pow(2,n),n+=7}while(s>=Ak);return e=o-e,{value:t,offset:e}}var cm=10*1024,lm=class{_pool;_poolOffset;constructor(){this._pool=We(cm),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);cm-o<100?(this._pool=We(cm),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)}},Ik=new lm;async function*My(r){for await(let e of r){let t=new ce;Ik.write(e,t),yield t}}var Tf=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var um=class extends Tn{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?im:Ny,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:im.NEW_STREAM,data:new ce(O(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 Uy(r){let{id:e,name:t,send:n,onEnd:o,type:s="initiator",maxMsgSize:i=am}=r;return new um({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 _k=1024,Tk=1024,kk=1024*1024*4,Ck=5,Pk=500;function Fy(r){let e={...r,type:`${$c[r.type]} (${r.type})`};return r.type===ye.NEW_STREAM&&(e.data=F(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===ye.MESSAGE_INITIATOR||r.type===ye.MESSAGE_RECEIVER)&&(e.data=F(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var kf=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??Pk,this.sink=this._createSink(),this._source=kt({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=Je(this._source,n=>My(n)),this.closeController=new AbortController,this.rateLimiter=new Zi({points:t.disconnectThreshold??Ck,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 hn("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??Tk))throw new io("Too many outbound streams open");if(s.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=Uy({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,Fy(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=()=>{_d(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new _f(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",Fy(e)),e.type===ye.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??_k)){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:F(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,$c[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??kk;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 Tf("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");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 dm=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Se]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new kf(this.components,{...e,...this._init})}};function $y(r={}){return e=>new dm(e,r)}var Vy="1.0.0",Ky="ping",Hy="ipfs";var Cf=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??Hy}/${Ky}/${Vy}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!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,runOnLimitedConnection:this.runOnLimitedConnection}),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(),o=ws(t);Promise.resolve().then(async()=>{for(;;){let s=AbortSignal.timeout(this.timeout);s.addEventListener("abort",()=>{t?.abort(new Mr("ping timeout"))});let i=await o.read(32,{signal:s});await o.write(i,{signal:s})}}).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=ht(32),s=await this.components.connectionManager.openConnection(e,t),i;if(t.signal==null){let a=AbortSignal.timeout(this.timeout);t={...t,signal:a}}try{i=await s.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let a=ws(i),[,c]=await Promise.all([a.write(o,t),a.read(32,t)]),l=Date.now()-n;if(!te(o,c.subarray()))throw new sl(`Received wrong ping ack after ${l}ms`);return this.log("ping %p complete in %dms",s.remotePeer,l),l}catch(a){throw this.log.error("error while pinging %p",s.remotePeer,a),i?.abort(a),a}finally{i!=null&&await i.close(t)}}};function qy(r={}){return e=>new Cf(e,r)}var Wy=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))},Nk=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var Bk=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var Ok=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 Mk=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var Uk=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var Fk=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,$k=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,zy=3,Vk=[["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",Fk]],Gy=[["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 Qy(r){return r?Yy(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new Uk:typeof navigator<"u"?Yy(navigator.userAgent):qk()}function Kk(r){return r!==""&&Vk.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 Yy(r){var e=Kk(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new Mk;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<zy&&(o=Wy(Wy([],o,!0),Wk(zy-o.length),!0)):o=[];var s=o.join("."),i=Hk(r),a=$k.exec(r);return a&&a[1]?new Ok(t,s,i,a[1]):new Nk(t,s,i)}function Hk(r){for(var e=0,t=Gy.length;e<t;e++){var n=Gy[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function qk(){var r=typeof process<"u"&&process.version;return r?new Bk(process.version.slice(1)):null}function Wk(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Xy=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"];var jy=Qy(),Vc=jy!=null&&jy.name==="firefox",Pf=async function*(){},Rf=async r=>{},zk=30*1e3;function Zy(r,e,t=zk,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=J(),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 Xr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function Kc(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Xy.map(e=>({urls:[e]})),r}var Is=class{log;peerConnection;remoteAddr;timeline;metrics;source=Pf();sink=Rf;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 Kt;(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,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.flag=r.Flag.codec().decode(o);break}case 2:{a.message=o.bytes();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)})(Kt||(Kt={}));var Gk=2*1024*1024,Yk=30*1e3,Df=16*1024;function Qk(r=Df){let e=he(r-he(r)),t=1+he(Object.keys(Kt.Flag).length-1),n=1,o=r-e-t-n,s=he(o);return e+t+n+s}var Xk=Qk(),jk=5e3,Zk=5e3,hm=class extends Tn{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 Xr(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=kt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??Yk,this.maxBufferedAmount=e.maxBufferedAmount??Gk,this.maxMessageSize=(e.maxMessageSize??Df)-Xk,this.receiveFinAck=J(),this.finAckTimeout=e.closeTimeout??jk,this.openTimeout=e.openTimeout??Zk,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 Wo("Unknown datachannel 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 Bc(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof Mr?new Mr(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new Wo(`Invalid datachannel state - ${this.channel.readyState}`);this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await Bc(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=Kt.encode({message:n}),s=Yt.single(o);await this._sendMessage(s),e.consume(t)}}async sendReset(){await this._sendFlag(Kt.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag(Kt.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",errorName:"FinAckNotReceivedError"})}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(Kt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Kt.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===Kt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Kt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Kt.Flag.RESET&&this.reset(),t.flag===Kt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Kt.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=Kt.encode({flag:e}),n=Yt.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 Ji(r){let{channel:e,direction:t}=r;return new hm({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var Jy="/webrtc",Vo=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??Jy,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=Ji({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 pm(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},pm=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??Jy,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=Ji({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),Zy(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=Pf();sink=Rf;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=Ji({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 _s=globalThis.RTCPeerConnection,Lf=globalThis.RTCSessionDescription,ew=globalThis.RTCIceCandidate;var Ko=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Br=class extends Ko{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var Hc=class extends Ko{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`),this.name="WebRTC/DataChannelError"}},Nf=class extends Ko{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`),this.name="WebRTC/InappropriateMultiaddrError"}};var qc=class extends Ko{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var Bf=class extends Ko{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},Of=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 `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var lr;(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,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.data=o.string();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)})(lr||(lr={}));var Mf=async(r,e,t)=>{try{let n=J();for(Jk(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!==lr.Type.ICE_CANDIDATE)throw new ue("ICE candidate message expected");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 ew(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&&Uf(r)!=="connected")throw n}};function Uf(r){return Vc?r.iceConnectionState:r.connectionState}function Jk(r,e){r[Vc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(Uf(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new Ns("RTCPeerConnection was closed"));break;default:break}}}async function tw({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:s,transportManager:i,log:a,logger:c,onProgress:l}){let{baseAddr:d}=rw(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",d);let u=d.getPeerId();if(u==null)throw new C("Relay peer was missing");let f=s.getConnections(Re(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 m=await h.newStream(Ff,{signal:t,runOnLimitedConnection:!0}),g=Qe(m).pb(lr),y=new _s(r),b=new Vo({logger:c},{peerConnection:y,dataChannelOptions:e});try{let w=y.createDataChannel("init");y.onicecandidate=({candidate:v})=>{let S=JSON.stringify(v?.toJSON()??null);a.trace("initiator sending ICE candidate %o",v),g.write({type:lr.Type.ICE_CANDIDATE,data:S},{signal:t}).catch(_=>{a.error("error sending ICE candidate",_)})},y.onicecandidateerror=v=>{a.error("initiator ICE candidate error",v)};let x=await y.createOffer().catch(v=>{throw a.error("could not execute createOffer",v),new Br("Failed to set createOffer")});a.trace("initiator send SDP offer %s",x.sdp),l?.(new H("webrtc:send-sdp-offer")),await g.write({type:lr.Type.SDP_OFFER,data:x.sdp},{signal:t}),await y.setLocalDescription(x).catch(v=>{throw a.error("could not execute setLocalDescription",v),new Br("Failed to set localDescription")}),l?.(new H("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let T=await g.read({signal:t});if(T.type!==lr.Type.SDP_ANSWER)throw new Br("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",T.data);let k=new Lf({type:"answer",sdp:T.data});return await y.setRemoteDescription(k).catch(v=>{throw a.error("could not execute setRemoteDescription",v),new Br("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await Mf(y,g,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),w.close(),l?.(new H("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:y,muxerFactory:b}}catch(w){throw a.error("outgoing signaling error",w),y.close(),m.abort(w),w}finally{y.onicecandidate=null,y.onicecandidateerror=null}}finally{if(p)try{await h.close({signal:t})}catch(m){h.abort(m)}}}var $f=class extends pe{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=>cn.matches(t)).map(t=>t.encapsulate(`/webrtc/p2p/${this.peerId}`))).flat()}async close(){this.shutdownController.abort(),this.safeDispatchEvent("close",{})}};async function nw({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let s=Qe(e).pb(lr);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),s.write({type:lr.Type.ICE_CANDIDATE,data:u},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})},o.trace("recipient read SDP offer");let a=await s.read({signal:t});if(a.type!==lr.Type.SDP_OFFER)throw new Br(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new Lf({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new Br("Failed to set remoteDescription")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new Br("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await s.write({type:lr.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new Br("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await Mf(r,s,{direction:"recipient",signal:t,log:o})}catch(a){if(Uf(r)!=="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=X(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",i),{remoteAddress:i}}var eC="/webrtc",tC="/p2p-circuit",Ff="/webrtc-signaling/0.0.1",rC=30*1e3,Vf=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,V(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"})})}[fn]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Se]=["@libp2p/transport"];[$r]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(Ff,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(Ff),this._started=!1}createListener(e){return new $f(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(hc.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 tw({rtcConfiguration:await Kc(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 Is(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??rC),o=new _s(await Kc(this.init.rtcConfiguration)),s=new Vo(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i}=await nw({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new Is(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 rw(r){let e=r.toString().split(eC+"/");if(e.length!==2)throw new C("webrtc protocol was not present in multiaddr");if(!e[0].includes(tC))throw new C("p2p-circuit protocol was not present in multiaddr");let t=X(e[0]),o=X("/"+e[1]).getPeerId();if(o==null)throw new C("destination peer id was missing");let s=t.protos().pop();if(s===void 0)throw new C("invalid multiaddr");return s.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:Re(o)}}var mm=Object.values(Nn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function ow(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:oC(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 new qc("","no fingerprint on local certificate");return n}var nC=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function oC(r){return r.match(nC)?.groups?.fingerprint}function sC(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function Kf(r){let t=r.stringTuples().filter(n=>n[0]===aw).map(n=>n[1])[0];if(t===void 0||t==="")throw new C(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function gm(r){return ze.decode(mm.decode(r))}function iC(r){let e=gm(Kf(r)),t=ym(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 new qc(n,r.toString());return[`${t} ${o.join(":").toUpperCase()}`,n]}function ym(r){switch(r){case 17:return"SHA-1";case 18:return"SHA-256";case 19:return"SHA-512";default:throw new Of(r)}}function aC(r,e){let{host:t,port:n}=r.toOptions(),o=sC(r),[s]=iC(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:${xf}
32
+ a=max-message-size:${Df}
33
33
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host\r
34
- `}function Cy(r,e){return{type:"answer",sdp:Zk(r,e)}}function Py(r,e){if(r.sdp===void 0)throw new C("Can't munge a missing SDP");return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
34
+ `}function sw(r,e){return{type:"answer",sdp:aC(r,e)}}function iw(r,e){if(r.sdp===void 0)throw new C("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 Ly=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Dy=r=>[...Array(r)].map(()=>Ly.at(Math.floor(Math.random()*Ly.length))).join("");var eT=1e4,zse=J("webrtc-direct").code,Ry=J("certhash").code,Rf=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";[Se]=["@libp2p/transport"];async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw new Sf("WebRTCTransport.createListener")}listenFilter(e){return e.filter(ag.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 new vf("we need to have the remote's PeerId");let i=Re(s),a=O3(Pf(e)),c=await Ss.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:M3(a.code)}),l=new Ss({...await Cc(this.init.rtcConfiguration),certificates:[c]});try{let d=new Promise((E,S)=>{let _=l.createDataChannel("",{negotiated:!0,id:0}),F=setTimeout(()=>{let N=`Data channel was never opened: state: ${_.readyState}`;this.log.error(N),this.metrics?.dialerEvents.increment({open_error:!0}),S(new Pc("data",N))},eT);_.onopen=N=>{clearTimeout(F),E(_)},_.onerror=N=>{clearTimeout(F);let B=`Error opening a data channel for handshaking: ${N.target?.toString()??"not specified"}`;this.log.error(B),this.metrics?.dialerEvents.increment({unknown_error:!0}),S(new Pc("data",B))}}),u="libp2p+webrtc+v1/"+Dy(32),f=await l.createOffer(),h=Py(f,u);await l.setLocalDescription(h);let p=Cy(e,u);await l.setRemoteDescription(p);let m=await d,g=this.generateNoisePrologue(l,a.code,e),y=Si({prologueBytes:g})(this.components),b=zi({channel:m,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),w={...b,sink:b.sink.bind(b),source:async function*(){for await(let E of b.source)for(let S of E)yield S}()},x=new vs(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),k=Tc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(k,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":x.close().catch(E=>{this.log.error("error closing connection",E)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let T=new Uo(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await y.secureInbound(w,{signal:o,remotePeer:i}),await t.upgrader.upgradeOutbound(x,{skipProtection:!0,skipEncryption:!0,muxerFactory:T})}catch(d){throw l.close(),d}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw new C("no local certificate");let o=Ty(e,{log:this.log});if(o==null)throw new C("no local fingerprint found");let s=o.trim().toLowerCase().replaceAll(":",""),i=O(s,"hex"),a=Xt(t,i),c=B3.decode(Pf(n)),l=O("libp2p-webrtc-noise:");return Pe([l,a.bytes,c])}};function Ny(r){return e=>new Rf(e,r)}function By(r){return e=>new Cf(e,r)}var Oy=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 My=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await Oy(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=kt(Fy(),1);function $y(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Ky=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 f=null;typeof u.data=="string"&&(f=O(u.data)),$y(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 $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 Hy=(r,e)=>{e=e??{};let t=Ky(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:My(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 qy=WebSocket;var rT={"http:":"ws:","https:":"wss:"},Wy="ws:",zy=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Wy}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Wy,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(rT))t.protocol===n&&(t.protocol=o);return t};function Gy(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=zy(r,t),o=new qy(n.toString(),e.websocket);return Hy(o,e)}function Yy(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Ti.matches(t)||ys.matches(t)})}function Qy(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return ys.matches(t)})}function Xy(){throw new Error("WebSocket Servers can not be created in the browser!")}function jy(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 dt("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 $3=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";[Se]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=jy(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=Z(),s=Gy(C1(e),this.init);s.socket.addEventListener("error",()=>{let i=new Cs(`Could not connect to ${e.toString()}`);this.log.error("connection error:",i),this.metrics?.dialerEvents.increment({error:!0}),o.reject(i)});try{t.onProgress?.(new H("websockets:open-connection")),await ke(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 Xy({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):Pd||Rd?Qy(e):Yy(e)}dialFilter(e){return this.listenFilter(e)}};function Zy(r={}){return e=>new $3(e,r)}function V3(r){throw new Error("Not implemented")}var K3=class extends In{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 H3(r,e,t,n,o,s){let i=s.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=new K3({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 Nf(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function Jy(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 H3(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 H3(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)}},...Nf()};return c}}}function ew(r,e){return e.filter(n=>!!r.find(o=>ee(n,o))).length===e.length}var iT=Object.values(Ln).map(r=>r.decoder).reduce((r,e)=>r.or(e));function aT(r){return ze.decode(iT.decode(r))}function q3(r){if(!T1.matches(r))throw new to("Invalid multiaddr, was not a WebTransport address");let e=r.stringTuples(),t=e.filter(([i,a])=>i===J("certhash").code).map(([i,a])=>aT(a??"")),n=e.filter(([i,a])=>i===J("p2p").code).map(([i,a])=>Re(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 tw=globalThis.WebTransport;var W3=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;[Se]=["@libp2p/transport"];async dial(e,t){t?.signal?.throwIfAborted(),this.log("dialing %s",e),t=t??{};let{url:n,certhashes:o,remotePeer:s}=q3(e),i,a,c=()=>{},l=!1,d=!1,u=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let f=new tw(`${n}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:o.map(h=>({algorithm:"sha-256",value:h.digest}))});if(c=h=>{if(!l)try{this.metrics?.dialerEvents.increment({[h]:!0}),f.close()}catch(p){this.log.error("error closing wt session",p)}finally{a!=null&&(a.timeline.close=Date.now()),l=!0}},i=()=>{c(d?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",i,{once:!0}),this.log("wait for session to be ready"),t.onProgress?.(new H("webtransport:wait-for-session")),await Promise.race([f.closed,f.ready]),this.log("session became ready"),d=!0,this.metrics?.dialerEvents.increment({ready:!0}),f.closed.catch(h=>{this.log.error("error on remote wt session close",h)}).finally(()=>{c("remote_close")}),u=await ke(this.authenticateWebTransport({wt:f,remotePeer:s,certhashes:o,...t}),t.signal),!u)throw new Wc("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),a={close:async()=>{this.log("closing webtransport"),c("close")},abort:h=>{this.log("aborting webtransport due to passed err",h),c("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...Nf()},await t.upgrader.upgradeOutbound(a,{skipEncryption:!0,muxerFactory:Jy(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),c(u?"upgrade_error":d?"noise_error":"ready_error"),f}finally{i!=null&&t.signal?.removeEventListener("abort",i)}}async authenticateWebTransport({wt:e,remotePeer:t,certhashes:n,onProgress:o,signal:s}){s?.throwIfAborted(),o?.(new H("webtransport:open-authentication-stream"));let i=await e.createBidirectionalStream(),a=i.writable.getWriter(),c=i.readable.getReader(),l={source:async function*(){for(;;){let f=await c.read();if(f.value!=null&&(yield f.value),f.done)break}}(),sink:async f=>{for await(let h of f){await ke(a.ready,s);let p=h instanceof Uint8Array?h:h.subarray();a.write(p).catch(m=>{this.log.error("could not write chunk during authentication of WebTransport stream",m)})}}},d=Si()(this.components);o?.(new H("webtransport:secure-outbound-connection"));let{remoteExtensions:u}=await d.secureOutbound(l,{signal:s,remotePeer:t});if(o?.(new H("webtransport:close-authentication-stream")),a.close().catch(f=>{this.log.error(`Failed to close authentication stream writer: ${f.message}`)}),c.cancel().catch(f=>{this.log.error(`Failed to close authentication stream reader: ${f.message}`)}),!ew(u?.webtransportCerthashes??[],n.map(f=>f.bytes)))throw new C("Our certhashes are not a subset of the remote's reported certhashes");return!0}createListener(e){return V3(this.components,{...e,certificates:this.config.certificates,maxInboundStreams:this.config.maxInboundStreams})}listenFilter(){return[]}dialFilter(e){return globalThis.WebTransport==null?[]:e.filter(t=>{if(!T1.exactMatch(t))return!1;let{url:n,certhashes:o}=q3(t);return n!=null&&o.length>0})}};function rw(r={}){return e=>new W3(e,r)}var z3=kt(O1(),1);function nw(r,e){let t=e.map((n,o)=>({record:Sn(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===nr.ValidityType.EOL&&o.record.validityType===nr.ValidityType.EOL){let a=z3.default.fromString(n.record.validity).toDate(),c=z3.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 Bf="2.0.2",Of="libp2p";var sw="4.2.6-9de08ef",iw="helia";var aw={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 Mf(r={}){let e=`${iw}/${sw} ${Of}/${Bf} UserAgent=${globalThis.navigator.userAgent}`;return{privateKey:r.privateKey,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[c3({discoverRelays:1}),By(),Ny(),rw(),Zy()],connectionEncrypters:[Si()],streamMuxers:[b7(),ly()],peerDiscovery:[B7(aw)],services:{autoNAT:S7(),dcutr:Y7(),delegatedRouting:()=>Ag("https://delegated-ipfs.dev"),dht:N9({clientMode:!0,validators:{ipns:H1},selectors:{ipns:nw}}),identify:c9({agentVersion:e}),identifyPush:l9({agentVersion:e}),keychain:ff(r.keychain),ping:py()}}}function G3(r){try{let{address:e}=r.nodeAddress();return!!tr(e)}catch{return!0}}function cT(r,e){let t=G3(r.multiaddr),n=G3(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function lT(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function uT(r,e){let t=vn.exactMatch(r.multiaddr),n=vn.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Gi(r,e){let t=cT(r,e);if(t!==0)return t;let n=uT(r,e);return n!==0?n:lT(r,e)}var dT=32,{code:fT}=J("dnsaddr"),Y3=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},As=async function(e,t={}){let n=t.maxRecursiveDepth??dT;if(n===0)throw new Y3("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===fT)??[],i=await(t?.dns??Vu()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[pr.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=X(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 hT={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:As},addressSorter:Gi},transportManager:{faultTolerance:eo.FATAL_ALL}};async function cw(r){let e=Vi(hT,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new C("Private network is enforced, but no protector was provided");return e}var Yi;(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,c={})=>{let l={key:"",value:ie(0)},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let u=i.uint32();switch(u>>>3){case 1:{l.key=i.string();break}case 2:{l.value=i.bytes();break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>ne(i,o.codec()),o.decode=(i,a)=>te(i,o.codec(),a)})(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),Ff.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a,c={})=>{let l={key:""},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let u=i.uint32();switch(u>>>3){case 1:{l.key=i.string();break}case 2:{l.value=Ff.codec().decode(i,i.uint32(),{limits:c.limits?.value});break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>ne(i,o.codec()),o.decode=(i,a)=>te(i,o.codec(),a)})(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),Uf.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,i={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(i.limits?.addresses!=null&&a.addresses.length===i.limits.addresses)throw new Oe('Decode error - map field "addresses" had too many elements');a.addresses.push(Uf.codec().decode(o,o.uint32(),{limits:i.limits?.addresses$}));break}case 2:{if(i.limits?.protocols!=null&&a.protocols.length===i.limits.protocols)throw new Oe('Decode error - map field "protocols" had too many elements');a.protocols.push(o.string());break}case 4:{a.publicKey=o.bytes();break}case 5:{a.peerRecordEnvelope=o.bytes();break}case 6:{if(i.limits?.metadata!=null&&a.metadata.size===i.limits.metadata)throw new ca('Decode error - map field "metadata" had too many elements');let d=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(d.key,d.value);break}case 7:{if(i.limits?.tags!=null&&a.tags.size===i.limits.tags)throw new ca('Decode error - map field "tags" had too many elements');let d=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:i.limits?.tags$value}});a.tags.set(d.key,d.value);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(Yi||(Yi={}));var Uf;(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,o={})=>{let s={multiaddr:ie(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.multiaddr=t.bytes();break}case 2:{s.isCertified=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Uf||(Uf={}));var Ff;(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,o={})=>{let s={value:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.value=t.uint32();break}case 2:{s.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ff||(Ff={}));function Qi(r,e){let t=Yi.decode(e);if(t.publicKey!=null&&r.publicKey==null){let s=Je(t.publicKey);r=wn(s)}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:X(s),isCertified:i??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var Q3="/peers/";function Xi(r){if(!Hc(r)||r.type==null)throw new C("Invalid PeerId");let e=r.toCID().toString();return new Le(`${Q3}${e}`)}async function lw(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=X(o.multiaddr)),!To(o.multiaddr))throw new C("Multiaddr was invalid");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 Vf(r,e,t,n){if(e==null)throw new C("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new C("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new C("peer id did not match existing peer id");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(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=$f(f,{validate:uw})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=$f(f,{validate:dw,map:fw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...e.protocols])),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,p]of f)p==null?a.delete(h):a.set(h,p);a=$f([...a.entries()],{validate:uw})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,m]of f)m==null?h.delete(p):h.set(p,m);c=$f([...h.entries()],{validate:dw,map:fw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d;o?.id.publicKey!=null?d=Rt(o.id.publicKey):e.publicKey!=null?d=Rt(e.publicKey):r.publicKey!=null&&(d=Rt(r.publicKey));let u={addresses:await lw(r,n.addressFilter??(async()=>!0),s),protocols:[...i.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:d,peerRecordEnvelope:l};return r.type!=="RSA"&&delete u.publicKey,u}function $f(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 uw(r,e){if(typeof r!="string")throw new C("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new C("Metadata value must be a Uint8Array")}function dw(r,e){if(typeof r!="string")throw new C("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new C("Tag value must be an integer");if(e.value<0||e.value>100)throw new C("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new C("Tag ttl must be an integer");if(e.ttl<0)throw new C("Tag ttl must be between greater than 0")}}function fw(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 Kf(r,e,t){let n=r.toString().split("/")[2],o=re.parse(n,it),s=bn(o),i=t.get(s);if(i!=null)return i;let a=Qi(s,e);return t.set(s,a),a}function pT(r,e){return r==null?{}:{prefix:Q3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(Kf(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(Kf(n.key,n.value,e),Kf(o.key,o.value,e)))}}var Hf=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=Za({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(Xi(e))}async delete(e){if(this.peerId.equals(e))throw new C("Cannot delete self peer");await this.datastore.delete(Xi(e))}async load(e){let t=await this.datastore.get(Xi(e));return Qi(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Vf(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 Vf(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 Vf(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async*all(e){let t=new mt;for await(let{key:n,value:o}of this.datastore.query(pT(e??{},t))){let s=Kf(n,o,t);s.id.equals(this.peerId)||(yield s)}}async#e(e){try{let t=await this.datastore.get(Xi(e)),n=Qi(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.name!=="NotFoundError")throw t}return{}}async#t(e,t,n,o){let s=Yi.encode(t);return n!=null&&ee(s,n)?{peer:Qi(e,s),previous:o,updated:!1}:(await this.datastore.put(Xi(e),s),{peer:Qi(e,s),previous:o,updated:!0})}};var qf=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 Hf(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 ac(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 br.openAndCertify(e,$t.DOMAIN),o=bn(n.publicKey.toCID());if(t?.equals(o)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,o),!1;let s=$t.createFromProtobuf(n.payload),i;try{i=await this.get(o)}catch(a){if(a.name!=="NotFoundError")throw a}if(i?.peerRecordEnvelope!=null){let a=await br.createFromProtobuf(i.peerRecordEnvelope),c=$t.createFromProtobuf(a.payload);if(c.seqNumber>=s.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",c.seqNumber,s.seqNumber),!1}return await this.patch(s.peerId,{peerRecordEnvelope:e,addresses:s.multiaddrs.map(a=>({isCertified:!0,multiaddr:a}))}),!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 hw(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var mT=r=>r;function X3(r,e){let t=r.getPeerId();return t!=null&&Re(t).equals(e)&&(r=r.decapsulate(X(`/p2p/${e.toString()}`))),r}var Wf=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??mT,this._updatePeerStoreAddresses=hw(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])=>X(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=>X(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>X(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>X(e))}addObservedAddr(e){e=X3(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=X3(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=X3(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=>X(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var pw;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(pw||(pw={}));var zf=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},Gf=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},Dc=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},Nc=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Yf=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Qf=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Xf=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},Bc=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Is=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Oc=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},jf=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},_s=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Mc=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Zf=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var j3=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=vo())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Jc(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")}},yT=["metrics","connectionProtector","dns"],wT=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function mw(r={}){let e=new j3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!wT.includes(o)){let i=e.components[o];if(i==null&&!yT.includes(o))throw new zf(`${o} not set`);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 gw(r){let e={};for(let t of Object.values(r.components))for(let n of bT(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of xT(t))if(e[n]!==!0)throw new Gf(`Service "${ET(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function bT(r){return Array.isArray(r?.[Se])?r[Se]:[]}function xT(r){return Array.isArray(r?.[Vr])?r[Vr]:[]}function ET(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function yw(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!tr(`${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 Jf(r){if(Hc(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:Re(t),r.forEach(n=>{if(!To(n))throw new to("Invalid multiaddr");let o=n.getPeerId();if(o==null){if(e!=null)throw new C("Multiaddrs must all have the same peer id or have no peer id")}else{let s=Re(o);if(e?.equals(s)!==!0)throw new C("Multiaddrs must all have the same peer id or have no peer id")}})}return{peerId:e,multiaddrs:r}}var vT=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function ww(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??vT;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var bw="last-dial-failure",xw="last-dial-success";var eh=100,th=50;var Ew={maxConnections:eh,allow:[]},rh=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??Ew.maxConnections,this.allow=t.allow??Ew.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 mt;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.name!=="NotFoundError"&&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 ww(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 nh=class extends lr{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};async function vw(r,e){let t=!1;for(let o of mi.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 Uc={addressSorter:Gi,maxParallelDials:th,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:As}},oh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter??Uc.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Uc.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Uc.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Uc.dialTimeout,this.connections=t.connections??new mt,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,V(1/0,this.shutDownController.signal);for(let[n,o]of Object.entries(t.resolvers??{}))mi.set(n,o);this.queue=new nh({concurrency:t.maxParallelDials??Uc.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,V(1/0,this.shutDownController.signal)}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Jf(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 Cn("Dial queue is 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 Cn("Peer had more than maxPeerAddrsToDial");d++;try{let h=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});this.log("dial to %a succeeded",f.multiaddr);try{await this.components.peerStore.merge(h.remotePeer,{multiaddrs:[h.remoteAddr],metadata:{[xw]:O(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}return h}catch(h){if(this.log.error("dial failed to %a",f.multiaddr,h),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[bw]:O(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}if(c.aborted)throw new ar(h.message);u.push(h)}}throw u.length===1?u[0]:new AggregateError(u,"All multiaddr dials failed")}finally{c.clear()}},{peerId:n,priority:t.priority??tm,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal,onProgress:t.onProgress})}createDialAbortController(e){let t=xe([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return V(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:X(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Cn("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new Bc("The dial request is blocked by gater.allowDialPeer");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.name!=="NotFoundError")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.name!=="NoPeerRoutersError"&&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 vw(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 Is("The dial request has 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 Bc("The connection gater denied all addresses in the dial request");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.runOnLimitedConnection===!1?n.find(o=>!vn.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var Cw=kt(kw(),1);var AT=Object.prototype.toString,IT=r=>AT.call(r)==="[object Error]",_T=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed","terminated"]);function rm(r){return r&&IT(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:_T.has(r.message):!1}var nm=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}},Tw=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function om(r,e){return new Promise((t,n)=>{e={onFailedAttempt(){},retries:10,shouldRetry:()=>!0,...e};let o=Cw.default.operation(e),s=()=>{o.stop(),n(e.signal?.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",s,{once:!0});let i=()=>{e.signal?.removeEventListener("abort",s),o.stop()};o.attempt(async a=>{try{let c=await r(a);i(),t(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof nm)throw c.originalError;if(c instanceof TypeError&&!rm(c))throw c;if(Tw(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){Tw(l,a,e),i(),n(l)}}})})}var sh=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new Wt({concurrency:t.maxParallelReconnects??5,metricName:"libp2p_reconnect_queue",metrics:e.metrics}),this.started=!1,this.retries=t.retries??5,this.backoffFactor=t.backoffFactor,this.retryInterval=t.retryInterval,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p",n.detail,o)})})}async maybeReconnect(e){!this.started||!(await this.peerStore.get(e)).tags.has(gh)||this.queue.has(e)||this.queue.add(async n=>{await om(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(s){throw this.log("reconnecting to %p attempt %d of %d failed",e,o,this.retries,s),s}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(n=>{this.log.error("failed to reconnect to %p",e,n)})}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(gh)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)})}stop(){this.started=!1,this.queue.abort()}};var tm=50,sm={maxConnections:eh,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},ih=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;constructor(e,t={}){if(this.maxConnections=t.maxConnections??sm.maxConnections,this.maxConnections<1)throw new C("Connection Manager maxConnections must be greater than 0");this.connections=new mt,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(n=>X(n)),this.deny=(t.deny??[]).map(n=>X(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??sm.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new Wi({points:t.inboundConnectionThreshold??sm.inboundConnectionThreshold,duration:1}),this.connectionPruner=new rh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new oh(e,{addressSorter:t.addressSorter??Gi,maxParallelDials:t.maxParallelDials??th,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:As},connections:this.connections}),this.reconnectQueue=new sh({events:e.events,peerStore:e.peerStore,logger:e.logger,connectionManager:this},{retries:t.reconnectRetries,retryInterval:t.reconnectRetryInterval,backoffFactor:t.reconnectBackoffFactor,maxParallelReconnects:t.maxParallelReconnects})}[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}}),await Ht(this.dialQueue,this.reconnectQueue),this.started=!0,this.log("started")}async stop(){await qt(this.reconnectQueue,this.dialQueue);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 Fr("Not started");t.signal?.throwIfAborted();let{peerId:n}=Jf(e);if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>c.limits==null);if(a!=null)return this.log("had an existing non-limited connection to %p",n),t.onProgress?.(new H("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??tm}),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=>X(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var CT=1e4,PT="1.0.0",RT="ping",LT="ipfs",Pw=32,DT=!0,ah=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??LT}/${RT}/${PT}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??CT,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??DT,this.timeout=new Oi({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Se]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,V(1/0,this.abortController.signal),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,runOnLimitedConnection:!0}),s=j1(o);t=Date.now(),await Promise.all([s.write(lt(Pw),{signal:n}),s.read(Pw,{signal:n})]),e.rtt=Date.now()-t,await s.unwrap().close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var ch=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 Dc("No content routers available");let n=this,o=new er;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 Dc("No content 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 Fr;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Fr;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var lh=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 Nc("No peer routers available");if(e.toString()===this.peerId.toString())throw new Yf("Should not try to 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 Be}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Nc("No peer routers available");let n=this,o=Va(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.toMultihash().bytes)&&(o.add(s.id.toMultihash().bytes),yield s))}};var uh=class extends pe{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,V(1/0,this.shutdownController.signal)}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,V(1/0,this.shutdownController.signal)}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=xe([this.shutdownController.signal,e?.signal]);V(1/0,t);try{for(;;)this.needNext?.resolve(),this.needNext=Z(),yield(await cr(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,V(1/0,this.walkController.signal);let e=xe([this.walkController.signal,this.shutdownController.signal]);V(1/0,e);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=lt(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 im=32,am=64,dh=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 Qf(`No handler registered for protocol ${e}`);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 Xf(`Handler already registered for protocol ${e}`);let o=Vi.bind({ignoreUndefined:!0})({maxInboundStreams:im,maxOutboundStreams:am},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 C("invalid topology");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.name!=="NotFoundError"&&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.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var fh=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=m1({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??eo.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new C("Transport must have a valid tag");if(this.transports.has(t))throw new C(`There is already a transport with the tag ${t}`);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 Zf(`No transport available for address ${String(e)}`);return t?.onProgress?.(new H("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}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 Fr("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!==eo.NO_FATAL)throw new Is(`Transport (${n}) could not listen on any available address`)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===eo.FATAL_ALL)throw new Is(n);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 _t="/multistream/1.0.0";var NT=O(`
39
- `);async function Ts(r,e,t){await r.write(e,t)}async function Rw(r,e,t){await r.writeV(e,t)}async function BT(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==NT[0])throw e.log.error("Invalid mss message - missing newline",t),new ue("Missing newline");return t.sublist(0,-1)}async function $o(r,e){let t=await BT(r,e);return U(t.subarray())}async function Fc(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return OT(r,e[0],t);let n=An(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"]',_t,o);let s=O(`${_t}
38
+ `),r}var cw=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),lw=r=>[...Array(r)].map(()=>cw.at(Math.floor(Math.random()*cw.length))).join("");var lC=1e4,Wie=ee("webrtc-direct").code,aw=ee("certhash").code,Hf=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"})})}[fn]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Se]=["@libp2p/transport"];async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw new Bf("WebRTCTransport.createListener")}listenFilter(e){return e.filter(fc.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 new Nf("we need to have the remote's PeerId");let i=Re(s),a=gm(Kf(e)),c=await _s.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:ym(a.code)}),l=new _s({...await Kc(this.init.rtcConfiguration),certificates:[c]});try{let d=new Promise((v,S)=>{let _=l.createDataChannel("",{negotiated:!0,id:0}),$=setTimeout(()=>{let N=`Data channel was never opened: state: ${_.readyState}`;this.log.error(N),this.metrics?.dialerEvents.increment({open_error:!0}),S(new Hc("data",N))},lC);_.onopen=N=>{clearTimeout($),v(_)},_.onerror=N=>{clearTimeout($);let B=`Error opening a data channel for handshaking: ${N.target?.toString()??"not specified"}`;this.log.error(B),this.metrics?.dialerEvents.increment({unknown_error:!0}),S(new Hc("data",B))}}),u="libp2p+webrtc+v1/"+lw(32),f=await l.createOffer(),h=iw(f,u);await l.setLocalDescription(h);let p=sw(e,u);await l.setRemoteDescription(p);let m=await d,g=this.generateNoisePrologue(l,a.code,e),y=Pi({prologueBytes:g})(this.components),b=Ji({channel:m,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),w={...b,sink:b.sink.bind(b),source:async function*(){for await(let v of b.source)for(let S of v)yield S}()},x=new Is(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),T=Vc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(T,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":x.close().catch(v=>{this.log.error("error closing connection",v)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let k=new Vo(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await y.secureInbound(w,{signal:o,remotePeer:i}),await t.upgrader.upgradeOutbound(x,{skipProtection:!0,skipEncryption:!0,muxerFactory:k})}catch(d){throw l.close(),d}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw new C("no local certificate");let o=ow(e,{log:this.log});if(o==null)throw new C("no local fingerprint found");let s=o.trim().toLowerCase().replaceAll(":",""),i=O(s,"hex"),a=jt(t,i),c=mm.decode(Kf(n)),l=O("libp2p-webrtc-noise:");return Pe([l,a.bytes,c])}};function uw(r){return e=>new Hf(e,r)}function dw(r){return e=>new Vf(e,r)}var fw=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 hw=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await fw(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 yw=Tt(mw(),1);function gw(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var ww=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 yw.EventIterator(({push:i,stop:a,fail:c})=>{let l=u=>{let f=null;typeof u.data=="string"&&(f=O(u.data)),gw(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 gw(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 bw=(r,e)=>{e=e??{};let t=ww(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:hw(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 xw=WebSocket;var dC={"http:":"ws:","https:":"wss:"},Ew="ws:",vw=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Ew}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Ew,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(dC))t.protocol===n&&(t.protocol=o);return t};function Sw(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=vw(r,t),o=new xw(n.toString(),e.websocket);return bw(o,e)}function Aw(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Bi.matches(t)||xs.matches(t)})}function Iw(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return xs.matches(t)})}function _w(){throw new Error("WebSocket Servers can not be created in the browser!")}function Tw(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 pt("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 xm=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"})})}[fn]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Se]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=Tw(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=J(),s=Sw(K1(e),this.init);s.socket.addEventListener("error",()=>{let i=new Ns(`Could not connect to ${e.toString()}`);this.log.error("connection error:",i),this.metrics?.dialerEvents.increment({error:!0}),o.reject(i)});try{t.onProgress?.(new H("websockets:open-connection")),await ke(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 _w({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):Kd||Hd?Iw(e):Aw(e)}dialFilter(e){return this.listenFilter(e)}};function kw(r={}){return e=>new xm(e,r)}function Em(r){throw new Error("Not implemented")}var vm=class extends Tn{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 Sm(r,e,t,n,o,s){let i=s.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=new vm({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 zf(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function Cw(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 Sm(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 Sm(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)}},...zf()};return c}}}function Pw(r,e){return e.filter(n=>!!r.find(o=>te(n,o))).length===e.length}var mC=Object.values(Nn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function gC(r){return ze.decode(mC.decode(r))}function Am(r){if(!ms.matches(r))throw new pn("Invalid multiaddr, was not a WebTransport address");let e=r.stringTuples(),t=e.filter(([i,a])=>i===ee("certhash").code).map(([i,a])=>gC(a??"")),n=e.filter(([i,a])=>i===ee("p2p").code).map(([i,a])=>Re(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 Rw=globalThis.WebTransport;var Im=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";[fn]=!0;[Se]=["@libp2p/transport"];async dial(e,t){t?.signal?.throwIfAborted(),this.log("dialing %s",e),t=t??{};let{url:n,certhashes:o,remotePeer:s}=Am(e),i,a,c=()=>{},l=!1,d=!1,u=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let f=new Rw(`${n}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:o.map(h=>({algorithm:"sha-256",value:h.digest}))});if(c=h=>{if(!l)try{this.metrics?.dialerEvents.increment({[h]:!0}),f.close()}catch(p){this.log.error("error closing wt session",p)}finally{a!=null&&(a.timeline.close=Date.now()),l=!0}},i=()=>{c(d?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",i,{once:!0}),this.log("wait for session to be ready"),t.onProgress?.(new H("webtransport:wait-for-session")),await Promise.race([f.closed,f.ready]),this.log("session became ready"),d=!0,this.metrics?.dialerEvents.increment({ready:!0}),f.closed.catch(h=>{this.log.error("error on remote wt session close",h)}).finally(()=>{c("remote_close")}),u=await ke(this.authenticateWebTransport({wt:f,remotePeer:s,certhashes:o,...t}),t.signal),!u)throw new tl("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),a={close:async()=>{this.log("closing webtransport"),c("close")},abort:h=>{this.log("aborting webtransport due to passed err",h),c("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...zf()},await t.upgrader.upgradeOutbound(a,{skipEncryption:!0,muxerFactory:Cw(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),c(u?"upgrade_error":d?"noise_error":"ready_error"),f}finally{i!=null&&t.signal?.removeEventListener("abort",i)}}async authenticateWebTransport({wt:e,remotePeer:t,certhashes:n,onProgress:o,signal:s}){s?.throwIfAborted(),o?.(new H("webtransport:open-authentication-stream"));let i=await e.createBidirectionalStream(),a=i.writable.getWriter(),c=i.readable.getReader(),l={source:async function*(){for(;;){let f=await c.read();if(f.value!=null&&(yield f.value),f.done)break}}(),sink:async f=>{for await(let h of f){await ke(a.ready,s);let p=h instanceof Uint8Array?h:h.subarray();a.write(p).catch(m=>{this.log.error("could not write chunk during authentication of WebTransport stream",m)})}}},d=Pi()(this.components);o?.(new H("webtransport:secure-outbound-connection"));let{remoteExtensions:u}=await d.secureOutbound(l,{signal:s,remotePeer:t});if(o?.(new H("webtransport:close-authentication-stream")),a.close().catch(f=>{this.log.error(`Failed to close authentication stream writer: ${f.message}`)}),c.cancel().catch(f=>{this.log.error(`Failed to close authentication stream reader: ${f.message}`)}),!Pw(u?.webtransportCerthashes??[],n.map(f=>f.bytes)))throw new C("Our certhashes are not a subset of the remote's reported certhashes");return!0}createListener(e){return Em(this.components,{...e,certificates:this.config.certificates,maxInboundStreams:this.config.maxInboundStreams})}listenFilter(){return[]}dialFilter(e){return globalThis.WebTransport==null?[]:e.filter(t=>{if(!ms.exactMatch(t))return!1;let{url:n,certhashes:o}=Am(t);return n!=null&&o.length>0})}};function Dw(r={}){return e=>new Im(e,r)}var _m=Tt(Q1(),1);function Lw(r,e){let t=e.map((n,o)=>({record:In(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===ir.ValidityType.EOL&&o.record.validityType===ir.ValidityType.EOL){let a=_m.default.fromString(n.record.validity).toDate(),c=_m.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 Gf="2.1.5",Yf="libp2p";var Bw="4.2.6-c04dbf5",Ow="helia";var Mw={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 Qf(r={}){let e=`${Ow}/${Bw} ${Yf}/${Gf} UserAgent=${globalThis.navigator.userAgent}`;return{privateKey:r.privateKey,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[V3({discoverRelays:1}),dw(),uw(),Dw(),kw()],connectionEncrypters:[Pi()],streamMuxers:[X7(),$y()],peerDiscovery:[f9(Mw)],services:{autoNAT:e9(),dcutr:I9(),delegatedRouting:()=>t7("https://delegated-ipfs.dev"),dht:dy({clientMode:!0,validators:{ipns:rd},selectors:{ipns:Lw}}),identify:F9({agentVersion:e}),identifyPush:$9({agentVersion:e}),keychain:Af(r.keychain),ping:qy()}}}var yC=32,{code:wC}=ee("dnsaddr"),Tm=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},Ts=async function(e,t={}){let n=t.maxRecursiveDepth??yC;if(n===0)throw new Tm("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===wC)??[],i=await(t?.dns??ju()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[pr.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=X(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 bC={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Ts}},transportManager:{faultTolerance:oo.FATAL_ALL}};async function Uw(r){let e=Yi(bC,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new C("Private network is enforced, but no protector was provided");return e}var ea;(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,c={})=>{let l={key:"",value:ie(0)},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let u=i.uint32();switch(u>>>3){case 1:{l.key=i.string();break}case 2:{l.value=i.bytes();break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>ne(i,o.codec()),o.decode=(i,a)=>re(i,o.codec(),a)})(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),jf.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a,c={})=>{let l={key:""},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let u=i.uint32();switch(u>>>3){case 1:{l.key=i.string();break}case 2:{l.value=jf.codec().decode(i,i.uint32(),{limits:c.limits?.value});break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>ne(i,o.codec()),o.decode=(i,a)=>re(i,o.codec(),a)})(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),Xf.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,i={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(i.limits?.addresses!=null&&a.addresses.length===i.limits.addresses)throw new Oe('Decode error - map field "addresses" had too many elements');a.addresses.push(Xf.codec().decode(o,o.uint32(),{limits:i.limits?.addresses$}));break}case 2:{if(i.limits?.protocols!=null&&a.protocols.length===i.limits.protocols)throw new Oe('Decode error - map field "protocols" had too many elements');a.protocols.push(o.string());break}case 4:{a.publicKey=o.bytes();break}case 5:{a.peerRecordEnvelope=o.bytes();break}case 6:{if(i.limits?.metadata!=null&&a.metadata.size===i.limits.metadata)throw new ma('Decode error - map field "metadata" had too many elements');let d=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(d.key,d.value);break}case 7:{if(i.limits?.tags!=null&&a.tags.size===i.limits.tags)throw new ma('Decode error - map field "tags" had too many elements');let d=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:i.limits?.tags$value}});a.tags.set(d.key,d.value);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)})(ea||(ea={}));var Xf;(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,o={})=>{let s={multiaddr:ie(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.multiaddr=t.bytes();break}case 2:{s.isCertified=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)})(Xf||(Xf={}));var jf;(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,o={})=>{let s={value:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.value=t.uint32();break}case 2:{s.expiry=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)})(jf||(jf={}));function ta(r,e){let t=ea.decode(e);if(t.publicKey!=null&&r.publicKey==null){let s=rt(t.publicKey);r=En(s)}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:X(s),isCertified:i??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var km="/peers/";function ra(r){if(!Jc(r)||r.type==null)throw new C("Invalid PeerId");let e=r.toCID().toString();return new De(`${km}${e}`)}async function Fw(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=X(o.multiaddr)),!Ro(o.multiaddr))throw new C("Multiaddr was invalid");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 Jf(r,e,t,n){if(e==null)throw new C("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new C("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new C("peer id did not match existing peer id");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(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Zf(f,{validate:$w})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Zf(f,{validate:Vw,map:Kw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...e.protocols])),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,p]of f)p==null?a.delete(h):a.set(h,p);a=Zf([...a.entries()],{validate:$w})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,m]of f)m==null?h.delete(p):h.set(p,m);c=Zf([...h.entries()],{validate:Vw,map:Kw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d;o?.id.publicKey!=null?d=Rt(o.id.publicKey):e.publicKey!=null?d=Rt(e.publicKey):r.publicKey!=null&&(d=Rt(r.publicKey));let u={addresses:await Fw(r,n.addressFilter??(async()=>!0),s),protocols:[...i.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:d,peerRecordEnvelope:l};return r.type!=="RSA"&&delete u.publicKey,u}function Zf(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 $w(r,e){if(typeof r!="string")throw new C("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new C("Metadata value must be a Uint8Array")}function Vw(r,e){if(typeof r!="string")throw new C("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new C("Tag value must be an integer");if(e.value<0||e.value>100)throw new C("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new C("Tag ttl must be an integer");if(e.ttl<0)throw new C("Tag ttl must be between greater than 0")}}function Kw(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 eh(r,e,t){let n=r.toString().split("/")[2],o=Z.parse(n,lt),s=vn(o),i=t.get(s);if(i!=null)return i;let a=ta(s,e);return t.set(s,a),a}function xC(r,e){return r==null?{}:{prefix:km,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(eh(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(eh(n.key,n.value,e),eh(o.key,o.value,e)))}}var th=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=ac({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(ra(e))}async delete(e){if(this.peerId.equals(e))throw new C("Cannot delete self peer");await this.datastore.delete(ra(e))}async load(e){let t=await this.datastore.get(ra(e));return ta(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Jf(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 Jf(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 Jf(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async*all(e){let t=new yt;for await(let{key:n,value:o}of this.datastore.query(xC(e??{},t))){let s=eh(n,o,t);s.id.equals(this.peerId)||(yield s)}}async#e(e){try{let t=await this.datastore.get(ra(e)),n=ta(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.name!=="NotFoundError")throw t}return{}}async#t(e,t,n,o){let s=ea.encode(t);return n!=null&&te(s,n)?{peer:ta(e,s),previous:o,updated:!1}:(await this.datastore.put(ra(e),s),{peer:ta(e,s),previous:o,updated:!0})}};var Cm=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 th(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 xc(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 br.openAndCertify(e,Vt.DOMAIN),o=vn(n.publicKey.toCID());if(t?.equals(o)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,o),!1;let s=Vt.createFromProtobuf(n.payload),i;try{i=await this.get(o)}catch(a){if(a.name!=="NotFoundError")throw a}if(i?.peerRecordEnvelope!=null){let a=await br.createFromProtobuf(i.peerRecordEnvelope),c=Vt.createFromProtobuf(a.payload);if(c.seqNumber>=s.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",c.seqNumber,s.seqNumber),!1}return await this.patch(s.peerId,{peerRecordEnvelope:e,addresses:s.multiaddrs.map(a=>({isCertified:!0,multiaddr:a}))}),!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 Hw(r,e={}){return new Cm(r,e)}function qw(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var EC=r=>r;function Pm(r,e){let t=r.getPeerId();return t!=null&&Re(t).equals(e)&&(r=r.decapsulate(X(`/p2p/${e.toString()}`))),r}var rh=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??EC,this._updatePeerStoreAddresses=qw(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])=>X(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=>X(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>X(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>X(e))}addObservedAddr(e){e=Pm(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=Pm(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=Pm(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=>X(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var Ww;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Ww||(Ww={}));var nh=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},oh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},zc=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},Gc=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},sh=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},ih=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},ah=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},Yc=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},ks=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},ch=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},lh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Cs=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Ps=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},uh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var Rm=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=Io())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>cl(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")}},SC=["metrics","connectionProtector","dns"],AC=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function zw(r={}){let e=new Rm(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!AC.includes(o)){let i=e.components[o];if(i==null&&!SC.includes(o))throw new nh(`${o} not set`);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 Gw(r){let e={};for(let t of Object.values(r.components))for(let n of IC(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of _C(t))if(e[n]!==!0)throw new oh(`Service "${TC(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function IC(r){return Array.isArray(r?.[Se])?r[Se]:[]}function _C(r){return Array.isArray(r?.[$r])?r[$r]:[]}function TC(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function Yw(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!Nt(`${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 dh(r){if(Jc(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:Re(t),r.forEach(n=>{if(!Ro(n))throw new pn("Invalid multiaddr");let o=n.getPeerId();if(o==null){if(e!=null)throw new C("Multiaddrs must all have the same peer id or have no peer id")}else{let s=Re(o);if(e?.equals(s)!==!0)throw new C("Multiaddrs must all have the same peer id or have no peer id")}})}return{peerId:e,multiaddrs:r}}var kC=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function Qw(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??kC;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var Xw="last-dial-failure",jw="last-dial-success";var fh=100,hh=50;var Zw={maxConnections:fh,allow:[]},ph=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??Zw.maxConnections,this.allow=t.allow??Zw.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections %e",e)})}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 yt;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.name!=="NotFoundError"&&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 Qw(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 mh=class extends dr{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function Dm(r){try{let{address:e}=r.nodeAddress();return!!Nt(e)}catch{return!0}}function CC(r,e){let t=Up.exactMatch(r.multiaddr),n=Up.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Vp.exactMatch(r.multiaddr),s=Vp.exactMatch(e.multiaddr);if(o&&!s)return-1;if(!o&&s)return 1;let i=$p.exactMatch(r.multiaddr),a=$p.exactMatch(e.multiaddr);if(i&&!a)return-1;if(!i&&a)return 1;let c=hc.exactMatch(r.multiaddr),l=hc.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let d=fc.exactMatch(r.multiaddr),u=fc.exactMatch(e.multiaddr);if(d&&!u)return-1;if(!d&&u)return 1;let f=ms.exactMatch(r.multiaddr),h=ms.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function PC(r,e){let t=Dm(r.multiaddr),n=Dm(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function RC(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function DC(r,e){let t=An.exactMatch(r.multiaddr),n=An.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Jw(r){return r.sort(CC).sort(RC).sort(DC).sort(PC)}async function eb(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 gh={maxParallelDials:hh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:Ts}},yh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??gh.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??gh.maxDialQueueLength,this.dialTimeout=t.dialTimeout??gh.dialTimeout,this.connections=t.connections??new yt,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,V(1/0,this.shutDownController.signal);for(let[n,o]of Object.entries(t.resolvers??{}))vi.set(n,o);this.queue=new mh({concurrency:t.maxParallelDials??gh.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail.name!==pt.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,V(1/0,this.shutDownController.signal)}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=dh(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?.status==="open")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 Dn("Dial queue is 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 Dn("Peer had more than maxPeerAddrsToDial");d++;try{let h=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});this.log("dial to %a succeeded",f.multiaddr);try{await this.components.peerStore.merge(h.remotePeer,{multiaddrs:[h.remoteAddr],metadata:{[jw]:O(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}return h}catch(h){if(this.log.error("dial failed to %a",f.multiaddr,h),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[Xw]:O(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}if(c.aborted)throw new Mr(h.message);u.push(h)}}throw u.length===1?u[0]:new AggregateError(u,"All multiaddr dials failed")}finally{c.clear()}},{peerId:n,priority:t.priority??Om,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal,onProgress:t.onProgress})}createDialAbortController(e){let t=me([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return V(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:X(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Dn("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new Yc("The dial request is blocked by gater.allowDialPeer");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.name!=="NotFoundError")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.name!=="NoPeerRoutersError"&&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 eb(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 ks("The dial request has 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=this.addressSorter==null?Jw(l):l.sort(this.addressSorter);if(d.length===0)throw new Yc("The connection gater denied all addresses in the dial request");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.runOnLimitedConnection===!1?n.find(o=>!An.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var ab=Tt(sb(),1);var NC=Object.prototype.toString,BC=r=>NC.call(r)==="[object Error]",OC=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed","terminated"]);function Mm(r){return r&&BC(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:OC.has(r.message):!1}var Um=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}},ib=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function Fm(r,e){return new Promise((t,n)=>{e={onFailedAttempt(){},retries:10,shouldRetry:()=>!0,...e};let o=ab.default.operation(e),s=()=>{o.stop(),n(e.signal?.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",s,{once:!0});let i=()=>{e.signal?.removeEventListener("abort",s),o.stop()};o.attempt(async a=>{try{let c=await r(a);i(),t(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof Um)throw c.originalError;if(c instanceof TypeError&&!Mm(c))throw c;if(ib(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){ib(l,a,e),i(),n(l)}}})})}var wh=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new zt({concurrency:t.maxParallelReconnects??5,metricName:"libp2p_reconnect_queue",metrics:e.metrics}),this.started=!1,this.retries=t.retries??5,this.backoffFactor=t.backoffFactor,this.retryInterval=t.retryInterval,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p",n.detail,o)})})}async maybeReconnect(e){!this.started||!(await this.peerStore.get(e)).tags.has(Ch)||this.queue.has(e)||this.queue.add(async n=>{await Fm(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(s){throw this.log("reconnecting to %p attempt %d of %d failed",e,o,this.retries,s),s}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(n=>{this.log.error("failed to reconnect to %p",e,n)})}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Ch)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)})}stop(){this.started=!1,this.queue.abort()}};var Om=50,$m={maxConnections:fh,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},bh=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;outboundPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;peerId;constructor(e,t={}){if(this.maxConnections=t.maxConnections??$m.maxConnections,this.maxConnections<1)throw new C("Connection Manager maxConnections must be greater than 0");this.connections=new yt,this.started=!1,this.peerId=e.peerId,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.allow=(t.allow??[]).map(n=>X(n)),this.deny=(t.deny??[]).map(n=>X(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??$m.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new Zi({points:t.inboundConnectionThreshold??$m.inboundConnectionThreshold,duration:1}),this.connectionPruner=new ph({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new yh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??hh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:Ts},connections:this.connections}),this.reconnectQueue=new wh({events:e.events,peerStore:e.peerStore,logger:e.logger,connectionManager:this},{retries:t.reconnectRetries,retryInterval:t.reconnectRetryInterval,backoffFactor:t.reconnectBackoffFactor,maxParallelReconnects:t.maxParallelReconnects})}[Symbol.toStringTag]="@libp2p/connection-manager";async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,"inbound pending":this.incomingPendingConnections,outbound:0,"outbound pending":this.outboundPendingConnections};for(let t of this.connections.values())for(let n of t)e[n.direction]++;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.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await qt(this.dialQueue,this.reconnectQueue,this.connectionPruner),this.started=!0,this.log("started")}async stop(){this.events.removeEventListener("connection:open",this.onConnect),this.events.removeEventListener("connection:close",this.onDisconnect),await Wt(this.reconnectQueue,this.dialQueue,this.connectionPruner);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}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),s=this.connections.get(n)??[];s.push(t),this.connections.set(n,s),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),o&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e,n=t.remotePeer,s=(this.connections.get(n)??[]).filter(i=>i.id!==t.id);this.connections.set(n,s),s.length===0&&(this.log("onDisconnect remove all connections for peer %p",n),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.started)throw new Ur("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=dh(e);if(this.peerId.equals(n))throw new Bs("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>c.limits==null);if(a!=null)return this.log("had an existing non-limited connection to %p",n),t.onProgress?.(new H("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??Om});if(o.status!=="open")throw new Ls("Remote closed connection during opening");let s=this.connections.get(o.remotePeer);s==null&&(s=[],this.connections.set(o.remotePeer,s));let i=!1;for(let a of s)if(a.id===o.id&&(i=!0),t.force!==!0&&a.id!==o.id&&a.remoteAddr.equals(o.remoteAddr))return o.abort(new pn("Duplicate multiaddr connection")),a;return i||s.push(o),o}finally{this.outboundPendingConnections--}}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=>X(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var FC=1e4,$C="1.0.0",VC="ping",KC="ipfs",cb=32,HC=!0,xh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??KC}/${VC}/${$C}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??FC,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??HC,this.timeout=new Hi({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Se]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,V(1/0,this.abortController.signal),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,runOnLimitedConnection:!0}),s=ws(o);t=Date.now(),await Promise.all([s.write(ht(cb),{signal:n}),s.read(cb,{signal:n})]),e.rtt=Date.now()-t,await s.unwrap().close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var Eh=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 zc("No content routers available");let n=this,o=new rr;for await(let s of Mt(...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 zc("No content 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 Ur;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Ur;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var vh=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 Gc("No peer routers available");if(e.toString()===this.peerId.toString())throw new sh("Should not try to find self");let n=this,o=Mt(...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 Be}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Gc("No peer routers available");let n=this,o=Ya(1024);for await(let s of an(async function*(){let i=Mt(...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.toMultihash().bytes)&&(o.add(s.id.toMultihash().bytes),yield s))}};var Sh=class extends pe{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,V(1/0,this.shutdownController.signal)}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,V(1/0,this.shutdownController.signal)}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=me([this.shutdownController.signal,e?.signal]);V(1/0,t);try{for(;;)this.needNext?.resolve(),this.needNext=J(),yield(await ur(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,V(1/0,this.walkController.signal);let e=me([this.walkController.signal,this.shutdownController.signal]);V(1/0,e);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=ht(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 Vm=32,Km=64,Ah=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 ih(`No handler registered for protocol ${e}`);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 ah(`Handler already registered for protocol ${e}`);let o=Yi.bind({ignoreUndefined:!0})({maxInboundStreams:Vm,maxOutboundStreams:Km},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 C("invalid topology");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.name!=="NotFoundError"&&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.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var Ih=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=_1({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??oo.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new C("Transport must have a valid tag");if(this.transports.has(t))throw new C(`There is already a transport with the tag ${t}`);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 uh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new H("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}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 Ur("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!==oo.NO_FATAL)throw new ks(`Transport (${n}) could not listen on any available address`)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===oo.FATAL_ALL)throw new ks(n);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 _t="/multistream/1.0.0";var qC=O(`
39
+ `);async function Ds(r,e,t){await r.write(e,t)}async function lb(r,e,t){await r.writeV(e,t)}async function WC(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==qC[0])throw e.log.error("Invalid mss message - missing newline",t),new ue("Missing newline");return t.sublist(0,-1)}async function Ho(r,e){let t=await WC(r,e);return F(t.subarray())}async function Qc(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return zC(r,e[0],t);let n=_n(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"]',_t,o);let s=O(`${_t}
40
40
  `),i=O(`${o}
41
- `);await Rw(n,[s,i],t),t.log.trace("select: reading multistream-select header");let a=await $o(n,t);if(t.log.trace('select: read "%s"',a),a===_t&&(t.log.trace("select: reading protocol response"),a=await $o(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 Ts(n,O(`${c}
42
- `),t),t.log.trace("select: reading protocol response");let l=await $o(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new Ho("protocol selection failed")}function OT(r,e,t){let n=r.sink.bind(r),o=r.source,s=!1,i=!1,a=Z(),c=!1,l=!1,d=Z(),u=!1,f=!1,h=Z(),p=An({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async b=>{let{sink:w}=p.unwrap();await w(async function*(){let x=!1;for await(let k of b){if(l&&await d.promise,c)yield k;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',_t,e,k.byteLength);let T=`${e}
41
+ `);await lb(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===_t&&(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 Ds(n,O(`${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 Rn("protocol selection failed")}function zC(r,e,t){let n=r.sink.bind(r),o=r.source,s=!1,i=!1,a=J(),c=!1,l=!1,d=J(),u=!1,f=!1,h=J(),p=_n({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async b=>{let{sink:w}=p.unwrap();await w(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',_t,e,T.byteLength);let k=`${e}
43
43
  `;yield new ce(Uint8Array.from([19]),O(`${_t}
44
- `),$e(T.length),O(T),k).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',_t,e,k.byteLength),c=!0,l=!1,d.resolve(),m().catch(E=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,E)})}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 g()),u||(t.log.trace("optimistic: doing read protocol for %s stream",e),await y())}finally{i=!1,s=!0,a.resolve()}}async function g(){if(l){await d.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',_t,e),await p.writeV([O(`${_t}
44
+ `),Ve(k.length),O(k),T).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',_t,e,T.byteLength),c=!0,l=!1,d.resolve(),m().catch(v=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,v)})}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 g()),u||(t.log.trace("optimistic: doing read protocol for %s stream",e),await y())}finally{i=!1,s=!0,a.resolve()}}async function g(){if(l){await d.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',_t,e),await p.writeV([O(`${_t}
45
45
  `),O(`${e}
46
- `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',_t,e)}finally{c=!0,l=!1,d.resolve()}}async function y(){if(f){await h.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let b=await $o(p,t);if(t.log.trace('optimistic: read multistream select header "%s"',b),b===_t&&(b=await $o(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',b,e),b!==e)throw new Ho("protocol selection failed")}finally{u=!0,f=!1,h.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 w=>{s||await m().catch(x=>{t.log.error("could not negotiate protocol before close read",x)}),await b(w)}}if(r.closeWrite!=null){let b=r.closeWrite.bind(r);r.closeWrite=async w=>{s||await m().catch(x=>{t.log.error("could not negotiate protocol before close write",x)}),await b(w)}}if(r.close!=null){let b=r.close.bind(r);r.close=async w=>{let x=[];l&&x.push(d.promise),f&&x.push(h.promise),x.length>0?await ke(Promise.all(x),w?.signal):(s=!0,i=!1,a.resolve()),await b(w)}}return{stream:r,protocol:e}}async function $c(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=An(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await $o(n,t);if(t.log.trace('handle: read "%s"',o),o===_t){t.log.trace('handle: respond with "%s" for "%s"',_t,o),await Ts(n,O(`${_t}
47
- `),t),t.log.trace('handle: responded with "%s" for "%s"',_t,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Ts(n,O(`${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=>Gt.single(O(`${i}
46
+ `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',_t,e)}finally{c=!0,l=!1,d.resolve()}}async function y(){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===_t&&(b=await Ho(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',b,e),b!==e)throw new Rn("protocol selection failed")}finally{u=!0,f=!1,h.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 w=>{s||await m().catch(x=>{t.log.error("could not negotiate protocol before close read",x)}),await b(w)}}if(r.closeWrite!=null){let b=r.closeWrite.bind(r);r.closeWrite=async w=>{s||await m().catch(x=>{t.log.error("could not negotiate protocol before close write",x)}),await b(w)}}if(r.close!=null){let b=r.close.bind(r);r.close=async w=>{let x=[];l&&x.push(d.promise),f&&x.push(h.promise),x.length>0?await ke(Promise.all(x),w?.signal):(s=!0,i=!1,a.resolve()),await b(w)}}return{stream:r,protocol:e}}async function Xc(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=_n(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===_t){t.log.trace('handle: respond with "%s" for "%s"',_t,o),await Ds(n,O(`${_t}
47
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',_t,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Ds(n,O(`${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=>Yt.single(O(`${i}
49
49
  `))),O(`
50
- `));t.log.trace('handle: respond with "%s" for %s',e,o),await Ts(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 Ts(n,O(`na
51
- `),t),t.log('handle: responded with "na" for "%s"',o)}}var UT=500,lm=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;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.limits=e.limits,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";[wm]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new zc("the connection is being closed");if(this.status==="closed")throw new Gc("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new Ps("Cannot open protocol stream on limited 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(UT);V(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 Dw(r){return new lm(r)}var FT=3e4;function $T(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return im}function VT(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.name!=="UnhandledProtocolError")throw n}return t.maxOutboundStreams??am}function Nw(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var hh=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;events;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.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 Oc(`The multiaddr connection is blocked by gater.${n}`)}async upgradeInbound(e,t){if(!await this.components.connectionManager.acceptIncomingConnection(e))throw new jf("connection denied");let o,s,i,a,c,l=AbortSignal.timeout(this.inboundUpgradeTimeout),d=()=>{e.abort(new ar("inbound upgrade timeout"))};l.addEventListener("abort",d,{once:!0}),V(1/0,l);try{if(await this.components.connectionGater.denyInboundConnection?.(e)===!0)throw new Oc("The multiaddr connection is blocked by gater.acceptConnection");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 to("inbound connection that skipped encryption must have a peer id");let h=Re(f);c="native",s=h}if(i=o,t?.muxerFactory!=null)a=t.muxerFactory;else if(this.streamMuxers.size>0){t?.onProgress?.(new H("upgrader:multiplex-inbound-connection"));let f=await this._multiplexInbound({...u,...o},this.streamMuxers);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,limits:t?.limits})}finally{l.removeEventListener("abort",d),this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=Re(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,{...t,remotePeer:o}));let u={...d,...s};await this.shouldBlockConnection(i,u,"denyOutboundEncryptedConnection")}else{if(o==null)throw new Qc("Encryption was skipped but no peer id was passed");c="native",i=o}if(a=s,t?.muxerFactory!=null)l=t.muxerFactory;else if(this.streamMuxers.size>0){let u=await this._multiplexOutbound({...d,...s},this.streamMuxers);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,limits:t?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:s,remotePeer:i,muxerFactory:a,limits: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:g,protocol:y}=await $c(p,m,{log:p.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",y);let b=$T(y,this.components.registrar);if(Nw(y,"inbound",u)===b){let x=new Zc(`Too many inbound protocol streams for protocol "${y}" - limit ${b}`);throw p.abort(x),x}p.source=g.source,p.sink=g.sink,p.protocol=y,g.closeWrite!=null&&(p.closeWrite=g.closeWrite),g.closeRead!=null&&(p.closeRead=g.closeRead),g.close!=null&&(p.close=g.close),await this.components.peerStore.merge(i,{protocols:[y]}),this.components.metrics?.trackProtocolStream(p,u),this._onStream({connection:u,stream:p,protocol:y})}).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 _s("Connection is not multiplexed");u.log("starting new stream for protocols %s",p);let g=await l.newStream();u.log.trace("started new stream %s for protocols %s",g.id,p);try{if(m.signal==null){g.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let k=AbortSignal.timeout(FT);V(1/0,k),m={...m,signal:k}}g.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:b}=await Fc(g,p,{...m,log:g.log,yieldBytes:!0});g.log("selected protocol %s",b);let w=VT(b,this.components.registrar,m),x=Nw(b,"outbound",u);if(x>=w){let k=new no(`Too many outbound protocol streams for protocol "${b}" - ${x}/${w}`);throw g.abort(k),k}return await this.components.peerStore.merge(i,{protocols:[b]}),g.source=y.source,g.sink=y.sink,g.protocol=b,y.closeWrite!=null&&(g.closeWrite=y.closeWrite),y.closeRead!=null&&(g.closeRead=y.closeRead),y.close!=null&&(g.close=y.close),this.components.metrics?.trackProtocolStream(g,u),g}catch(y){throw u.log.error("could not create new stream for protocols %s",p,y),g.timeline.close==null&&g.abort(y),y}},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(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 h=()=>{throw new _s("Connection is not multiplexed")};return u=Dw({remoteAddr:o.remoteAddr,remotePeer:i,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits: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.limits!=null&&i.runOnLimitedConnection!==!0)throw new Ps("Cannot open protocol stream on limited connection");s({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());e.log("handling inbound crypto protocol selection",n);try{let{stream:o,protocol:s}=await $c(e,n,{log:e.log}),i=this.connectionEncrypters.get(s);if(i==null)throw new Error(`no crypto module found for ${s}`);return e.log("encrypting inbound connection using",s),{...await i.secureInbound(o,t),protocol:s}}catch(o){throw e.log.error("encrypting inbound connection failed",o),new Mc(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());e.log("selecting outbound crypto protocol",n);try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:s}=await Fc(e,n,{log:e.log,yieldBytes:!0}),i=this.connectionEncrypters.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?.remotePeer,i),{...await i.secureOutbound(o,t),protocol:s}}catch(o){throw e.log.error("encrypting outbound connection to %p failed",t?.remotePeer,o),new Mc(o.message)}}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 Fc(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 _s(String(o))}}async _multiplexInbound(e,t){let n=Array.from(t.keys());e.log("inbound handling muxers %s",n);try{let{stream:o,protocol:s}=await $c(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 _s(String(o))}}};var ph=class extends pe{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new pe,n=t.dispatchEvent.bind(t);t.dispatchEvent=a=>{let c=n(a),l=this.dispatchEvent(new CustomEvent(a.type,{detail:a.detail}));return c||l},V(1/0,t),this.peerId=e.peerId,this.logger=e.logger??vo(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=mw({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:Of,version:Bf},logger:this.logger,events:t,datastore:e.datastore??new ms,connectionGater:yw(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",new qf(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 hh(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((a,c)=>this.configureComponent(`connection-encryption-${c}`,a(this.components))),streamMuxers:(e.streamMuxers??[]).map((a,c)=>this.configureComponent(`stream-muxers-${c}`,a(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout}),this.configureComponent("transportManager",new fh(this.components,e.transportManager)),this.configureComponent("connectionManager",new ih(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new ah(this.components,e.connectionMonitor)),this.configureComponent("registrar",new dh(this.components)),this.configureComponent("addressManager",new Wf(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 lh(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 ch(this.components,{routers:i})),this.configureComponent("randomWalk",new uh(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[Vo]!=null&&(this.log("registering service %s for peer discovery",a),l[Vo].addEventListener?.("peer",d=>{this.#e(d)}))}gw(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 er;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 C("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new C("no protocols were provided to open a 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={}){To(e)&&(e=Re(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 i=await this.peerStore.get(e);if(i.id.publicKey!=null)return i.id.publicKey}catch(i){if(i.name!=="NotFoundError")throw i}let n=Pe([O("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),s=Je(o);return await this.peerStore.patch(e,{publicKey:s}),s}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("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function Bw(r={}){r.privateKey??=await Su("Ed25519");let e=new ph({...await cw(r),peerId:U6(r.privateKey)});return r.start!==!1&&await e.start(),e}async function Ow(r){let e=r.libp2p?.privateKey,t=r.logger??vo(),n=new Le("/pkcs8/self"),o;if(e==null&&r.datastore!=null)if(o=ff(r.keychain)({datastore:r.datastore,logger:t}),r.libp2p=r.libp2p??{},await r.datastore.has(n))r.libp2p.privateKey=await o.exportKey("self");else{let a=await Su("Ed25519");r.libp2p.privateKey=a,await o.importKey("self",a)}let s=Mf(r);return s.datastore=s.datastore??r.datastore,r=r??{},await Bw({...s,...r.libp2p,start:!1})}async function KT(r={}){let e=r.datastore??new ms,t=r.blockstore??new ic,n;HT(r.libp2p)?n=r.libp2p:n=await Ow({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new Q1({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[up(),$2()],routers:[vp(n),xp()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function HT(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return Xw(qT);})();
50
+ `));t.log.trace('handle: respond with "%s" for %s',e,o),await Ds(n,s,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log.trace('handle: respond with "na" for "%s"',o),await Ds(n,O(`na
51
+ `),t),t.log('handle: responded with "na" for "%s"',o)}}var YC=500,qm=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;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.limits=e.limits,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";[Jm]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new rl("the connection is being closed");if(this.status==="closed")throw new Ls("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new Os("Cannot open protocol stream on limited 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(YC);V(1/0,t),e={...e,signal:t}}try{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.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function db(r){return new qm(r)}function jC(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return Vm}function ZC(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.name!=="UnhandledProtocolError")throw n}return t.maxOutboundStreams??Km}function fb(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var _h=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;outboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??3e3,this.outboundUpgradeTimeout=t.outboundUpgradeTimeout??3e3,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??2e3,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??2e3,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new ch(`The multiaddr connection is blocked by gater.${e}`)}async upgradeInbound(e,t={}){try{if(this.metrics.dials?.increment({inbound:!0}),!await this.components.connectionManager.acceptIncomingConnection(e))throw new lh("connection denied");return await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",t)}catch(n){throw this.metrics.errors?.increment({inbound:!0}),n}finally{this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t={}){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),o;return n!=null&&(o=Re(n),await this.shouldBlockConnection("denyOutboundConnection",o,e)),await this._performUpgrade(e,"outbound",t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,s,i,a,c,l=AbortSignal.timeout(t==="inbound"?this.inboundUpgradeTimeout:this.outboundUpgradeTimeout),d=me([l,n.signal]);V(1/0,l,d),n.signal=d,this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let u=e;if(n?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(e.log("protecting the %s connection",t),u=await f.protect(e,n))}try{if(o=u,n?.skipEncryption!==!0){n?.onProgress?.(new H(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:s,protocol:c}=await(t==="inbound"?this._encryptInbound(u,{...n,signal:d}):this._encryptOutbound(u,{...n,signal:d}));let f={...u,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",s,f)}else{let f=e.remoteAddr.getPeerId();if(f==null)throw new pn(`${t} connection that skipped encryption must have a peer id`);let h=Re(f);c="native",s=h}if(s.equals(this.components.peerId)){let f=new Bs("Can not dial self");throw e.abort(f),f}if(i=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(this.streamMuxers.size>0){n?.onProgress?.(new H(`upgrader:multiplex-${t}-connection`));let f=await(t==="inbound"?this._multiplexInbound({...u,...o},this.streamMuxers,n):this._multiplexOutbound({...u,...o},this.streamMuxers,n));a=f.muxerFactory,i=f.stream}}catch(f){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,f),f}finally{d.clear()}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",s,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:i,muxerFactory:a,remotePeer:s,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:s,remotePeer:i,muxerFactory:a,limits: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(),g=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);V(1/0,g);let{stream:y,protocol:b}=await Xc(p,m,{signal:g,log:p.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",b);let w=jC(b,this.components.registrar);if(fb(b,"inbound",u)===w){let T=new al(`Too many inbound protocol streams for protocol "${b}" - limit ${w}`);throw p.abort(T),T}p.source=y.source,p.sink=y.sink,p.protocol=b,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:[b]}),this.components.metrics?.trackProtocolStream(p,u),this._onStream({connection:u,stream:p,protocol:b})}).catch(async m=>{u.log.error("error handling incoming stream id %s - %e",p.id,m),p.timeline.close==null&&await p.close()})}}),d=async(p,m={})=>{if(l==null)throw new Cs("Connection is not multiplexed");u.log.trace("starting new stream for protocols %s",p);let g=await l.newStream();u.log.trace("started new stream %s for protocols %s",g.id,p);try{if(m.signal==null){g.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let T=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);V(1/0,T),m={...m,signal:T}}g.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:b}=await Qc(g,p,{...m,log:g.log,yieldBytes:!0});g.log.trace("selected protocol %s",b);let w=ZC(b,this.components.registrar,m),x=fb(b,"outbound",u);if(x>=w){let T=new io(`Too many outbound protocol streams for protocol "${b}" - ${x}/${w}`);throw g.abort(T),T}return await this.components.peerStore.merge(i,{protocols:[b]}),g.source=y.source,g.sink=y.sink,g.protocol=b,y.closeWrite!=null&&(g.closeWrite=y.closeWrite),y.closeRead!=null&&(g.closeRead=y.closeRead),y.close!=null&&(g.close=y.close),this.components.metrics?.trackProtocolStream(g,u),g}catch(y){throw u.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,p,y),g.timeline.close==null&&g.abort(y),y}},Promise.all([l.sink(s.source),s.sink(l.source)]).catch(p=>{u.log.error("error piping data through muxer - %e",p)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...p)=>(p[1]==="close"&&p[2]!=null&&f.close==null&&(async()=>{try{u.status==="open"&&await u.close()}catch(m){u.log.error("error closing connection after timeline close %e",m)}finally{this.events.safeDispatchEvent("connection:close",{detail:u})}})().catch(m=>{u.log.error("error thrown while dispatching connection:close event %e",m)}),Reflect.set(...p))}),o.timeline.upgraded=Date.now();let h=()=>{throw new Cs("Connection is not multiplexed")};return u=db({remoteAddr:o.remoteAddr,remotePeer:i,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:d??h,getStreams:()=>l?.streams??[],close:async p=>{await l?.close(p),await o.close(p)},abort:p=>{o.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:u}),u.__maConnTimeline=f,u}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:s,options:i}=this.components.registrar.getHandler(o);if(t.limits!=null&&i.runOnLimitedConnection!==!0)throw new Os("Cannot open protocol stream on limited connection");s({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:o,protocol:s}=await Xc(e,n,{...t,log:e.log}),i=this.connectionEncrypters.get(s);if(i==null)throw new Ps(`no crypto module found for ${s}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,s),{...await i.secureInbound(o,t),protocol:s}}catch(o){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,o),new Ps(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:s}=await Qc(e,n,{...t,log:e.log,yieldBytes:!0}),i=this.connectionEncrypters.get(s);if(i==null)throw new Ps(`no crypto module found for ${s}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,s),{...await i.secureOutbound(o,t),protocol:s}}catch(o){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,o),new Ps(o.message)}}async _multiplexOutbound(e,t,n){let o=Array.from(t.keys());e.log("outbound selecting muxer %s",o);try{e.log.trace("selecting stream muxer from %s",o);let{stream:s,protocol:i}=await Qc(e,o,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",i);let a=t.get(i);return{stream:s,muxerFactory:a}}catch(s){throw e.log.error("error multiplexing outbound connection",s),new Cs(String(s))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{let{stream:s,protocol:i}=await Xc(e,o,{...n,log:e.log}),a=t.get(i);return{stream:s,muxerFactory:a}}catch(s){throw e.log.error("error multiplexing inbound connection",s),new Cs(String(s))}}};var Th=class extends pe{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new pe,n=t.dispatchEvent.bind(t);t.dispatchEvent=a=>{let c=n(a),l=this.dispatchEvent(new CustomEvent(a.type,{detail:a.detail}));return c||l},V(1/0,t),this.peerId=e.peerId,this.logger=e.logger??Io(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=zw({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:Yf,version:Gf},logger:this.logger,events:t,datastore:e.datastore??new ys,connectionGater:Yw(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",Hw(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 _h(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((a,c)=>this.configureComponent(`connection-encryption-${c}`,a(this.components))),streamMuxers:(e.streamMuxers??[]).map((a,c)=>this.configureComponent(`stream-muxers-${c}`,a(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,outboundUpgradeTimeout:e.connectionManager?.outboundUpgradeTimeout}),this.configureComponent("transportManager",new Ih(this.components,e.transportManager)),this.configureComponent("connectionManager",new bh(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new xh(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Ah(this.components)),this.configureComponent("addressManager",new rh(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 vh(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 Eh(this.components,{routers:i})),this.configureComponent("randomWalk",new Sh(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[un]!=null&&(this.log("registering service %s for content routing",a),i.push(l[un])),l[dn]!=null&&(this.log("registering service %s for peer routing",a),s.push(l[dn])),l[qo]!=null&&(this.log("registering service %s for peer discovery",a),l[qo].addEventListener?.("peer",d=>{this.#e(d)}))}Gw(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 rr;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 C("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new C("no protocols were provided to open a 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=Re(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 i=await this.peerStore.get(e);if(i.id.publicKey!=null)return i.id.publicKey}catch(i){if(i.name!=="NotFoundError")throw i}let n=Pe([O("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),s=rt(o);return await this.peerStore.patch(e,{publicKey:s}),s}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("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function hb(r={}){r.privateKey??=await Lu("Ed25519");let e=new Th({...await Uw(r),peerId:g8(r.privateKey)});return r.start!==!1&&await e.start(),e}async function pb(r){let e=r.libp2p?.privateKey,t=r.logger??Io(),n=new De("/pkcs8/self"),o;if(e==null&&r.datastore!=null)if(o=Af(r.keychain)({datastore:r.datastore,logger:t}),r.libp2p=r.libp2p??{},await r.datastore.has(n))r.libp2p.privateKey=await o.exportKey("self");else{let a=await Lu("Ed25519");r.libp2p.privateKey=a,await o.importKey("self",a)}let s=Qf(r);return s.datastore=s.datastore??r.datastore,r=r??{},await hb({...s,...r.libp2p,start:!1})}async function JC(r={}){let e=r.datastore??new ys,t=r.blockstore??new bc,n;eP(r.libp2p)?n=r.libp2p:n=await pb({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new cd({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Hp(),yp()],routers:[t3(n),Jp()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function eP(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return kb(tP);})();
52
52
  /*! Bundled license information:
53
53
 
54
54
  pvtsutils/build/index.js: