helia 4.2.6-5ff6998 → 4.2.6-60d8c8a
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 +26 -26
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +7 -6
- package/src/index.ts +2 -1
- package/src/version.ts +1 -1
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 bb=Object.create;var Qc=Object.defineProperty;var xb=Object.getOwnPropertyDescriptor;var Eb=Object.getOwnPropertyNames;var vb=Object.getPrototypeOf,Sb=Object.prototype.hasOwnProperty;var it=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Qe=(r,e)=>{for(var t in e)Qc(r,t,{get:e[t],enumerable:!0})},Wm=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Eb(e))!Sb.call(r,o)&&o!==t&&Qc(r,o,{get:()=>e[o],enumerable:!(n=xb(e,o))||n.enumerable});return r};var kt=(r,e,t)=>(t=r!=null?bb(vb(r)):{},Wm(e||!r||!r.__esModule?Qc(t,"default",{value:r,enumerable:!0}):t,r)),Ab=r=>Wm(Qc({},"__esModule",{value:!0}),r);var X4=it(js=>{"use strict";var Tv="[object ArrayBuffer]",Fn=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===Tv}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}},q0="string",Cv=/^[0-9a-f]+$/i,Pv=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,Rv=/^[a-zA-Z0-9-_]+$/,$l=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=Fn.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=Fn.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}},Vl=class r{static isHex(e){return typeof e===q0&&Cv.test(e)}static isBase64(e){return typeof e===q0&&Pv.test(e)}static isBase64Url(e){return typeof e===q0&&Rv.test(e)}static ToString(e,t="utf8"){let n=Fn.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=Fn.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 $l.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 $l.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=Fn.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Fn.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,"")||""}};Vl.DEFAULT_UTF8_ENCODING="utf8";function Lv(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 Dv(...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 Nv(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}js.BufferSourceConverter=Fn;js.Convert=Vl;js.assign=Lv;js.combine=Dv;js.isEqual=Nv});var m8=it((Ha,Ou)=>{(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,v=0,S=0,_=597399067,$=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,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,k=o(k,_),k=s(k,15),k=o(k,$),y^=k,y=s(y,19),y+=b,y=o(y,5)+1444728091,T=o(T,$),T=s(T,16),T=o(T,N),b^=T,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(k=0,T=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: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,$),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,$),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],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,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[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,T),x=l(x,33),x=c(x,k),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,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 Ha<"u"?(typeof Ou<"u"&&Ou.exports&&(Ha=Ou.exports=t),Ha.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)})(Ha)});var Mu=it((kO,g8)=>{g8.exports=m8()});var S8=it((WM,m2)=>{"use strict";var TS=Object.prototype.hasOwnProperty,Ut="~";function Ya(){}Object.create&&(Ya.prototype=Object.create(null),new Ya().__proto__||(Ut=!1));function CS(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function v8(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new CS(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 zu(r,e){--r._eventsCount===0?r._events=new Ya:delete r._events[e]}function Dt(){this._events=new Ya,this._eventsCount=0}Dt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)TS.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 v8(this,e,t,n,!1)};Dt.prototype.once=function(e,t,n){return v8(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 zu(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&zu(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:zu(this,s)}return this};Dt.prototype.removeAllListeners=function(e){var t;return e?(t=Ut?Ut+e:e,this._events[t]&&zu(this,t)):(this._events=new Ya,this._eventsCount=0),this};Dt.prototype.off=Dt.prototype.removeListener;Dt.prototype.addListener=Dt.prototype.on;Dt.prefixed=Ut;Dt.EventEmitter=Dt;typeof m2<"u"&&(m2.exports=Dt)});var E2=it((pU,k8)=>{k8.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 pg=it(ac=>{(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}(),ac.ip2long=i,ac.long2ip=a,ac.Netmask=r}).call(ac)});var z1=it((Eq,Fp)=>{var xq=function(){typeof Fp<"u"&&(Fp.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,L=1970+(B-1970)%400;return $.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 $.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 T($.getUTCHours())},L:function(){return v($.getUTCMilliseconds(),3)},M:function(){return T($.getUTCMinutes())},N:function(){return v(_.getNano(),9)},S:function(){return T($.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 T($.getUTCDate())},e:function(){return function(M){return(9<M?"":" ")+(0|M)}($.getUTCDate())},m:function(){return T($.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,_,$){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,L=S.nano,D=((L<0||a<=L)&&(L-=($=Math.floor(L/a))*a,B+=$,$=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),$=1),$&&(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 $=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(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+$]=A>>8&255,D[I+N]=255&A}}function x(S,_,$,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+$]<<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 v(S,_){return(c+(0|S)).substr(-_)}}()});var C9=it((ZZ,T9)=>{function fk(){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)}T9.exports=fk});var uy=it((_ne,ly)=>{"use strict";ly.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var gy=it((py,my)=>{"use strict";var wf=uy(),{hasOwnProperty:fy}=Object.prototype,{propertyIsEnumerable:zk}=Object,Ki=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),Gk=py,dy={concatArrays:!1,ignoreUndefined:!1},bf=r=>{let e=[];for(let t in r)fy.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)zk.call(r,n)&&e.push(n)}return e};function Hi(r){return Array.isArray(r)?Yk(r):wf(r)?Qk(r):r}function Yk(r){let e=r.slice(0,0);return bf(r).forEach(t=>{Ki(e,t,Hi(r[t]))}),e}function Qk(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return bf(r).forEach(t=>{Ki(e,t,Hi(r[t]))}),e}var hy=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Ki(r,o,Y3(r[o],e[o],n)):Ki(r,o,Hi(e[o])))}),r),Xk=(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++)fy.call(s,a)&&(i.push(String(a)),s===r?Ki(n,o++,s[a]):Ki(n,o++,Hi(s[a])));n=hy(n,s,bf(s).filter(a=>!i.includes(a)),t)}),n};function Y3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?Xk(r,e,t):!wf(e)||!wf(r)?Hi(e):hy(r,e,bf(e),t)}my.exports=function(...r){let e=Y3(Hi(dy),this!==Gk&&this||{},dy),t={_:{}};for(let n of r)if(n!==void 0){if(!wf(n))throw new TypeError("`"+n+"` is not an Option Object");t=Y3(t,{_:n},e)}return t._}});var by=it((Tne,wy)=>{"use strict";function jk(r){return r>=55296&&r<=56319}function Zk(r){return r>=56320&&r<=57343}wy.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],jk(i)&&Zk(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 Ey=it((Cne,xy)=>{"use strict";function Jk(r){return r>=55296&&r<=56319}function eT(r){return r>=56320&&r<=57343}xy.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),eT(o)?s!=null&&Jk(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 Sy=it((Pne,vy)=>{"use strict";var tT=by(),rT=Ey();vy.exports=tT.bind(null,rT)});var _y=it((Rne,Iy)=>{"use strict";var nT=Sy(),oT=/[\/\?<>\\:\*\|"]/g,sT=/[\x00-\x1f\x80-\x9f]/g,iT=/^\.+$/,aT=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,cT=/[\. ]+$/;function Ay(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(oT,e).replace(sT,e).replace(iT,e).replace(aT,e).replace(cT,e);return nT(t,255)}Iy.exports=function(r,e){var t=e&&e.replacement||"",n=Ay(r,t);return t===""?n:Ay(n,"")}});var fw=it(Hf=>{"use strict";Object.defineProperty(Hf,"__esModule",{value:!0});var fm=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}))}}},Kf=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new fm;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)}};Hf.EventIterator=Kf;Hf.default=Kf});var hw=it($c=>{"use strict";Object.defineProperty($c,"__esModule",{value:!0});var hm=fw();$c.EventIterator=hm.EventIterator;function iC(r,e,t){return new hm.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}$c.subscribe=iC;$c.default=hm.EventIterator});var Zw=it((fue,jw)=>{function Mr(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))}jw.exports=Mr;Mr.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};Mr.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};Mr.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};Mr.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)};Mr.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Mr.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Mr.prototype.start=Mr.prototype.try;Mr.prototype.errors=function(){return this._errors};Mr.prototype.attempts=function(){return this._attempts};Mr.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 Jw=it(Cs=>{var TC=Zw();Cs.operation=function(r){var e=Cs.timeouts(r);return new TC(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};Cs.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};Cs.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};Cs.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=Cs.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 tb=it((pue,eb)=>{eb.exports=Jw()});var QC={};Qe(QC,{DEFAULT_SESSION_MAX_PROVIDERS:()=>M2,DEFAULT_SESSION_MIN_PROVIDERS:()=>O2,InsufficientProvidersError:()=>rc,NoRoutersAvailableError:()=>ko,UnknownCodecError:()=>oc,UnknownHashAlgorithmError:()=>nc,createHelia:()=>GC,libp2pDefaults:()=>Gf});var zm=Symbol.for("@libp2p/connection");var un=Symbol.for("@libp2p/content-routing");var Ho=Symbol.for("@libp2p/peer-discovery");var Xc=Symbol.for("@libp2p/peer-id");function jc(r){return!!r?.[Xc]}var dn=Symbol.for("@libp2p/peer-routing");var _h="keep-alive";var fn=Symbol.for("@libp2p/transport");var ro;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ro||(ro={}));var ht=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},Zc=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},Jc=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"}},ra=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var el=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},tl=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},Rs=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"}},rl=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},qo=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"}},nl=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},no=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"}},oo=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Wo=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"}},na=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},cr=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 Rn=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},sl=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},Ls=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},il=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},so=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 al(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function Ht(...r){let e=[];for(let t of r)al(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)al(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 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 J(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var cl=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}},Ds=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new cl(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 cl(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 kh=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 Ib(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 Ib(r,e){e=e??{};let t=e.onEnd,n=new Ds,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 Ds,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 Ds,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 kh)},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 Th=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 lr(r,e,t,n){let o=new Th(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 ll=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 ll(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new ll(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 ul=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 ht)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function _b(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var dl=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=_b(),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 ht),this.cleanup())}async join(e={}){let t=new ul(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 ur=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 dl(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 ht)}),this.clear()}async onEmpty(e){this.size!==0&&await lr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await lr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await lr(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 ht("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 ur{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function kb(r){return r[Symbol.asyncIterator]!=null}function Tb(r){if(kb(r))return(async()=>{for await(let e of r);})();for(let e of r);}var zt=Tb;function ie(r=0){return new Uint8Array(r)}function We(r=0){return new Uint8Array(r)}var Cb=Math.pow(2,7),Pb=Math.pow(2,14),Rb=Math.pow(2,21),Ch=Math.pow(2,28),Ph=Math.pow(2,35),Rh=Math.pow(2,42),Lh=Math.pow(2,49),_e=128,Ct=127;function he(r){if(r<Cb)return 1;if(r<Pb)return 2;if(r<Rb)return 3;if(r<Ch)return 4;if(r<Ph)return 5;if(r<Rh)return 6;if(r<Lh)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Dh(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 Lb(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 Nh(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)*Ch,t<_e)||(t=r[e+5],n+=(t&Ct)*Ph,t<_e)||(t=r[e+6],n+=(t&Ct)*Rh,t<_e)||(t=r[e+7],n+=(t&Ct)*Lh,t<_e))return n;throw new RangeError("Could not decode varint")}function Db(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)*Ch,t<_e)||(t=r.get(e+5),n+=(t&Ct)*Ph,t<_e)||(t=r.get(e+6),n+=(t&Ct)*Rh,t<_e)||(t=r.get(e+7),n+=(t&Ct)*Lh,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?Dh(r,e,t):Lb(r,e,t)}function Bt(r,e=0){return r instanceof Uint8Array?Nh(r,e):Db(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 Ym=Symbol.for("@achingbrain/uint8arraylist");function Gm(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 fl(r){return!!r?.[Ym]}var ce=class r{bufs;length;[Ym]=!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(fl(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(fl(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=Gm(this.bufs,e);return t.buf[t.index]}set(e,t){let n=Gm(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(fl(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(!fl(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 hl(r){return r[Symbol.asyncIterator]!=null}var pl=r=>{let e=he(r),t=We(e);return $e(r,t),pl.bytes=e,t};pl.bytes=0;function Gt(r,e){e=e??{};let t=e.lengthEncoder??pl;function*n(o){let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return hl(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??pl;return new ce(t(r.byteLength),r)};var ml=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},gl=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},yl=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},oa=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var Bb=8,Ob=1024*1024*4,zo;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(zo||(zo={}));var Bh=r=>{let e=Bt(r);return Bh.bytes=he(e),e};Bh.bytes=0;function Yt(r,e){let t=new ce,n=zo.LENGTH,o=-1,s=e?.lengthDecoder??Bh,i=e?.maxLengthLength??Bb,a=e?.maxDataLength??Ob;function*c(){for(;t.byteLength>0;){if(n===zo.LENGTH)try{if(o=s(t),o<0)throw new ml("Invalid message length");if(o>a)throw new gl("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 yl("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 hl(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new oa("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new oa("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 Mb(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 Ns=Mb;function Ub(r){return r[Symbol.asyncIterator]!=null}function Fb(r,e){let t=0;if(Ub(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Ns(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=Fb;function $b(r){return r[Symbol.asyncIterator]!=null}function Vb(...r){let e=[];for(let t of r)$b(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=Vb;function Ve(r,...e){if(r==null)throw new Error("Empty pipeline");if(Oh(r)){let n=r;r=()=>n.source}else if(Xm(r)||Qm(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Oh(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++)Oh(t[n])&&(t[n]=Hb(t[n]));return Kb(...t)}var Kb=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},Qm=r=>r?.[Symbol.asyncIterator]!=null,Xm=r=>r?.[Symbol.iterator]!=null,Oh=r=>r==null?!1:r.sink!=null&&r.source!=null,Hb=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(Qm(s))o=async function*(){yield*s,n.end()};else if(Xm(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 qb(r){return r[Symbol.asyncIterator]!=null}function Wb(r,e){return qb(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 io=Wb;var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var sa="/ipfs/bitswap/1.2.0";var Mh=new Float32Array([-0]),ao=new Uint8Array(Mh.buffer);function jm(r,e,t){Mh[0]=r,e[t]=ao[0],e[t+1]=ao[1],e[t+2]=ao[2],e[t+3]=ao[3]}function Zm(r,e){return ao[0]=r[e],ao[1]=r[e+1],ao[2]=r[e+2],ao[3]=r[e+3],Mh[0]}var Uh=new Float64Array([-0]),Pt=new Uint8Array(Uh.buffer);function Jm(r,e,t){Uh[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 e4(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],Uh[0]}var zb=BigInt(Number.MAX_SAFE_INTEGER),Gb=BigInt(Number.MIN_SAFE_INTEGER),dr=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<zb&&e>Gb)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>t4&&(o=0n,++n>t4&&(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 dr(0,0);Go.toBigInt=function(){return 0n};Go.zzEncode=Go.zzDecode=function(){return this};Go.length=function(){return 1};var t4=4294967296n;function r4(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 n4(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 Fh(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 bl(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var $h=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 bl(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Vr(this,4);return bl(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Vr(this,4);let e=Zm(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Vr(this,4);let e=e4(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 n4(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 dr(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=bl(this.buf,this.pos+=4),t=bl(this.buf,this.pos+=4);return new dr(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=Nh(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 Vh(r){return new $h(r instanceof Uint8Array?r:r.subarray())}function re(r,e,t){let n=Vh(r);return e.decode(n,void 0,t)}var Gh={};Qe(Gh,{base10:()=>Jb});var HR=new Uint8Array(0);function s4(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 i4(r){return new TextEncoder().encode(r)}function a4(r){return new TextDecoder().decode(r)}function Yb(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,v=w-1;(k!==0||T<g)&&v!==-1;v--,T++)k+=256*x[v]>>>0,x[v]=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 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 Qb=Yb,Xb=Qb,c4=Xb;var Hh=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")}},qh=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 l4(this,e)}},Wh=class{decoders;constructor(e){this.decoders=e}or(e){return l4(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 l4(r,e){return new Wh({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var zh=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 Hh(e,t,n),this.decoder=new qh(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Bs({name:r,prefix:e,encode:t,decode:n}){return new zh(r,e,t,n)}function co({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=c4(t,r);return Bs({prefix:e,name:r,encode:n,decode:s=>Kr(o(s))})}function jb(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 Zb(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 Xe({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Bs({prefix:e,name:r,encode(o){return Zb(o,n,t)},decode(o){return jb(o,n,t,r)}})}var Jb=co({prefix:"9",name:"base10",alphabet:"0123456789"});var Yh={};Qe(Yh,{base16:()=>ex,base16upper:()=>tx});var ex=Xe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),tx=Xe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Qh={};Qe(Qh,{base2:()=>rx});var rx=Xe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Xh={};Qe(Xh,{base256emoji:()=>ax});var u4=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}"),nx=u4.reduce((r,e,t)=>(r[t]=e,r),[]),ox=u4.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function sx(r){return r.reduce((e,t)=>(e+=nx[t],e),"")}function ix(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=ox[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var ax=Bs({prefix:"\u{1F680}",name:"base256emoji",encode:sx,decode:ix});var jh={};Qe(jh,{base32:()=>at,base32hex:()=>dx,base32hexpad:()=>hx,base32hexpadupper:()=>px,base32hexupper:()=>fx,base32pad:()=>lx,base32padupper:()=>ux,base32upper:()=>cx,base32z:()=>mx});var at=Xe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),cx=Xe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),lx=Xe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),ux=Xe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),dx=Xe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),fx=Xe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),hx=Xe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),px=Xe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),mx=Xe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Zh={};Qe(Zh,{base36:()=>pn,base36upper:()=>gx});var pn=co({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),gx=co({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Jh={};Qe(Jh,{base58btc:()=>Ee,base58flickr:()=>yx});var Ee=co({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),yx=co({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var t0={};Qe(t0,{base64:()=>nt,base64pad:()=>wx,base64url:()=>e0,base64urlpad:()=>bx});var nt=Xe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),wx=Xe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),e0=Xe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),bx=Xe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var r0={};Qe(r0,{base8:()=>xx});var xx=Xe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var n0={};Qe(n0,{identity:()=>Ex});var Ex=Bs({prefix:"\0",name:"identity",encode:r=>a4(r),decode:r=>i4(r)});var xl={};Qe(xl,{code:()=>o0,decode:()=>_x,encode:()=>Ix,name:()=>Ax});var vx=new TextEncoder,Sx=new TextDecoder,Ax="json",o0=512;function Ix(r){return vx.encode(JSON.stringify(r))}function _x(r){return JSON.parse(Sx.decode(r))}var aa={};Qe(aa,{code:()=>ia,decode:()=>Cx,encode:()=>Tx,name:()=>kx});var kx="raw",ia=85;function Tx(r){return Kr(r)}function Cx(r){return Kr(r)}var a0={};Qe(a0,{identity:()=>jt});var ze={};Qe(ze,{Digest:()=>Yo,create:()=>Xt,decode:()=>Te,equals:()=>i0,hasCode:()=>Yx});var Px=h4,d4=128,Rx=127,Lx=~Rx,Dx=Math.pow(2,31);function h4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Dx;)e[t++]=r&255|d4,r/=128;for(;r&Lx;)e[t++]=r&255|d4,r>>>=7;return e[t]=r|0,h4.bytes=t-n+1,e}var Nx=s0,Bx=128,f4=127;function s0(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw s0.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&f4)<<o:(i&f4)*Math.pow(2,o),o+=7}while(i>=Bx);return s0.bytes=s-n,t}var Ox=Math.pow(2,7),Mx=Math.pow(2,14),Ux=Math.pow(2,21),Fx=Math.pow(2,28),$x=Math.pow(2,35),Vx=Math.pow(2,42),Kx=Math.pow(2,49),Hx=Math.pow(2,56),qx=Math.pow(2,63),Wx=function(r){return r<Ox?1:r<Mx?2:r<Ux?3:r<Fx?4:r<$x?5:r<Vx?6:r<Kx?7:r<Hx?8:r<qx?9:10},zx={encode:Px,decode:Nx,encodingLength:Wx},Gx=zx,ca=Gx;function la(r,e=0){return[ca.decode(r,e),ca.decode.bytes]}function Os(r,e,t=0){return ca.encode(r,e,t),e}function Ms(r){return ca.encodingLength(r)}function Xt(r,e){let t=e.byteLength,n=Ms(r),o=n+Ms(t),s=new Uint8Array(o+t);return Os(r,s,0),Os(t,s,n),s.set(e,o),new Yo(r,t,e,s)}function Te(r){let e=Kr(r),[t,n]=la(e),[o,s]=la(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 i0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&s4(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 Yx(r,e){return r.code===e}var p4=0,Qx="identity",m4=Kr;function Xx(r){return Xt(p4,m4(r))}var jt={code:p4,name:Qx,encode:m4,digest:Xx};var u0={};Qe(u0,{sha256:()=>ct,sha512:()=>vl});function l0({name:r,code:e,encode:t}){return new c0(r,e,t)}var c0=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 y4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var ct=l0({name:"sha2-256",code:18,encode:y4("SHA-256")}),vl=l0({name:"sha2-512",code:19,encode:y4("SHA-512")});function w4(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return Zx(t,d0(r),e??Ee.encoder);default:return Jx(t,d0(r),e??at.encoder)}}var b4=new WeakMap;function d0(r){let e=b4.get(r);if(e==null){let t=new Map;return b4.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!==ua)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==eE)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&&i0(e.multihash,n.multihash)}toString(e){return w4(this,e)}toJSON(){return{"/":w4(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??x4(n,o,s.bytes))}else if(t[tE]===!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!==ua)throw new Error(`Version 0 CID must use dag-pb (code: ${ua}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=x4(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ua,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]=la(e.subarray(t));return t+=f,u},o=n(),s=ua;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]=jx(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 d0(s).set(n,e),s}};function jx(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 at.prefix:{let t=e??at;return[at.prefix,t.decode(r)]}case pn.prefix:{let t=e??pn;return[pn.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 Zx(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 Jx(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 ua=112,eE=18;function x4(r,e,t){let n=Ms(r),o=n+Ms(e),s=new Uint8Array(o+t.byteLength);return Os(r,s,0),Os(e,s,n),s.set(t,o),s}var tE=Symbol.for("@ipld/js-cid/CID");var Dn={...n0,...Qh,...r0,...Gh,...Yh,...jh,...Zh,...Jh,...t0,...Xh},_L={...u0,...a0};function v4(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var E4=v4("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),f0=v4("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}),rE={utf8:E4,"utf-8":E4,hex:Dn.base16,latin1:f0,ascii:f0,binary:f0,...Dn},Sl=rE;function O(r,e="utf8"){let t=Sl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function h0(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 p0(){}var g0=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},nE=h0();function oE(r){return globalThis.Buffer!=null?We(r):nE(r)}var fa=class{len;head;tail;states;constructor(){this.len=0,this.head=new Qo(p0,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 y0((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(Al,10,dr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=dr.fromBigInt(e);return this._push(Al,t.length(),t)}uint64Number(e){return this._push(Dh,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=dr.fromBigInt(e).zzEncode();return this._push(Al,t.length(),t)}sint64Number(e){let t=dr.fromNumber(e).zzEncode();return this._push(Al,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(m0,1,e?1:0)}fixed32(e){return this._push(da,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=dr.fromBigInt(e);return this._push(da,4,t.lo)._push(da,4,t.hi)}fixed64Number(e){let t=dr.fromNumber(e);return this._push(da,4,t.lo)._push(da,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(jm,4,e)}double(e){return this._push(Jm,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(m0,1,0):this.uint32(t)._push(iE,t,e)}string(e){let t=r4(e);return t!==0?this.uint32(t)._push(Fh,t,e):this._push(m0,1,0)}fork(){return this.states=new g0(this),this.head=this.tail=new Qo(p0,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(p0,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=oE(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function m0(r,e,t){e[t]=r&255}function sE(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var y0=class extends Qo{next;constructor(e,t){super(sE,e,t),this.next=void 0}};function Al(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 da(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 iE(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(fa.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(aE,e,r),this},fa.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(cE,e,r),this});function aE(r,e,t){e.set(r,t)}function cE(r,e,t){r.length<40?Fh(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(O(r),t)}function w0(){return new fa}function ne(r,e){let t=w0();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Us;(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"})(Us||(Us={}));function Il(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 Il("enum",Us.VARINT,t,n)}function oe(r,e){return Il("message",Us.LENGTH_DELIMITED,r,e)}var Oe=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},ha=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Ze;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Ze||(Ze={}));var b0;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(b0||(b0={}));(function(r){r.codec=()=>Ke(b0)})(Ze||(Ze={}));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.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),Ze.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=Ze.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)})(Fs||(Fs={}));var _l;(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),Fs.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(Fs.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)})(_l||(_l={}));var $s;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={prefix: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)})($s||($s={}));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 Vs;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.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)})(Vs||(Vs={}));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),_l.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),$s.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),Vs.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=_l.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($s.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&s.blockPresences.length===o.limits.blockPresences)throw new Oe('Decode error - map field "blockPresences" had too many elements');s.blockPresences.push(Vs.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 S4(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 Tl=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var lE=4193648,uE=lE+16;function*A4(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}=x0(o,l.blocks,a,e,d,dE);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=x0(n,l.blockPresences,i,e,d,fE)),i+=u,d=h;let m=f;if({added:u,hasMore:f,newSize:h}=x0(t,l.wantlist.entries,s,e,d,hE),s+=u,d=h,c=!p&&!m&&!f,c||(l.wantlist.full=!1),yield Xo.encode(l),c)break}}function x0(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>uE)throw new Tl("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 dE(r){return E0(3,$s.encode(r))}function fE(r){return E0(4,Vs.encode(r))}function hE(r){return E0(1,Fs.encode(r))}function E0(r,e){let t=he(r),n=he(e.byteLength);return t+n+e.byteLength}var Cl=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??[sa],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 cr(`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=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 zt(Qt(io(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=S4(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,sa,s);await a.closeRead();try{await Ve(A4(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 Ur("Network isn't running");t?.onProgress?.(new H("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),lr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(sa))return!0;throw new Wo(`${e} did not support ${sa}`)}})]);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 lo(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function vE(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Ks(r,...e){if(!vE(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");lo(r.outputLen),lo(r.blockLen)}function Hs(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 I4(r,e){Ks(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,Pl=(r,e)=>r<<e|r>>>32-e>>>0,TD=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var SE=async()=>{};async function _4(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 SE(),n+=s)}}function k4(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=k4(r)),Ks(r),r}function v0(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Ks(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 qs=class{clone(){return this._cloneInto()}},AE={}.toString;function T4(r,e){if(e!==void 0&&AE.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Ws(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 IE(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 Rl=(r,e,t)=>r&e^~r&t,Ll=(r,e,t)=>r&e^r&t^e&t,uo=class extends qs{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){Hs(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){Hs(this),I4(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;IE(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 Dl=BigInt(4294967295),S0=BigInt(32);function C4(r,e=!1){return e?{h:Number(r&Dl),l:Number(r>>S0&Dl)}:{h:Number(r>>S0&Dl)|0,l:Number(r&Dl)|0}}function _E(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}=C4(r[o],e);[t[o],n[o]]=[s,i]}return[t,n]}var kE=(r,e)=>BigInt(r>>>0)<<S0|BigInt(e>>>0),TE=(r,e,t)=>r>>>t,CE=(r,e,t)=>r<<32-t|e>>>t,PE=(r,e,t)=>r>>>t|e<<32-t,RE=(r,e,t)=>r<<32-t|e>>>t,LE=(r,e,t)=>r<<64-t|e>>>t-32,DE=(r,e,t)=>r>>>t-32|e<<64-t,NE=(r,e)=>e,BE=(r,e)=>r,OE=(r,e,t)=>r<<t|e>>>32-t,ME=(r,e,t)=>e<<t|r>>>32-t,UE=(r,e,t)=>e<<t-32|r>>>64-t,FE=(r,e,t)=>r<<t-32|e>>>64-t;function $E(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var VE=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),KE=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,HE=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),qE=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,WE=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),zE=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var GE={fromBig:C4,split:_E,toBig:kE,shrSH:TE,shrSL:CE,rotrSH:PE,rotrSL:RE,rotrBH:LE,rotrBL:DE,rotr32H:NE,rotr32L:BE,rotlSH:OE,rotlSL:ME,rotlBH:UE,rotlBL:FE,add:$E,add3L:VE,add3H:KE,add4L:HE,add4H:qE,add5H:zE,add5L:WE},de=GE;var[YE,QE]=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))),fo=new Uint32Array(80),ho=new Uint32Array(80),A0=class extends uo{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)fo[w]=e.getUint32(t),ho[w]=e.getUint32(t+=4);for(let w=16;w<80;w++){let x=fo[w-15]|0,k=ho[w-15]|0,T=de.rotrSH(x,k,1)^de.rotrSH(x,k,8)^de.shrSH(x,k,7),v=de.rotrSL(x,k,1)^de.rotrSL(x,k,8)^de.shrSL(x,k,7),S=fo[w-2]|0,_=ho[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,ho[w-7],ho[w-16]),B=de.add4H(M,T,$,fo[w-7],fo[w-16]);fo[w]=B|0,ho[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,v=f&p^~f&g,S=de.add5L(b,k,v,QE[w],ho[w]),_=de.add5H(S,y,x,T,YE[w],fo[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,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,$|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let D=de.add3L($,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(){fo.fill(0),ho.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 po=Ws(()=>new A0);var Bl={};Qe(Bl,{aInRange:()=>wt,abool:()=>Wr,abytes:()=>zs,bitGet:()=>tv,bitLen:()=>C0,bitMask:()=>ma,bitSet:()=>rv,bytesToHex:()=>Bn,bytesToNumberBE:()=>On,bytesToNumberLE:()=>zr,concatBytes:()=>Un,createHmacDrbg:()=>P0,ensureBytes:()=>Me,equalBytes:()=>JE,hexToBytes:()=>rs,hexToNumber:()=>T0,inRange:()=>pa,isBytes:()=>mo,memoized:()=>ns,notImplemented:()=>ov,numberToBytesBE:()=>go,numberToBytesLE:()=>Mn,numberToHexUnpadded:()=>ts,numberToVarBytesBE:()=>ZE,utf8ToBytes:()=>ev,validateObject:()=>vr});var k0=BigInt(0),Nl=BigInt(1),XE=BigInt(2);function mo(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function zs(r){if(!mo(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 jE=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Bn(r){zs(r);let e="";for(let t=0;t<r.length;t++)e+=jE[r[t]];return e}function ts(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function T0(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var Nn={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function P4(r){if(r>=Nn._0&&r<=Nn._9)return r-Nn._0;if(r>=Nn._A&&r<=Nn._F)return r-(Nn._A-10);if(r>=Nn._a&&r<=Nn._f)return r-(Nn._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=P4(r.charCodeAt(s)),a=P4(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 On(r){return T0(Bn(r))}function zr(r){return zs(r),T0(Bn(Uint8Array.from(r).reverse()))}function go(r,e){return rs(r.toString(16).padStart(e*2,"0"))}function Mn(r,e){return go(r,e).reverse()}function ZE(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(mo(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 Un(...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}function JE(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 ev(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}var I0=r=>typeof r=="bigint"&&k0<=r;function pa(r,e,t){return I0(r)&&I0(e)&&I0(t)&&e<=r&&r<t}function wt(r,e,t,n){if(!pa(e,t,n))throw new Error(`expected valid ${r}: ${t} <= n < ${n}, got ${typeof e} ${e}`)}function C0(r){let e;for(e=0;r>k0;r>>=Nl,e+=1);return e}function tv(r,e){return r>>BigInt(e)&Nl}function rv(r,e,t){return r|(t?Nl:k0)<<BigInt(e)}var ma=r=>(XE<<BigInt(r-1))-Nl,_0=r=>new Uint8Array(r),R4=r=>Uint8Array.from(r);function P0(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=_0(r),o=_0(r),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...u)=>t(o,n,...u),c=(u=_0())=>{o=a(R4([0]),u),n=a(),u.length!==0&&(o=a(R4([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 Un(...f)};return(u,f)=>{i(),c(u);let h;for(;!(h=f(l()));)c();return i(),h}}var nv={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"||mo(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=nv[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 ov=()=>{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 lt=BigInt(0),He=BigInt(1),os=BigInt(2),sv=BigInt(3),R0=BigInt(4),L4=BigInt(5),D4=BigInt(8),iv=BigInt(9),av=BigInt(16);function Ae(r,e){let t=r%e;return t>=lt?t:e+t}function L0(r,e,t){if(t<=lt||e<lt)throw new Error("Expected power/modulo > 0");if(t===He)return lt;let n=He;for(;e>lt;)e&He&&(n=n*r%t),r=r*r%t,e>>=He;return n}function Ue(r,e,t){let n=r;for(;e-- >lt;)n*=n,n%=t;return n}function Ol(r,e){if(r===lt||e<=lt)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=Ae(r,e),n=e,o=lt,s=He,i=He,a=lt;for(;t!==lt;){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 cv(r){let e=(r-He)/os,t,n,o;for(t=r-He,n=0;t%os===lt;t/=os,n++);for(o=os;o<r&&L0(o,e,r)!==r-He;o++);if(n===1){let i=(r+He)/R0;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 lv(r){if(r%R0===sv){let e=(r+He)/R0;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%D4===L4){let e=(r-L4)/D4;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%av,cv(r)}var N4=(r,e)=>(Ae(r,e)&He)===He,uv=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function D0(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=uv.reduce((n,o)=>(n[o]="function",n),e);return vr(r,t)}function dv(r,e,t){if(t<lt)throw new Error("Expected power > 0");if(t===lt)return r.ONE;if(t===He)return e;let n=r.ONE,o=e;for(;t>lt;)t&He&&(n=r.mul(n,o)),o=r.sqr(o),t>>=He;return n}function fv(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 N0(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function yo(r,e,t=!1,n={}){if(r<=lt)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:s}=N0(r,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=lv(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:s,MASK:ma(o),ZERO:lt,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 lt<=c&&c<r},is0:c=>c===lt,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)=>dv(a,c,l),div:(c,l)=>Ae(c*Ol(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Ol(c,r),sqrt:n.sqrt||(c=>i(a,c)),invertBatch:c=>fv(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?Mn(c,s):go(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return t?zr(c):On(c)}});return Object.freeze(a)}function B4(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 B0(r){let e=B4(r);return e+Math.ceil(e/2)}function O4(r,e,t=!1){let n=r.length,o=B4(e),s=B0(e);if(n<16||n<s||n>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let i=t?On(r):zr(r),a=Ae(i,e-He)+He;return t?Mn(a,o):go(a,o)}var pv=BigInt(0),O0=BigInt(1),M0=new WeakMap,M4=new WeakMap;function Ml(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>pv;)i&O0&&(a=a.add(c)),c=c.double(),i>>=O0;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+=O0);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=M4.get(s)||1,l=M0.get(s);return l||(l=this.precomputeWindow(s,c),c!==1&&M0.set(s,a(l))),this.wNAF(c,l,i)},setWindowSize(s,i){n(i),M4.set(s,i),M0.delete(s)}}}function Ul(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=C0(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 ga(r){return D0(r.Fp),vr(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...N0(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Gr=BigInt(0),Zt=BigInt(1),Fl=BigInt(2),mv=BigInt(8),gv={zip215:!0};function yv(r){let e=ga(r);return vr(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function U4(r){let e=yv(r),{Fp:t,n,prehash:o,hash:s,randomBytes:i,nByteLength:a,h:c}=e,l=Fl<<BigInt(a*8)-Zt,d=t.create,u=yo(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=ns((I,A)=>{let{ex:R,ey:P,ez:q}=I,z=I.is0();A==null&&(A=z?mv:t.inv(q));let j=d(R*A),ae=d(P*A),le=d(q*A);if(z)return{x:Gr,y:Zt};if(le!==Zt)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),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),st=d(z*j);if(Nt!==st)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,Zt,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 Ul(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(Fl*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),st=d(De*Fe),Kt=d(be*Fe),Cn=d(Ne*De);return new w(Nt,st,Cn,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)),Fm=d((z+q)*(fe-le)),Ih=d(Fm-Um);if(Ih===Gr)return this.double();let $m=d(j*Fl*De),Vm=d(ae*Fl*be),Km=Vm+$m,Hm=Fm+Um,qm=Vm-$m,mb=d(Km*Ih),gb=d(Hm*qm),yb=d(Km*qm),wb=d(Ih*Hm);return new w(mb,gb,wb,yb)}let Ne=d(q*le),Fe=d(z*fe),Nt=d(ae*P*De),st=d(j*be),Kt=d((q+z)*(le+fe)-Ne-Fe),Cn=st-Nt,ea=st+Nt,ta=d(Fe-R*Ne),db=d(Kt*Cn),fb=d(ea*ta),hb=d(Kt*ta),pb=d(Cn*ea);return new w(db,fb,pb,hb)}subtract(A){return this.add(A.negate())}wNAF(A){return T.wNAFCached(this,A,w.normalizeZ)}multiply(A){let R=A;wt("scalar",R,Zt,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===Zt?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===Zt?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-Zt),Ne=d(P*be-q),{isValid:Fe,value:Nt}=f(De,Ne);if(!Fe)throw new Error("Point.fromHex: invalid y coordinate");let st=(Nt&Zt)===Zt,Kt=(ae&128)!==0;if(!R&&Nt===Gr&&Kt)throw new Error("Point.fromHex: x=0 and x_0=1");return Kt!==st&&(Nt=d(-Nt)),w.fromAffine({x:Nt,y:le})}static fromPrivateKey(A){return _(A).point}toRawBytes(){let{x:A,y:R}=this.toAffine(),P=Mn(R,t.BYTES);return P[P.length-1]|=A&Zt?128:0,P}toHex(){return Bn(this.toRawBytes())}}w.BASE=new w(e.Gx,e.Gy,Zt,d(e.Gx*e.Gy)),w.ZERO=new w(Gr,Zt,Zt,Gr);let{BASE:x,ZERO:k}=w,T=Ml(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=Un(...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);wt("signature.s",fe,Gr,n);let be=Un(ae,Mn(fe,t.BYTES));return Me("result",be,a*2)}let B=gv;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:$,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 Gs=BigInt(0),U0=BigInt(1);function wv(r){return vr(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function F4(r){let e=wv(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=>L0(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,Gs,t),wt("scalar",w,Gs,t);let x=w,k=b,T=U0,v=Gs,S=b,_=U0,$=Gs,N;for(let B=BigInt(o-1);B>=Gs;B--){let L=x>>B&U0;$^=L,N=l($,T,S),T=N[0],S=N[1],N=l($,v,_),v=N[0],_=N[1],$=L;let D=T+v,I=n(D*D),A=T-v,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),v=n(P*(I+n(d*P)))}N=l($,T,S),T=N[0],S=N[1],N=l($,v,_),v=N[0],_=N[1];let M=c(v);return n(T*M)}function f(b){return Mn(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===Gs)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 ya=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),$4=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),tN=BigInt(0),bv=BigInt(1),V4=BigInt(2),xv=BigInt(3),Ev=BigInt(5),vv=BigInt(8);function K4(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=ya,a=r*r%s*r%s,c=Ue(a,V4,s)*a%s,l=Ue(c,bv,s)*r%s,d=Ue(l,Ev,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,V4,s)*r%s,b2:a}}function H4(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function Sv(r,e){let t=ya,n=Ae(e*e*e,t),o=Ae(n*n*e,t),s=K4(r*o).pow_p_5_8,i=Ae(r*n*s,t),a=Ae(e*i*i,t),c=i,l=Ae(i*$4,t),d=a===r,u=a===Ae(-r,t),f=a===Ae(-r*$4,t);return d&&(i=c),(u||f)&&(i=l),N4(i,t)&&(i=Ae(-i,t)),{isValid:d||u,value:i}}var Av=yo(ya,void 0,!0),Iv={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Av,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:vv,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:po,randomBytes:es,adjustScalarBytes:H4,uvRatio:Sv},wa=U4(Iv);var ba=F4({P:ya,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=ya,{pow_p_5_8:t,b2:n}=K4(r);return Ae(Ue(t,xv,e)*n,e)},adjustScalarBytes:H4,randomBytes:es});var Ys=32,mn=64,F0=32;function q4(){let r=wa.utils.randomPrivateKey(),e=wa.getPublicKey(r);return{privateKey:_v(r,e),publicKey:e}}function W4(r,e){let t=r.subarray(0,F0);return wa.sign(e instanceof Uint8Array?e:e.subarray(),t)}function z4(r,e,t){return wa.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function _v(r,e){let t=new Uint8Array(mn);for(let n=0;n<F0;n++)t[n]=r[n],t[F0+n]=e[n];return t}var xa=class{type="Ed25519";raw;constructor(e){this.raw=Xs(e,Ys)}toMultihash(){return jt.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 z4(this.raw,t,e)}},Qs=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Xs(e,mn),this.publicKey=new xa(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return W4(this.raw,e)}};function $0(r){if(r.length>mn){r=Xs(r,mn+Ys);let n=r.subarray(0,mn),o=r.subarray(mn,r.length);return new Qs(n,o)}r=Xs(r,mn);let e=r.subarray(0,mn),t=r.subarray(Ys);return new Qs(e,t)}function V0(r){return r=Xs(r,Ys),new xa(r)}async function Y4(){let{privateKey:r,publicKey:e}=q4();return new Qs(r,e)}function Xs(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 K0;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(K0||(K0={}));(function(r){r.codec=()=>Ke(K0)})(Ge||(Ge={}));var gn;(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)})(gn||(gn={}));var Ea;(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)})(Ea||(Ea={}));var La={};Qe(La,{MAX_RSA_KEY_SIZE:()=>Cu,generateRSAKeyPair:()=>J0,jwkToJWKKeyPair:()=>q6,jwkToPkcs1:()=>Vv,jwkToPkix:()=>j0,jwkToRSAPrivateKey:()=>H6,pkcs1ToJwk:()=>V6,pkcs1ToRSAPrivateKey:()=>Pu,pkixToJwk:()=>K6,pkixToRSAPublicKey:()=>Z0});var kv=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]),wo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),bo=new Uint32Array(64),H0=class extends uo{constructor(){super(64,32,8,!1),this.A=wo[0]|0,this.B=wo[1]|0,this.C=wo[2]|0,this.D=wo[3]|0,this.E=wo[4]|0,this.F=wo[5]|0,this.G=wo[6]|0,this.H=wo[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)bo[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=bo[u-15],h=bo[u-2],p=Hr(f,7)^Hr(f,18)^f>>>3,m=Hr(h,17)^Hr(h,19)^h>>>10;bo[u]=m+bo[u-7]+p+bo[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+Rl(a,c,l)+kv[u]+bo[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(){bo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Sr=Ws(()=>new H0);var me=kt(X4());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 xo(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 Kl(...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 W0(){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 j4(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=xo(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=xo(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 Z4(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 Jt(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 EN=Math.log(2);function Hl(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function z0(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 qn(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 Sa=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return z0(this.items)}},va=[new Uint8Array([1])],J4="0123456789";var Js="",Yr=new ArrayBuffer(0),G0=new Uint8Array(0),Aa="EndOfContent",t6="OCTET STRING",r6="BIT STRING";function Wn(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):G0}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(!qn(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 $n=class{constructor({blockLength:e=0,error:t=Js,warnings:n=[],valueBeforeDecode:o=G0}={}){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)}}};$n.NAME="baseBlock";var Lt=class extends $n{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 ql=class extends Wn($n){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):G0,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=xo(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(!qn(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}}};ql.NAME="identificationBlock";var Wl=class extends $n{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(!qn(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=xo(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}}};Wl.NAME="lengthBlock";var G={},bt=class extends $n{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 ql(o),this.lenBlock=new Wl(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 Sa;t||n6(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 Z4(t,n)}};bt.NAME="BaseBlock";function n6(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)n6(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var zl=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}'`}};zl.NAME="BaseStringBlock";var Gl=class extends Wn(Lt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Gl.NAME="PrimitiveValueBlock";var o6,Yl=class extends bt{constructor(e={}){super(e,Gl),this.idBlock.isConstructed=!1}};o6=Yl;G.Primitive=o6;Yl.NAME="PRIMITIVE";function Ov(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 bt({},Lt),s=new $n;if(!qn(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=Ov(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 bt({},Lt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return ku(me.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function Mv(r,e){return r?1:e}var yn=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(!qn(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(;Mv(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===Aa)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Aa?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new Sa;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}};yn.NAME="ConstructedValueBlock";var s6,Eo=class extends bt{constructor(e={}){super(e,yn),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 Tb=Object.create;var jc=Object.defineProperty;var kb=Object.getOwnPropertyDescriptor;var Cb=Object.getOwnPropertyNames;var Pb=Object.getPrototypeOf,Rb=Object.prototype.hasOwnProperty;var lt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Qe=(r,e)=>{for(var t in e)jc(r,t,{get:e[t],enumerable:!0})},t4=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Cb(e))!Rb.call(r,o)&&o!==t&&jc(r,o,{get:()=>e[o],enumerable:!(n=kb(e,o))||n.enumerable});return r};var kt=(r,e,t)=>(t=r!=null?Tb(Pb(r)):{},t4(e||!r||!r.__esModule?jc(t,"default",{value:r,enumerable:!0}):t,r)),Db=r=>t4(jc({},"__esModule",{value:!0}),r);var i6=lt(oi=>{"use strict";var Ov="[object ArrayBuffer]",Fn=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===Ov}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}},Q0="string",Mv=/^[0-9a-f]+$/i,Uv=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,Fv=/^[a-zA-Z0-9-_]+$/,Hl=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=Fn.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},_r=class{static toString(e,t=!1){let n=Fn.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}},ql=class r{static isHex(e){return typeof e===Q0&&Mv.test(e)}static isBase64(e){return typeof e===Q0&&Uv.test(e)}static isBase64Url(e){return typeof e===Q0&&Fv.test(e)}static ToString(e,t="utf8"){let n=Fn.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 _r.toString(n,!0);case"utf16":case"utf16be":return _r.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 _r.fromString(e,!0);case"utf16":case"utf16be":return _r.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Fn.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 Hl.fromString(e);case"utf16":case"utf16be":return _r.fromString(e);case"utf16le":case"usc2":return _r.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 Hl.toString(e);case"utf16":case"utf16be":return _r.toString(e);case"utf16le":case"usc2":return _r.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=Fn.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Fn.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 _r.toString(e,t)}static FromUtf16String(e,t=!1){return _r.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,"")||""}};ql.DEFAULT_UTF8_ENCODING="utf8";function $v(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 Vv(...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 Kv(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}oi.BufferSourceConverter=Fn;oi.Convert=ql;oi.assign=$v;oi.combine=Vv;oi.isEqual=Kv});var I8=lt((za,Fu)=>{(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 za<"u"?(typeof Fu<"u"&&Fu.exports&&(za=Fu.exports=t),za.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)})(za)});var $u=lt((zO,_8)=>{_8.exports=I8()});var L8=lt((uU,x2)=>{"use strict";var OS=Object.prototype.hasOwnProperty,Kt="~";function ja(){}Object.create&&(ja.prototype=Object.create(null),new ja().__proto__||(Kt=!1));function MS(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function D8(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new MS(t,n||r,o),i=Kt?Kt+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 Qu(r,e){--r._eventsCount===0?r._events=new ja:delete r._events[e]}function Bt(){this._events=new ja,this._eventsCount=0}Bt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)OS.call(t,n)&&e.push(Kt?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Bt.prototype.listeners=function(e){var t=Kt?Kt+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};Bt.prototype.listenerCount=function(e){var t=Kt?Kt+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Bt.prototype.emit=function(e,t,n,o,s,i){var a=Kt?Kt+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};Bt.prototype.on=function(e,t,n){return D8(this,e,t,n,!1)};Bt.prototype.once=function(e,t,n){return D8(this,e,t,n,!0)};Bt.prototype.removeListener=function(e,t,n,o){var s=Kt?Kt+e:e;if(!this._events[s])return this;if(!t)return Qu(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&Qu(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:Qu(this,s)}return this};Bt.prototype.removeAllListeners=function(e){var t;return e?(t=Kt?Kt+e:e,this._events[t]&&Qu(this,t)):(this._events=new ja,this._eventsCount=0),this};Bt.prototype.off=Bt.prototype.removeListener;Bt.prototype.addListener=Bt.prototype.on;Bt.prefixed=Kt;Bt.EventEmitter=Bt;typeof x2<"u"&&(x2.exports=Bt)});var _2=lt((LU,M8)=>{M8.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 Ag=lt(uc=>{(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}(),uc.ip2long=i,uc.long2ip=a,uc.Netmask=r}).call(uc)});var j1=lt((Mq,zp)=>{var Oq=function(){typeof zp<"u"&&(zp.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 B9=lt((pJ,N9)=>{function xT(){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)}N9.exports=xT});var yy=lt((Jne,gy)=>{"use strict";gy.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var Sy=lt((Ey,vy)=>{"use strict";var Af=yy(),{hasOwnProperty:by}=Object.prototype,{propertyIsEnumerable:ak}=Object,Gi=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),ck=Ey,wy={concatArrays:!1,ignoreUndefined:!1},If=r=>{let e=[];for(let t in r)by.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)ak.call(r,n)&&e.push(n)}return e};function Yi(r){return Array.isArray(r)?lk(r):Af(r)?uk(r):r}function lk(r){let e=r.slice(0,0);return If(r).forEach(t=>{Gi(e,t,Yi(r[t]))}),e}function uk(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return If(r).forEach(t=>{Gi(e,t,Yi(r[t]))}),e}var xy=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Gi(r,o,r3(r[o],e[o],n)):Gi(r,o,Yi(e[o])))}),r),dk=(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++)by.call(s,a)&&(i.push(String(a)),s===r?Gi(n,o++,s[a]):Gi(n,o++,Yi(s[a])));n=xy(n,s,If(s).filter(a=>!i.includes(a)),t)}),n};function r3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?dk(r,e,t):!Af(e)||!Af(r)?Yi(e):xy(r,e,If(e),t)}vy.exports=function(...r){let e=r3(Yi(wy),this!==ck&&this||{},wy),t={_:{}};for(let n of r)if(n!==void 0){if(!Af(n))throw new TypeError("`"+n+"` is not an Option Object");t=r3(t,{_:n},e)}return t._}});var _y=lt((toe,Iy)=>{"use strict";function fk(r){return r>=55296&&r<=56319}function hk(r){return r>=56320&&r<=57343}Iy.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],fk(i)&&hk(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 ky=lt((roe,Ty)=>{"use strict";function pk(r){return r>=55296&&r<=56319}function mk(r){return r>=56320&&r<=57343}Ty.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),mk(o)?s!=null&&pk(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 Py=lt((noe,Cy)=>{"use strict";var gk=_y(),yk=ky();Cy.exports=gk.bind(null,yk)});var Ly=lt((ooe,Dy)=>{"use strict";var wk=Py(),bk=/[\/\?<>\\:\*\|"]/g,xk=/[\x00-\x1f\x80-\x9f]/g,Ek=/^\.+$/,vk=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,Sk=/[\. ]+$/;function Ry(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(bk,e).replace(xk,e).replace(Ek,e).replace(vk,e).replace(Sk,e);return wk(t,255)}Dy.exports=function(r,e){var t=e&&e.replacement||"",n=Ry(r,t);return t===""?n:Ry(n,"")}});var ww=lt(Yf=>{"use strict";Object.defineProperty(Yf,"__esModule",{value:!0});var E3=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}))}}},Gf=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new E3;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)}};Yf.EventIterator=Gf;Yf.default=Gf});var bw=lt(Wc=>{"use strict";Object.defineProperty(Wc,"__esModule",{value:!0});var v3=ww();Wc.EventIterator=v3.EventIterator;function EC(r,e,t){return new v3.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}Wc.subscribe=EC;Wc.default=v3.EventIterator});var ib=lt((Oue,sb)=>{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))}sb.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 ab=lt(Ls=>{var qC=ib();Ls.operation=function(r){var e=Ls.timeouts(r);return new qC(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};Ls.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};Ls.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};Ls.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=Ls.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 lb=lt((Uue,cb)=>{cb.exports=ab()});var fP={};Qe(fP,{DEFAULT_SESSION_MAX_PROVIDERS:()=>K2,DEFAULT_SESSION_MIN_PROVIDERS:()=>V2,InsufficientProvidersError:()=>sc,NoRoutersAvailableError:()=>Co,UnknownCodecError:()=>ac,UnknownHashAlgorithmError:()=>ic,createHelia:()=>uP,libp2pDefaults:()=>Zf});var r4=Symbol.for("@libp2p/connection");var ln=Symbol.for("@libp2p/content-routing");var zo=Symbol.for("@libp2p/peer-discovery");var Zc=Symbol.for("@libp2p/peer-id");function Jc(r){return!!r?.[Zc]}var un=Symbol.for("@libp2p/peer-routing");var Bs="keep-alive";var dn=Symbol.for("@libp2p/transport");var so;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(so||(so={}));var mt=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"}},Cn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},ia=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"}},Os=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},Ms=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},fn=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"}},Go=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"}},Us=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},hn=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"}},io=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Pn=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},de=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 Rn=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"}},Fs=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"}},ao=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 xe=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 bt(...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 Ct(...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 he(r){let e=new globalThis.AbortController;function t(){e.abort();for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}for(let s of r){if(s?.aborted===!0){t();break}s?.addEventListener!=null&&s.addEventListener("abort",t)}function n(){for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function ee(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var 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}},$s=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 Dh=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Pt(r={}){return Lb(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 Lb(r,e){e=e??{};let t=e.onEnd,n=new $s,o,s,i,a=ee(),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=ee()})}},l=g=>s!=null?s(g):(n.push(g),o),d=g=>(n=new $s,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 $s,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 Dh)},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 Lh=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 dr(r,e,t,n){let o=new Lh(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{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}},dl=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var fl=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 fl(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new fl(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 hl=class{deferred;signal;constructor(e){this.signal=e,this.deferred=ee(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new mt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function Nb(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var pl=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=Nb(),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 mt),this.cleanup())}async join(e={}){let t=new hl(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 fr=class extends xe{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??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){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new dl;let n=new pl(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 mt)}),this.clear()}async onEmpty(e){this.size!==0&&await dr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await dr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await dr(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=Pt({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 mt("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 Ut=class extends fr{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function Bb(r){return r[Symbol.asyncIterator]!=null}function Ob(r){if(Bb(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Gt=Ob;function ie(r=0){return new Uint8Array(r)}function We(r=0){return new Uint8Array(r)}var Mb=Math.pow(2,7),Ub=Math.pow(2,14),Fb=Math.pow(2,21),Nh=Math.pow(2,28),Bh=Math.pow(2,35),Oh=Math.pow(2,42),Mh=Math.pow(2,49),_e=128,Rt=127;function pe(r){if(r<Mb)return 1;if(r<Ub)return 2;if(r<Fb)return 3;if(r<Nh)return 4;if(r<Bh)return 5;if(r<Oh)return 6;if(r<Mh)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Uh(r,e,t=0){switch(pe(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 $b(r,e,t=0){switch(pe(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 Fh(r,e){let t=r[e],n=0;if(n+=t&Rt,t<_e||(t=r[e+1],n+=(t&Rt)<<7,t<_e)||(t=r[e+2],n+=(t&Rt)<<14,t<_e)||(t=r[e+3],n+=(t&Rt)<<21,t<_e)||(t=r[e+4],n+=(t&Rt)*Nh,t<_e)||(t=r[e+5],n+=(t&Rt)*Bh,t<_e)||(t=r[e+6],n+=(t&Rt)*Oh,t<_e)||(t=r[e+7],n+=(t&Rt)*Mh,t<_e))return n;throw new RangeError("Could not decode varint")}function Vb(r,e){let t=r.get(e),n=0;if(n+=t&Rt,t<_e||(t=r.get(e+1),n+=(t&Rt)<<7,t<_e)||(t=r.get(e+2),n+=(t&Rt)<<14,t<_e)||(t=r.get(e+3),n+=(t&Rt)<<21,t<_e)||(t=r.get(e+4),n+=(t&Rt)*Nh,t<_e)||(t=r.get(e+5),n+=(t&Rt)*Bh,t<_e)||(t=r.get(e+6),n+=(t&Rt)*Oh,t<_e)||(t=r.get(e+7),n+=(t&Rt)*Mh,t<_e))return n;throw new RangeError("Could not decode varint")}function Ve(r,e,t=0){return e==null&&(e=We(pe(r))),e instanceof Uint8Array?Uh(r,e,t):$b(r,e,t)}function Ft(r,e=0){return r instanceof Uint8Array?Fh(r,e):Vb(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 J(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var o4=Symbol.for("@achingbrain/uint8arraylist");function n4(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 ml(r){return!!r?.[o4]}var ce=class r{bufs;length;[o4]=!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(ml(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(ml(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=n4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=n4(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(ml(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(!ml(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(!J(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,s)=>o+s.byteLength,0)),n.length=t,n}};function gl(r){return r[Symbol.asyncIterator]!=null}var yl=r=>{let e=pe(r),t=We(e);return Ve(r,t),yl.bytes=e,t};yl.bytes=0;function Yt(r,e){e=e??{};let t=e.lengthEncoder??yl;function*n(o){let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return gl(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??yl;return new ce(t(r.byteLength),r)};var wl=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},bl=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},xl=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},aa=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var Hb=8,qb=1024*1024*4,Yo;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Yo||(Yo={}));var $h=r=>{let e=Ft(r);return $h.bytes=pe(e),e};$h.bytes=0;function Qt(r,e){let t=new ce,n=Yo.LENGTH,o=-1,s=e?.lengthDecoder??$h,i=e?.maxLengthLength??Hb,a=e?.maxDataLength??qb;function*c(){for(;t.byteLength>0;){if(n===Yo.LENGTH)try{if(o=s(t),o<0)throw new wl("Invalid message length");if(o>a)throw new bl("Message length too long");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Yo.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw new xl("Message length length too long");break}throw l}if(n===Yo.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Yo.LENGTH}}}return gl(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new aa("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new aa("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 Wb(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 Vs=Wb;function zb(r){return r[Symbol.asyncIterator]!=null}function Gb(r,e){let t=0;if(zb(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Vs(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=Gb;function Yb(r){return r[Symbol.asyncIterator]!=null}function Qb(...r){let e=[];for(let t of r)Yb(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=Pt({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 $t=Qb;function Ze(r,...e){if(r==null)throw new Error("Empty pipeline");if(Vh(r)){let n=r;r=()=>n.source}else if(i4(r)||s4(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Vh(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++)Vh(t[n])&&(t[n]=jb(t[n]));return Xb(...t)}var Xb=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},s4=r=>r?.[Symbol.asyncIterator]!=null,i4=r=>r?.[Symbol.iterator]!=null,Vh=r=>r==null?!1:r.sink!=null&&r.source!=null,jb=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Pt({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(s4(s))o=async function*(){yield*s,n.end()};else if(i4(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return $t(n,o())}return r.source};function Zb(r){return r[Symbol.asyncIterator]!=null}function Jb(r,e){return Zb(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 co=Jb;var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var ca="/ipfs/bitswap/1.2.0";var Kh=new Float32Array([-0]),lo=new Uint8Array(Kh.buffer);function a4(r,e,t){Kh[0]=r,e[t]=lo[0],e[t+1]=lo[1],e[t+2]=lo[2],e[t+3]=lo[3]}function c4(r,e){return lo[0]=r[e],lo[1]=r[e+1],lo[2]=r[e+2],lo[3]=r[e+3],Kh[0]}var Hh=new Float64Array([-0]),Dt=new Uint8Array(Hh.buffer);function l4(r,e,t){Hh[0]=r,e[t]=Dt[0],e[t+1]=Dt[1],e[t+2]=Dt[2],e[t+3]=Dt[3],e[t+4]=Dt[4],e[t+5]=Dt[5],e[t+6]=Dt[6],e[t+7]=Dt[7]}function u4(r,e){return Dt[0]=r[e],Dt[1]=r[e+1],Dt[2]=r[e+2],Dt[3]=r[e+3],Dt[4]=r[e+4],Dt[5]=r[e+5],Dt[6]=r[e+6],Dt[7]=r[e+7],Hh[0]}var ex=BigInt(Number.MAX_SAFE_INTEGER),tx=BigInt(Number.MIN_SAFE_INTEGER),hr=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return Qo;if(e<ex&&e>tx)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>d4&&(o=0n,++n>d4&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Qo;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):Qo}},Qo=new hr(0,0);Qo.toBigInt=function(){return 0n};Qo.zzEncode=Qo.zzDecode=function(){return this};Qo.length=function(){return 1};var d4=4294967296n;function f4(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 h4(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 qh(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 vl(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var Wh=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 vl(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Vr(this,4);return vl(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Vr(this,4);let e=c4(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Vr(this,4);let e=u4(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 h4(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 hr(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=vl(this.buf,this.pos+=4),t=vl(this.buf,this.pos+=4);return new hr(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=Fh(this.buf,this.pos);return this.pos+=pe(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 zh(r){return new Wh(r instanceof Uint8Array?r:r.subarray())}function re(r,e,t){let n=zh(r);return e.decode(n,void 0,t)}var Zh={};Qe(Zh,{base10:()=>ax});var cD=new Uint8Array(0);function m4(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 g4(r){return new TextEncoder().encode(r)}function y4(r){return new TextDecoder().decode(r)}function rx(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 nx=rx,ox=nx,w4=ox;var Yh=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")}},Qh=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 b4(this,e)}},Xh=class{decoders;constructor(e){this.decoders=e}or(e){return b4(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 b4(r,e){return new Xh({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var jh=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 Yh(e,t,n),this.decoder=new Qh(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Ks({name:r,prefix:e,encode:t,decode:n}){return new jh(r,e,t,n)}function uo({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=w4(t,r);return Ks({prefix:e,name:r,encode:n,decode:s=>Kr(o(s))})}function sx(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 ix(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 Xe({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Ks({prefix:e,name:r,encode(o){return ix(o,n,t)},decode(o){return sx(o,n,t,r)}})}var ax=uo({prefix:"9",name:"base10",alphabet:"0123456789"});var Jh={};Qe(Jh,{base16:()=>cx,base16upper:()=>lx});var cx=Xe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),lx=Xe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var e0={};Qe(e0,{base2:()=>ux});var ux=Xe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var t0={};Qe(t0,{base256emoji:()=>mx});var x4=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}"),dx=x4.reduce((r,e,t)=>(r[t]=e,r),[]),fx=x4.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function hx(r){return r.reduce((e,t)=>(e+=dx[t],e),"")}function px(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=fx[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var mx=Ks({prefix:"\u{1F680}",name:"base256emoji",encode:hx,decode:px});var r0={};Qe(r0,{base32:()=>ut,base32hex:()=>bx,base32hexpad:()=>Ex,base32hexpadupper:()=>vx,base32hexupper:()=>xx,base32pad:()=>yx,base32padupper:()=>wx,base32upper:()=>gx,base32z:()=>Sx});var ut=Xe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),gx=Xe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),yx=Xe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),wx=Xe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),bx=Xe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),xx=Xe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Ex=Xe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),vx=Xe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Sx=Xe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var n0={};Qe(n0,{base36:()=>pn,base36upper:()=>Ax});var pn=uo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Ax=uo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var o0={};Qe(o0,{base58btc:()=>Ee,base58flickr:()=>Ix});var Ee=uo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Ix=uo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var i0={};Qe(i0,{base64:()=>st,base64pad:()=>_x,base64url:()=>s0,base64urlpad:()=>Tx});var st=Xe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),_x=Xe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),s0=Xe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Tx=Xe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var a0={};Qe(a0,{base8:()=>kx});var kx=Xe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var c0={};Qe(c0,{identity:()=>Cx});var Cx=Ks({prefix:"\0",name:"identity",encode:r=>y4(r),decode:r=>g4(r)});var Sl={};Qe(Sl,{code:()=>l0,decode:()=>Nx,encode:()=>Lx,name:()=>Dx});var Px=new TextEncoder,Rx=new TextDecoder,Dx="json",l0=512;function Lx(r){return Px.encode(JSON.stringify(r))}function Nx(r){return JSON.parse(Rx.decode(r))}var ua={};Qe(ua,{code:()=>la,decode:()=>Mx,encode:()=>Ox,name:()=>Bx});var Bx="raw",la=85;function Ox(r){return Kr(r)}function Mx(r){return Kr(r)}var f0={};Qe(f0,{identity:()=>Zt});var ze={};Qe(ze,{Digest:()=>Xo,create:()=>jt,decode:()=>Ce,equals:()=>d0,hasCode:()=>rE});var Ux=S4,E4=128,Fx=127,$x=~Fx,Vx=Math.pow(2,31);function S4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Vx;)e[t++]=r&255|E4,r/=128;for(;r&$x;)e[t++]=r&255|E4,r>>>=7;return e[t]=r|0,S4.bytes=t-n+1,e}var Kx=u0,Hx=128,v4=127;function u0(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw u0.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&v4)<<o:(i&v4)*Math.pow(2,o),o+=7}while(i>=Hx);return u0.bytes=s-n,t}var qx=Math.pow(2,7),Wx=Math.pow(2,14),zx=Math.pow(2,21),Gx=Math.pow(2,28),Yx=Math.pow(2,35),Qx=Math.pow(2,42),Xx=Math.pow(2,49),jx=Math.pow(2,56),Zx=Math.pow(2,63),Jx=function(r){return r<qx?1:r<Wx?2:r<zx?3:r<Gx?4:r<Yx?5:r<Qx?6:r<Xx?7:r<jx?8:r<Zx?9:10},eE={encode:Ux,decode:Kx,encodingLength:Jx},tE=eE,da=tE;function fa(r,e=0){return[da.decode(r,e),da.decode.bytes]}function Hs(r,e,t=0){return da.encode(r,e,t),e}function qs(r){return da.encodingLength(r)}function jt(r,e){let t=e.byteLength,n=qs(r),o=n+qs(t),s=new Uint8Array(o+t);return Hs(r,s,0),Hs(t,s,n),s.set(e,o),new Xo(r,t,e,s)}function Ce(r){let e=Kr(r),[t,n]=fa(e),[o,s]=fa(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Xo(t,o,i,e)}function d0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&m4(r.bytes,t.bytes)}}var Xo=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function rE(r,e){return r.code===e}var A4=0,nE="identity",I4=Kr;function oE(r){return jt(A4,I4(r))}var Zt={code:A4,name:nE,encode:I4,digest:oE};var m0={};Qe(m0,{sha256:()=>dt,sha512:()=>Il});function p0({name:r,code:e,encode:t}){return new h0(r,e,t)}var h0=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 T4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var dt=p0({name:"sha2-256",code:18,encode:T4("SHA-256")}),Il=p0({name:"sha2-512",code:19,encode:T4("SHA-512")});function k4(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return iE(t,g0(r),e??Ee.encoder);default:return aE(t,g0(r),e??ut.encoder)}}var C4=new WeakMap;function g0(r){let e=C4.get(r);if(e==null){let t=new Map;return C4.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!==ha)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==cE)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&&d0(e.multihash,n.multihash)}toString(e){return k4(this,e)}toJSON(){return{"/":k4(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??P4(n,o,s.bytes))}else if(t[lE]===!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!==ha)throw new Error(`Version 0 CID must use dag-pb (code: ${ha}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=P4(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ha,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 Xo(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]=fa(e.subarray(t));return t+=f,u},o=n(),s=ha;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]=sE(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 g0(s).set(n,e),s}};function sE(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 ut.prefix:{let t=e??ut;return[ut.prefix,t.decode(r)]}case pn.prefix:{let t=e??pn;return[pn.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 iE(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 aE(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 ha=112,cE=18;function P4(r,e,t){let n=qs(r),o=n+qs(e),s=new Uint8Array(o+t.byteLength);return Hs(r,s,0),Hs(e,s,n),s.set(t,o),s}var lE=Symbol.for("@ipld/js-cid/CID");var Ln={...c0,...e0,...a0,...Zh,...Jh,...r0,...n0,...o0,...i0,...t0},WD={...m0,...f0};function D4(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var R4=D4("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),y0=D4("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}),uE={utf8:R4,"utf-8":R4,hex:Ln.base16,latin1:y0,ascii:y0,binary:y0,...Ln},_l=uE;function O(r,e="utf8"){let t=_l[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function w0(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 jo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function b0(){}var E0=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},dE=w0();function fE(r){return globalThis.Buffer!=null?We(r):dE(r)}var ma=class{len;head;tail;states;constructor(){this.len=0,this.head=new jo(b0,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new jo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new v0((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(Tl,10,hr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=hr.fromBigInt(e);return this._push(Tl,t.length(),t)}uint64Number(e){return this._push(Uh,pe(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=hr.fromBigInt(e).zzEncode();return this._push(Tl,t.length(),t)}sint64Number(e){let t=hr.fromNumber(e).zzEncode();return this._push(Tl,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(x0,1,e?1:0)}fixed32(e){return this._push(pa,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=hr.fromBigInt(e);return this._push(pa,4,t.lo)._push(pa,4,t.hi)}fixed64Number(e){let t=hr.fromNumber(e);return this._push(pa,4,t.lo)._push(pa,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(a4,4,e)}double(e){return this._push(l4,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(x0,1,0):this.uint32(t)._push(pE,t,e)}string(e){let t=f4(e);return t!==0?this.uint32(t)._push(qh,t,e):this._push(x0,1,0)}fork(){return this.states=new E0(this),this.head=this.tail=new jo(b0,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 jo(b0,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=fE(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function x0(r,e,t){e[t]=r&255}function hE(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var v0=class extends jo{next;constructor(e,t){super(hE,e,t),this.next=void 0}};function Tl(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 pa(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 pE(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(ma.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(mE,e,r),this},ma.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(gE,e,r),this});function mE(r,e,t){e.set(r,t)}function gE(r,e,t){r.length<40?qh(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(O(r),t)}function S0(){return new ma}function ne(r,e){let t=S0();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Ws;(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"})(Ws||(Ws={}));function kl(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 kl("enum",Ws.VARINT,t,n)}function oe(r,e){return kl("message",Ws.LENGTH_DELIMITED,r,e)}var Oe=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},ga=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Je;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Je||(Je={}));var A0;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(A0||(A0={}));(function(r){r.codec=()=>Ke(A0)})(Je||(Je={}));var zs;(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)=>re(t,r.codec(),n)})(zs||(zs={}));var Cl;(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),zs.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(zs.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)})(Cl||(Cl={}));var Gs;(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)})(Gs||(Gs={}));var Sr;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(Sr||(Sr={}));var Pl;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(Pl||(Pl={}));(function(r){r.codec=()=>Ke(Pl)})(Sr||(Sr={}));var Ys;(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&&Pl[t.type]!==0&&(n.uint32(16),Sr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:ie(0),type:Sr.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=Sr.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)})(Ys||(Ys={}));var Zo;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Cl.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),Gs.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),Ys.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=Cl.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(Gs.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(Ys.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{s.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Zo||(Zo={}));function L4(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 Rl=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var yE=4193648,wE=yE+16;function*N4(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],s=0,i=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},d=Zo.encode(l).byteLength,{added:u,hasMore:f,newSize:h}=I0(o,l.blocks,a,e,d,bE);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=I0(n,l.blockPresences,i,e,d,xE)),i+=u,d=h;let m=f;if({added:u,hasMore:f,newSize:h}=I0(t,l.wantlist.entries,s,e,d,EE),s+=u,d=h,c=!p&&!m&&!f,c||(l.wantlist.full=!1),yield Zo.encode(l),c)break}}function I0(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>wE)throw new Rl("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 bE(r){return _0(3,Gs.encode(r))}function xE(r){return _0(4,Ys.encode(r))}function EE(r){return _0(1,zs.encode(r))}function _0(r,e){let t=pe(r),n=pe(e.byteLength);return t+n+e.byteLength}var Dl=class extends xe{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??[ca],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 Ut({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 Ze(t,i=>Qt(i,{maxDataLength:this.maxIncomingMessageSize}),async i=>{for await(let a of i)try{let c=Zo.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),s.removeEventListener("abort",o),s=AbortSignal.timeout(this.messageReceiveTimeout),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(co(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=L4(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,ca,s);await a.closeRead();try{await Ze(N4(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),dr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(ca))return!0;throw new Pn(`${e} did not support ${ca}`)}})]);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 fo(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function PE(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Qs(r,...e){if(!PE(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");fo(r.outputLen),fo(r.blockLen)}function Xs(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 B4(r,e){Qs(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var es=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var ts=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Hr=(r,e)=>r<<32-e|r>>>e,Ll=(r,e)=>r<<e|r>>>32-e>>>0,GL=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var RE=async()=>{};async function O4(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 RE(),n+=s)}}function M4(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=M4(r)),Qs(r),r}function T0(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Qs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}var js=class{clone(){return this._cloneInto()}},DE={}.toString;function U4(r,e){if(e!==void 0&&DE.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Zs(r){let e=n=>r().update(qr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function rs(r=32){if(es&&typeof es.getRandomValues=="function")return es.getRandomValues(new Uint8Array(r));if(es&&typeof es.randomBytes=="function")return es.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function LE(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 Nl=(r,e,t)=>r&e^~r&t,Bl=(r,e,t)=>r&e^r&t^e&t,ho=class extends js{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=ts(this.buffer)}update(e){Xs(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=ts(e);for(;o<=s-i;i+=o)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Xs(this),B4(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;LE(n,o-8,BigInt(this.length*8),s),this.process(n,0);let a=ts(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:s,destroyed:i,pos:a}=this;return e.length=o,e.pos=a,e.finished=s,e.destroyed=i,o%t&&e.buffer.set(n),e}};var Ol=BigInt(4294967295),k0=BigInt(32);function F4(r,e=!1){return e?{h:Number(r&Ol),l:Number(r>>k0&Ol)}:{h:Number(r>>k0&Ol)|0,l:Number(r&Ol)|0}}function NE(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}=F4(r[o],e);[t[o],n[o]]=[s,i]}return[t,n]}var BE=(r,e)=>BigInt(r>>>0)<<k0|BigInt(e>>>0),OE=(r,e,t)=>r>>>t,ME=(r,e,t)=>r<<32-t|e>>>t,UE=(r,e,t)=>r>>>t|e<<32-t,FE=(r,e,t)=>r<<32-t|e>>>t,$E=(r,e,t)=>r<<64-t|e>>>t-32,VE=(r,e,t)=>r>>>t-32|e<<64-t,KE=(r,e)=>e,HE=(r,e)=>r,qE=(r,e,t)=>r<<t|e>>>32-t,WE=(r,e,t)=>e<<t|r>>>32-t,zE=(r,e,t)=>e<<t-32|r>>>64-t,GE=(r,e,t)=>r<<t-32|e>>>64-t;function YE(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var QE=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),XE=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,jE=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),ZE=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,JE=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),ev=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var tv={fromBig:F4,split:NE,toBig:BE,shrSH:OE,shrSL:ME,rotrSH:UE,rotrSL:FE,rotrBH:$E,rotrBL:VE,rotr32H:KE,rotr32L:HE,rotlSH:qE,rotlSL:WE,rotlBH:zE,rotlBL:GE,add:YE,add3L:QE,add3H:XE,add4L:jE,add4H:ZE,add5H:ev,add5L:JE},ue=tv;var[rv,nv]=ue.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),po=new Uint32Array(80),mo=new Uint32Array(80),C0=class extends ho{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)po[w]=e.getUint32(t),mo[w]=e.getUint32(t+=4);for(let w=16;w<80;w++){let x=po[w-15]|0,T=mo[w-15]|0,k=ue.rotrSH(x,T,1)^ue.rotrSH(x,T,8)^ue.shrSH(x,T,7),v=ue.rotrSL(x,T,1)^ue.rotrSL(x,T,8)^ue.shrSL(x,T,7),S=po[w-2]|0,_=mo[w-2]|0,$=ue.rotrSH(S,_,19)^ue.rotrBH(S,_,61)^ue.shrSH(S,_,6),N=ue.rotrSL(S,_,19)^ue.rotrBL(S,_,61)^ue.shrSL(S,_,6),M=ue.add4L(v,N,mo[w-7],mo[w-16]),B=ue.add4H(M,k,$,po[w-7],po[w-16]);po[w]=B|0,mo[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=ue.rotrSH(u,f,14)^ue.rotrSH(u,f,18)^ue.rotrBH(u,f,41),T=ue.rotrSL(u,f,14)^ue.rotrSL(u,f,18)^ue.rotrBL(u,f,41),k=u&h^~u&m,v=f&p^~f&g,S=ue.add5L(b,T,v,nv[w],mo[w]),_=ue.add5H(S,y,x,k,rv[w],po[w]),$=S|0,N=ue.rotrSH(n,o,28)^ue.rotrBH(n,o,34)^ue.rotrBH(n,o,39),M=ue.rotrSL(n,o,28)^ue.rotrBL(n,o,34)^ue.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}=ue.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=ue.add3L($,M,D);n=ue.add3H(L,_,N,B),o=L|0}({h:n,l:o}=ue.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=ue.add(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=ue.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=ue.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=ue.add(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=ue.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:m,l:g}=ue.add(this.Gh|0,this.Gl|0,m|0,g|0),{h:y,l:b}=ue.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(){po.fill(0),mo.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 go=Zs(()=>new C0);var Ul={};Qe(Ul,{aInRange:()=>xt,abool:()=>Wr,abytes:()=>Js,bitGet:()=>lv,bitLen:()=>N0,bitMask:()=>wa,bitSet:()=>uv,bytesToHex:()=>Bn,bytesToNumberBE:()=>On,bytesToNumberLE:()=>zr,concatBytes:()=>Un,createHmacDrbg:()=>B0,ensureBytes:()=>Me,equalBytes:()=>av,hexToBytes:()=>os,hexToNumber:()=>L0,inRange:()=>ya,isBytes:()=>yo,memoized:()=>ss,notImplemented:()=>fv,numberToBytesBE:()=>wo,numberToBytesLE:()=>Mn,numberToHexUnpadded:()=>ns,numberToVarBytesBE:()=>iv,utf8ToBytes:()=>cv,validateObject:()=>Ar});var D0=BigInt(0),Ml=BigInt(1),ov=BigInt(2);function yo(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Js(r){if(!yo(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 sv=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Bn(r){Js(r);let e="";for(let t=0;t<r.length;t++)e+=sv[r[t]];return e}function ns(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function L0(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var Nn={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function $4(r){if(r>=Nn._0&&r<=Nn._9)return r-Nn._0;if(r>=Nn._A&&r<=Nn._F)return r-(Nn._A-10);if(r>=Nn._a&&r<=Nn._f)return r-(Nn._a-10)}function os(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=$4(r.charCodeAt(s)),a=$4(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 On(r){return L0(Bn(r))}function zr(r){return Js(r),L0(Bn(Uint8Array.from(r).reverse()))}function wo(r,e){return os(r.toString(16).padStart(e*2,"0"))}function Mn(r,e){return wo(r,e).reverse()}function iv(r){return os(ns(r))}function Me(r,e,t){let n;if(typeof e=="string")try{n=os(e)}catch(s){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${s}`)}else if(yo(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 Un(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Js(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 av(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 cv(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}var P0=r=>typeof r=="bigint"&&D0<=r;function ya(r,e,t){return P0(r)&&P0(e)&&P0(t)&&e<=r&&r<t}function xt(r,e,t,n){if(!ya(e,t,n))throw new Error(`expected valid ${r}: ${t} <= n < ${n}, got ${typeof e} ${e}`)}function N0(r){let e;for(e=0;r>D0;r>>=Ml,e+=1);return e}function lv(r,e){return r>>BigInt(e)&Ml}function uv(r,e,t){return r|(t?Ml:D0)<<BigInt(e)}var wa=r=>(ov<<BigInt(r-1))-Ml,R0=r=>new Uint8Array(r),V4=r=>Uint8Array.from(r);function B0(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=R0(r),o=R0(r),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...u)=>t(o,n,...u),c=(u=R0())=>{o=a(V4([0]),u),n=a(),u.length!==0&&(o=a(V4([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 Un(...f)};return(u,f)=>{i(),c(u);let h;for(;!(h=f(l()));)c();return i(),h}}var dv={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"||yo(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 Ar(r,e,t={}){let n=(o,s,i)=>{let a=dv[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 fv=()=>{throw new Error("not implemented")};function ss(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 ft=BigInt(0),He=BigInt(1),is=BigInt(2),hv=BigInt(3),O0=BigInt(4),K4=BigInt(5),H4=BigInt(8),pv=BigInt(9),mv=BigInt(16);function Ae(r,e){let t=r%e;return t>=ft?t:e+t}function M0(r,e,t){if(t<=ft||e<ft)throw new Error("Expected power/modulo > 0");if(t===He)return ft;let n=He;for(;e>ft;)e&He&&(n=n*r%t),r=r*r%t,e>>=He;return n}function Ue(r,e,t){let n=r;for(;e-- >ft;)n*=n,n%=t;return n}function Fl(r,e){if(r===ft||e<=ft)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=Ae(r,e),n=e,o=ft,s=He,i=He,a=ft;for(;t!==ft;){let l=n/t,d=n%t,u=o-i*l,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 gv(r){let e=(r-He)/is,t,n,o;for(t=r-He,n=0;t%is===ft;t/=is,n++);for(o=is;o<r&&M0(o,e,r)!==r-He;o++);if(n===1){let i=(r+He)/O0;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)/is;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 yv(r){if(r%O0===hv){let e=(r+He)/O0;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%H4===K4){let e=(r-K4)/H4;return function(n,o){let s=n.mul(o,is),i=n.pow(s,e),a=n.mul(o,i),c=n.mul(n.mul(a,is),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%mv,gv(r)}var q4=(r,e)=>(Ae(r,e)&He)===He,wv=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function U0(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=wv.reduce((n,o)=>(n[o]="function",n),e);return Ar(r,t)}function bv(r,e,t){if(t<ft)throw new Error("Expected power > 0");if(t===ft)return r.ONE;if(t===He)return e;let n=r.ONE,o=e;for(;t>ft;)t&He&&(n=r.mul(n,o)),o=r.sqr(o),t>>=He;return n}function xv(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 F0(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function bo(r,e,t=!1,n={}){if(r<=ft)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:s}=F0(r,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=yv(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:s,MASK:wa(o),ZERO:ft,ONE:He,create:c=>Ae(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return ft<=c&&c<r},is0:c=>c===ft,isOdd:c=>(c&He)===He,neg:c=>Ae(-c,r),eql:(c,l)=>c===l,sqr:c=>Ae(c*c,r),add:(c,l)=>Ae(c+l,r),sub:(c,l)=>Ae(c-l,r),mul:(c,l)=>Ae(c*l,r),pow:(c,l)=>bv(a,c,l),div:(c,l)=>Ae(c*Fl(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Fl(c,r),sqrt:n.sqrt||(c=>i(a,c)),invertBatch:c=>xv(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?Mn(c,s):wo(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return t?zr(c):On(c)}});return Object.freeze(a)}function W4(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 $0(r){let e=W4(r);return e+Math.ceil(e/2)}function z4(r,e,t=!1){let n=r.length,o=W4(e),s=$0(e);if(n<16||n<s||n>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let i=t?On(r):zr(r),a=Ae(i,e-He)+He;return t?Mn(a,o):wo(a,o)}var vv=BigInt(0),V0=BigInt(1),K0=new WeakMap,G4=new WeakMap;function $l(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>vv;)i&V0&&(a=a.add(c)),c=c.double(),i>>=V0;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+=V0);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=G4.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),G4.set(s,i),K0.delete(s)}}}function Vl(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=N0(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 ba(r){return U0(r.Fp),Ar(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...F0(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Gr=BigInt(0),Jt=BigInt(1),Kl=BigInt(2),Sv=BigInt(8),Av={zip215:!0};function Iv(r){let e=ba(r);return Ar(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function Y4(r){let e=Iv(r),{Fp:t,n,prehash:o,hash:s,randomBytes:i,nByteLength:a,h:c}=e,l=Kl<<BigInt(a*8)-Jt,d=t.create,u=bo(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){xt("coordinate "+I,A,Gr,l)}function g(I){if(!(I instanceof w))throw new Error("ExtendedPoint expected")}let y=ss((I,A)=>{let{ex:R,ey:P,ez:q}=I,z=I.is0();A==null&&(A=z?Sv: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=ss(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),Le=d(ae*A),Ne=d(fe*d(Le+le)),$e=d(be+d(R*d(ae*le)));if(Ne!==$e)throw new Error("bad point: equation left != right (1)");let Mt=d(P*q),ct=d(z*j);if(Mt!==ct)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 Vl(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),be=d(P*ae),Le=d(j*q);return le===fe&&be===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(Kl*d(q*q)),le=d(A*z),fe=R+P,be=d(d(fe*fe)-z-j),Le=le+j,Ne=Le-ae,$e=le-j,Mt=d(be*Ne),ct=d(Le*$e),zt=d(be*$e),kn=d(Ne*Le);return new w(Mt,ct,kn,zt)}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:Le}=A;if(R===BigInt(-1)){let Y3=d((z-q)*(fe+le)),Q3=d((z+q)*(fe-le)),Rh=d(Q3-Y3);if(Rh===Gr)return this.double();let X3=d(j*Kl*Le),j3=d(ae*Kl*be),Z3=j3+X3,J3=Q3+Y3,e4=j3-X3,Sb=d(Z3*Rh),Ab=d(J3*e4),Ib=d(Z3*e4),_b=d(Rh*J3);return new w(Sb,Ab,_b,Ib)}let Ne=d(q*le),$e=d(z*fe),Mt=d(ae*P*Le),ct=d(j*be),zt=d((q+z)*(le+fe)-Ne-$e),kn=ct-Mt,oa=ct+Mt,sa=d($e-R*Ne),bb=d(zt*kn),xb=d(oa*sa),Eb=d(zt*sa),vb=d(kn*oa);return new w(bb,xb,vb,Eb)}subtract(A){return this.add(A.negate())}wNAF(A){return k.wNAFCached(this,A,w.normalizeZ)}multiply(A){let R=A;xt("scalar",R,Jt,n);let{p:P,f:q}=this.wNAF(R);return w.normalizeZ([P,q])[0]}multiplyUnsafe(A){let R=A;return xt("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;xt("pointHex.y",le,Gr,fe);let be=d(le*le),Le=d(be-Jt),Ne=d(P*be-q),{isValid:$e,value:Mt}=f(Le,Ne);if(!$e)throw new Error("Point.fromHex: invalid y coordinate");let ct=(Mt&Jt)===Jt,zt=(ae&128)!==0;if(!R&&Mt===Gr&&zt)throw new Error("Point.fromHex: x=0 and x_0=1");return zt!==ct&&(Mt=d(-Mt)),w.fromAffine({x:Mt,y:le})}static fromPrivateKey(A){return _(A).point}toRawBytes(){let{x:A,y:R}=this.toAffine(),P=Mn(R,t.BYTES);return P[P.length-1]|=A&Jt?128:0,P}toHex(){return Bn(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=$l(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=Un(...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);xt("signature.s",fe,Gr,n);let be=Un(ae,Mn(fe,t.BYTES));return Me("result",be,a*2)}let B=Av;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,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 Le=N(q,fe.toRawBytes(),le.toRawBytes(),A);return fe.add(le.multiplyUnsafe(Le)).subtract(be).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 ei=BigInt(0),H0=BigInt(1);function _v(r){return Ar(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function Q4(r){let e=_v(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=>M0(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){xt("u",b,ei,t),xt("scalar",w,ei,t);let x=w,T=b,k=H0,v=ei,S=b,_=H0,$=ei,N;for(let B=BigInt(o-1);B>=ei;B--){let D=x>>B&H0;$^=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 Mn(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===ei)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 xa=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),X4=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),xN=BigInt(0),Tv=BigInt(1),j4=BigInt(2),kv=BigInt(3),Cv=BigInt(5),Pv=BigInt(8);function Z4(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=xa,a=r*r%s*r%s,c=Ue(a,j4,s)*a%s,l=Ue(c,Tv,s)*r%s,d=Ue(l,Cv,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,j4,s)*r%s,b2:a}}function J4(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function Rv(r,e){let t=xa,n=Ae(e*e*e,t),o=Ae(n*n*e,t),s=Z4(r*o).pow_p_5_8,i=Ae(r*n*s,t),a=Ae(e*i*i,t),c=i,l=Ae(i*X4,t),d=a===r,u=a===Ae(-r,t),f=a===Ae(-r*X4,t);return d&&(i=c),(u||f)&&(i=l),q4(i,t)&&(i=Ae(-i,t)),{isValid:d||u,value:i}}var Dv=bo(xa,void 0,!0),Lv={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Dv,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:Pv,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:go,randomBytes:rs,adjustScalarBytes:J4,uvRatio:Rv},Ea=Y4(Lv);var va=Q4({P:xa,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=xa,{pow_p_5_8:t,b2:n}=Z4(r);return Ae(Ue(t,kv,e)*n,e)},adjustScalarBytes:J4,randomBytes:rs});var ti=32,mn=64,q0=32;function e6(){let r=Ea.utils.randomPrivateKey(),e=Ea.getPublicKey(r);return{privateKey:Nv(r,e),publicKey:e}}function t6(r,e){let t=r.subarray(0,q0);return Ea.sign(e instanceof Uint8Array?e:e.subarray(),t)}function r6(r,e,t){return Ea.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function Nv(r,e){let t=new Uint8Array(mn);for(let n=0;n<q0;n++)t[n]=r[n],t[q0+n]=e[n];return t}var Sa=class{type="Ed25519";raw;constructor(e){this.raw=ni(e,ti)}toMultihash(){return Zt.digest(Lt(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:J(this.raw,e.raw)}verify(e,t){return r6(this.raw,t,e)}},ri=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=ni(e,mn),this.publicKey=new Sa(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return t6(this.raw,e)}};function W0(r){if(r.length>mn){r=ni(r,mn+ti);let n=r.subarray(0,mn),o=r.subarray(mn,r.length);return new ri(n,o)}r=ni(r,mn);let e=r.subarray(0,mn),t=r.subarray(ti);return new ri(e,t)}function z0(r){return r=ni(r,ti),new Sa(r)}async function o6(){let{privateKey:r,publicKey:e}=e6();return new ri(r,e)}function ni(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 G0;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(G0||(G0={}));(function(r){r.codec=()=>Ke(G0)})(Ge||(Ge={}));var gn;(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)})(gn||(gn={}));var Aa;(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)})(Aa||(Aa={}));var Ba={};Qe(Ba,{MAX_RSA_KEY_SIZE:()=>Du,generateRSAKeyPair:()=>o2,jwkToJWKKeyPair:()=>e8,jwkToPkcs1:()=>Qv,jwkToPkix:()=>r2,jwkToRSAPrivateKey:()=>J6,pkcs1ToJwk:()=>j6,pkcs1ToRSAPrivateKey:()=>Lu,pkixToJwk:()=>Z6,pkixToRSAPublicKey:()=>n2});var Bv=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]),xo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Eo=new Uint32Array(64),Y0=class extends ho{constructor(){super(64,32,8,!1),this.A=xo[0]|0,this.B=xo[1]|0,this.C=xo[2]|0,this.D=xo[3]|0,this.E=xo[4]|0,this.F=xo[5]|0,this.G=xo[6]|0,this.H=xo[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)Eo[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=Eo[u-15],h=Eo[u-2],p=Hr(f,7)^Hr(f,18)^f>>>3,m=Hr(h,17)^Hr(h,19)^h>>>10;Eo[u]=m+Eo[u-7]+p+Eo[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+Nl(a,c,l)+Bv[u]+Eo[u]|0,m=(Hr(n,2)^Hr(n,13)^Hr(n,22))+Bl(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(){Eo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ir=Zs(()=>new Y0);var me=kt(i6());function as(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 vo(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 Wl(...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 X0(){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=as(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,as(s,8)-n}function a6(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=vo(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=vo(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 c6(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 $N=Math.log(2);function zl(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function j0(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 qn(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 _a=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return j0(this.items)}},Ia=[new Uint8Array([1])],l6="0123456789";var ii="",Yr=new ArrayBuffer(0),Z0=new Uint8Array(0),Ta="EndOfContent",d6="OCTET STRING",f6="BIT STRING";function Wn(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):Z0}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(!qn(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 $n=class{constructor({blockLength:e=0,error:t=ii,warnings:n=[],valueBeforeDecode:o=Z0}={}){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)}}};$n.NAME="baseBlock";var Nt=class extends $n{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'")}};Nt.NAME="valueBlock";var Gl=class extends Wn($n){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):Z0,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=vo(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(!qn(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=as(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}}};Gl.NAME="identificationBlock";var Yl=class extends $n{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(!qn(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=as(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=vo(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}}};Yl.NAME="lengthBlock";var G={},Et=class extends $n{constructor({name:e=ii,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new Gl(o),this.lenBlock=new Yl(o),this.valueBlock=s?new s(o):new Nt(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 _a;t||h6(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 c6(t,n)}};Et.NAME="BaseBlock";function h6(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)h6(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var Ql=class extends Et{constructor({value:e=ii,...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}'`}};Ql.NAME="BaseStringBlock";var Xl=class extends Wn(Nt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Xl.NAME="PrimitiveValueBlock";var p6,jl=class extends Et{constructor(e={}){super(e,Xl),this.idBlock.isConstructed=!1}};p6=jl;G.Primitive=p6;jl.NAME="PRIMITIVE";function qv(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 Pu(r,e=0,t=r.length){let n=e,o=new Et({},Nt),s=new $n;if(!qn(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=Et;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=qv(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 cs(r){if(!r.byteLength){let e=new Et({},Nt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Pu(me.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function Wv(r,e){return r?1:e}var yn=class extends Nt{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(!qn(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(;Wv(this.isIndefiniteForm,n)>0;){let i=Pu(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===Ta)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Ta?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new _a;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}};yn.NAME="ConstructedValueBlock";var m6,So=class extends Et{constructor(e={}){super(e,yn),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} :`}};s6=Eo;G.Constructed=s6;Eo.NAME="CONSTRUCTED";var Ql=class extends Lt{fromBER(e,t,n){return t}toBER(e){return Yr}};Ql.override="EndOfContentValueBlock";var i6,Xl=class extends bt{constructor(e={}){super(e,Ql),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};i6=Xl;G.EndOfContent=i6;Xl.NAME=Aa;var a6,Vn=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}`}};a6=Vn;G.Null=a6;Vn.NAME="NULL";var jl=class extends Wn(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 qn(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,W0.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};jl.NAME="BooleanValueBlock";var c6,Zl=class extends bt{constructor(e={}){super(e,jl),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}`}};c6=Zl;G.Boolean=c6;Zl.NAME="BOOLEAN";var Jl=class extends Wn(yn){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=yn.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===Aa){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==t6)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?yn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Jl.NAME="OctetStringValueBlock";var l6,Kn=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},Jl),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?Eo.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)}};l6=Kn;G.OctetString=l6;Kn.NAME=t6;var eu=class extends Wn(yn){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=yn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Aa){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==r6)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(!qn(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 yn.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}}};eu.NAME="BitStringValueBlock";var u6,Zs=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},eu),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 Eo.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)}`}}};u6=Zs;G.BitString=u6;Zs.NAME=r6;var d6;function Uv(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=Kl(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=Kl(t,s)),s}function e6(r){if(r>=va.length)for(let e=va.length;e<=r;e++){let t=new Uint8Array([0]),n=va[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=Kl(t,n)),va.push(n)}return va[r]}function Fv(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 Ia=class extends Wn(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=W0.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(j4(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=Fv(e6(n),t),i="-";break;default:t=Uv(t,e6(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=J4.charAt(t[c]));return a===!1&&(i+=J4.charAt(0)),i}};d6=Ia;Ia.NAME="IntegerValueBlock";Object.defineProperty(d6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var f6,Je=class r extends bt{constructor(e={}){super(e,Ia),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Hl(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Hl();let t=BigInt(e),n=new Sa,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()}`}};f6=Je;G.Integer=f6;Je.NAME="INTEGER";var h6,tu=class extends Je{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};h6=tu;G.Enumerated=h6;tu.NAME="ENUMERATED";var _a=class extends Wn(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(!qn(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){Hl();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=xo(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}}};_a.NAME="sidBlock";var ru=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 _a;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 z0(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 _a;if(o>Number.MAX_SAFE_INTEGER){Hl();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}};ru.NAME="ObjectIdentifierValueBlock";var p6,Ir=class extends bt{constructor(e={}){super(e,ru),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()}}};p6=Ir;G.ObjectIdentifier=p6;Ir.NAME="OBJECT IDENTIFIER";var ka=class extends Wn($n){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(!qn(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=xo(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}}};ka.NAME="relativeSidBlock";var nu=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 ka;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 z0(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 ka;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}};nu.NAME="RelativeObjectIdentifierValueBlock";var m6,ou=class extends bt{constructor(e={}){super(e,nu),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()}}};m6=ou;G.RelativeObjectIdentifier=m6;ou.NAME="RelativeObjectIdentifier";var g6,ut=class extends Eo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};g6=ut;G.Sequence=g6;ut.NAME="SEQUENCE";var y6,su=class extends Eo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};y6=su;G.Set=y6;su.NAME="SET";var iu=class extends Wn(Lt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=Js}toJSON(){return{...super.toJSON(),value:this.value}}};iu.NAME="StringValueBlock";var au=class extends iu{};au.NAME="SimpleStringValueBlock";var Mt=class extends zl{constructor({...e}={}){super(e,au)}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 cu=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}};cu.NAME="Utf8StringValueBlock";var w6,Hn=class extends cu{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};w6=Hn;G.Utf8String=w6;Hn.NAME="UTF8String";var lu=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))}};lu.NAME="BmpStringValueBlock";var b6,uu=class extends lu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};b6=uu;G.BmpString=b6;uu.NAME="BMPString";var du=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=xo(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}};du.NAME="UniversalStringValueBlock";var x6,fu=class extends du{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};x6=fu;G.UniversalString=x6;fu.NAME="UniversalString";var E6,hu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};E6=hu;G.NumericString=E6;hu.NAME="NumericString";var v6,pu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};v6=pu;G.PrintableString=v6;pu.NAME="PrintableString";var S6,mu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};S6=mu;G.TeletexString=S6;mu.NAME="TeletexString";var A6,gu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};A6=gu;G.VideotexString=A6;gu.NAME="VideotexString";var I6,yu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};I6=yu;G.IA5String=I6;yu.NAME="IA5String";var _6,wu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};_6=wu;G.GraphicString=_6;wu.NAME="GraphicString";var k6,Ta=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};k6=Ta;G.VisibleString=k6;Ta.NAME="VisibleString";var T6,bu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};T6=bu;G.GeneralString=T6;bu.NAME="GeneralString";var C6,xu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};C6=xu;G.CharacterString=C6;xu.NAME="CharacterString";var P6,Ca=class extends Ta{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]=Jt(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=Jt(this.month,2),t[2]=Jt(this.day,2),t[3]=Jt(this.hour,2),t[4]=Jt(this.minute,2),t[5]=Jt(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}}};P6=Ca;G.UTCTime=P6;Ca.NAME="UTCTime";var R6,Eu=class extends Ca{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(Jt(this.year,4)),t.push(Jt(this.month,2)),t.push(Jt(this.day,2)),t.push(Jt(this.hour,2)),t.push(Jt(this.minute,2)),t.push(Jt(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(Jt(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};R6=Eu;G.GeneralizedTime=R6;Eu.NAME="GeneralizedTime";var L6,vu=class extends Hn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};L6=vu;G.DATE=L6;vu.NAME="DATE";var D6,Su=class extends Hn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};D6=Su;G.TimeOfDay=D6;Su.NAME="TimeOfDay";var N6,Au=class extends Hn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};N6=Au;G.DateTime=N6;Au.NAME="DateTime";var B6,Iu=class extends Hn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};B6=Iu;G.Duration=B6;Iu.NAME="Duration";var O6,_u=class extends Hn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};O6=_u;G.TIME=O6;_u.NAME="TIME";function F(r,e="utf8"){let t=Sl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function dt(r){if(isNaN(r)||r<=0)throw new C("random bytes length must be a Number bigger than 0");return es(r)}var Pa=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Ra=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Tu=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var M6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Tu("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 er=M6;async function U6(r){let e=await er.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 $v(e);return{privateKey:t[0],publicKey:t[1]}}async function F6(r,e){let t=await er.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await er.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function $6(r,e,t){let n=await er.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return er.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function $v(r){if(r.privateKey==null||r.publicKey==null)throw new C("Private and public key are required");return Promise.all([er.get().subtle.exportKey("jwk",r.privateKey),er.get().subtle.exportKey("jwk",r.publicKey)])}function Q0(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 ei=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=La.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 $6(this._key,t,e)}},Da=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=La.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return F6(this._key,e)}};var Cu=8192,X0=18;function V6(r){let{result:e}=is(r),t=e.valueBlock.value;return{n:F(wn(t[1].toBigInt()),"base64url"),e:F(wn(t[2].toBigInt()),"base64url"),d:F(wn(t[3].toBigInt()),"base64url"),p:F(wn(t[4].toBigInt()),"base64url"),q:F(wn(t[5].toBigInt()),"base64url"),dp:F(wn(t[6].toBigInt()),"base64url"),dq:F(wn(t[7].toBigInt()),"base64url"),qi:F(wn(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function Vv(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 ut({value:[new Je({value:0}),Je.fromBigInt(bn(O(r.n,"base64url"))),Je.fromBigInt(bn(O(r.e,"base64url"))),Je.fromBigInt(bn(O(r.d,"base64url"))),Je.fromBigInt(bn(O(r.p,"base64url"))),Je.fromBigInt(bn(O(r.q,"base64url"))),Je.fromBigInt(bn(O(r.dp,"base64url"))),Je.fromBigInt(bn(O(r.dq,"base64url"))),Je.fromBigInt(bn(O(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function K6(r){let{result:e}=is(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:F(wn(t[0].toBigInt()),"base64url"),e:F(wn(t[1].toBigInt()),"base64url")}}function j0(r){if(r.n==null||r.e==null)throw new C("JWK was missing components");let t=new ut({value:[new ut({value:[new Ir({value:"1.2.840.113549.1.1.1"}),new Vn]}),new Zs({valueHex:new ut({value:[Je.fromBigInt(bn(O(r.n,"base64url"))),Je.fromBigInt(bn(O(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function wn(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 bn(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 Pu(r){let e=V6(r);return H6(e)}function Z0(r){let e=K6(r);if(Q0(e)>Cu)throw new Pn("Key size is too large");let t=Sr(gn.encode({Type:Ge.RSA,Data:r})),n=Xt(X0,t);return new ei(e,n)}function H6(r){if(Q0(r)>Cu)throw new C("Key size is too large");let e=q6(r),t=Sr(gn.encode({Type:Ge.RSA,Data:j0(e.publicKey)})),n=Xt(X0,t);return new Da(e.privateKey,new ei(e.publicKey,n))}async function J0(r){if(r>Cu)throw new C("Key size is too large");let e=await U6(r),t=Sr(gn.encode({Type:Ge.RSA,Data:j0(e.publicKey)})),n=Xt(X0,t);return new Da(e.privateKey,new ei(e.publicKey,n))}function q6(r){if(r==null)throw new C("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var Ru=class extends qs{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 Hs(this),this.iHash.update(e),this}digestInto(e){Hs(this),Ks(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()}},vo=(r,e,t)=>new Ru(r,e).update(t).digest();vo.create=(r,e)=>new Ru(r,e);function W6(r){r.lowS!==void 0&&Wr("lowS",r.lowS),r.prehash!==void 0&&Wr("prehash",r.prehash)}function Kv(r){let e=ga(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:Hv,hexToBytes:qv}=Bl,zn={Err:class extends Error{constructor(e=""){super(e)}},_tlv:{encode:(r,e)=>{let{Err:t}=zn;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}=zn,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}=zn;if(r<Gn)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}=zn;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 Hv(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=zn,o=typeof r=="string"?qv(r):r;zs(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}=zn,n=`${e.encode(2,t.encode(r.r))}${e.encode(2,t.encode(r.s))}`;return e.encode(48,n)}},Gn=BigInt(0),pt=BigInt(1),rB=BigInt(2),z6=BigInt(3),nB=BigInt(4);function Wv(r){let e=Kv(r),{Fp:t}=e,n=yo(e.n,e.nBitLength),o=e.toBytes||((m,g,y)=>{let b=g.toAffine();return Un(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 pa(m,pt,e.n)}function c(m){let{allowedPrivateKeyLengths:g,nByteLength:y,wrapPrivateKey:b,n:w}=e;if(g&&typeof m!="bigint"){if(mo(m)&&(m=Bn(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:On(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,pt,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 k=t.mul(y,g),T=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:k,y:T}}),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 Ul(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,v=t.eql(t.mul(y,T),t.mul(x,w)),S=t.eql(t.mul(b,T),t.mul(k,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,z6),{px:w,py:x,pz:k}=this,T=t.ZERO,v=t.ZERO,S=t.ZERO,_=t.mul(w,w),$=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),v=t.mul(b,N),v=t.add(T,v),T=t.sub($,v),v=t.add($,v),v=t.mul(T,v),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),v=t.add(v,_),N=t.mul(x,k),N=t.add(N,N),_=t.mul(N,M),T=t.sub(T,_),S=t.mul(N,$),S=t.add(S,S),S=t.add(S,S),new f(T,v,S)}add(g){l(g);let{px:y,py:b,pz:w}=this,{px:x,py:k,pz:T}=g,v=t.ZERO,S=t.ZERO,_=t.ZERO,$=e.a,N=t.mul(e.b,z6),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),v=t.add(k,T),A=t.mul(A,v),v=t.add(B,L),A=t.sub(A,v),_=t.mul($,I),v=t.mul(N,L),_=t.add(v,_),v=t.sub(B,_),_=t.add(B,_),S=t.mul(v,_),B=t.add(M,M),B=t.add(B,M),L=t.mul($,L),I=t.mul(N,I),B=t.add(B,L),L=t.sub(M,L),L=t.mul($,L),I=t.add(I,L),M=t.mul(B,I),S=t.add(S,M),M=t.mul(A,I),v=t.mul(D,v),v=t.sub(v,M),M=t.mul(D,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){wt("scalar",g,Gn,e.n);let y=f.ZERO;if(g===Gn)return y;if(g===pt)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),v=y,S=y,_=this;for(;x>Gn||T>Gn;)x&pt&&(v=v.add(_)),T&pt&&(S=S.add(_)),_=_.double(),x>>=pt,T>>=pt;return w&&(v=v.negate()),k&&(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;wt("scalar",g,pt,b);let w,x;if(y){let{k1neg:k,k1:T,k2neg:v,k2:S}=y.splitScalar(g),{p:_,f:$}=this.wNAF(T),{p:N,f:M}=this.wNAF(S);_=p.constTimeNegate(k,_),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: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,v)=>v===Gn||v===pt||!T.equals(w)?T.multiplyUnsafe(v):T.multiply(v),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===pt)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===pt?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),Bn(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=Ml(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:i,isWithinCurveOrder:a}}function zv(r){let e=ga(r);return vr(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function G6(r){let e=zv(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 Ol(L,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:d,isWithinCurveOrder:u}=Wv({...e,toBytes(L,D,I){let A=D.toAffine(),R=t.toBytes(A.x),P=Un;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=On(A);if(!pa(R,pt,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&pt)===pt;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=>Bn(go(L,e.nByteLength));function h(L){let D=n>>pt;return L>D}function p(L){return h(L)?i(-L):L}let m=(L,D,I)=>On(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}=zn.toSig(Me("DER",D));return new g(I,A)}assertValidity(){wt("r",this.r,pt,n),wt("s",this.s,pt,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 rs(this.toDERHex())}toDERHex(){return zn.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return rs(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=B0(e.n);return O4(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=mo(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=On(L),I=L.length*8-e.nBitLength;return I>0?D>>BigInt(I):D},T=e.bits2int_modN||function(L){return i(k(L))},v=ma(e.nBitLength);function S(L){return wt(`num < 2^${e.nBitLength}`,L,Gn,v),go(L,e.nByteLength)}function _(L,D,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),L=Me("msgHash",L),W6(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=Un(...le),be=j;function De(Ne){let Fe=k(Ne);if(!u(Fe))return;let Nt=a(Fe),st=c.BASE.multiply(Fe).toAffine(),Kt=i(st.x);if(Kt===Gn)return;let Cn=i(Nt*i(be+Kt*ae));if(Cn===Gn)return;let ea=(st.x===Kt?0:2)|Number(st.y&pt),ta=Cn;return P&&h(Cn)&&(ta=p(Cn),ea^=1),new g(Kt,ta,ea)}return{seed:fe,k2sig:De}}let $={lowS:e.lowS,prehash:!1},N={lowS:e.lowS,prehash:!1};function M(L,D,I=$){let{seed:A,k2sig:R}=_(L,D,I),P=e;return P0(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");W6(A);let{lowS:P,prehash:q}=A,z,j;try{if(typeof R=="string"||mo(R))try{z=g.fromDER(R)}catch(st){if(!(st instanceof zn.Err))throw st;z=g.fromCompact(R)}else if(typeof R=="object"&&typeof R.r=="bigint"&&typeof R.s=="bigint"){let{r:st,s:Kt}=R;z=new g(st,Kt)}else throw new Error("PARSE");j=c.fromHex(I)}catch(st){if(st.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 Gv(r){return{hash:r,hmac:(e,...t)=>vo(r,e,v0(...t)),randomBytes:es}}function Y6(r,e){let t=n=>G6({...r,...Gv(n)});return Object.freeze({...t(e),create:t})}var j6=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Q6=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),Yv=BigInt(1),e2=BigInt(2),X6=(r,e)=>(r+e/e2)/e;function Qv(r){let e=j6,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,e2,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,e2,e);if(!t2.eql(t2.sqr(T),r))throw new Error("Cannot find square root");return T}var t2=yo(j6,void 0,void 0,{sqrt:Qv}),_r=Y6({a:BigInt(0),b:BigInt(7),Fp:t2,n:Q6,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=Q6,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-Yv*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=t,i=BigInt("0x100000000000000000000000000000000"),a=X6(s*r,e),c=X6(-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),fB=BigInt(0);var hB=_r.ProjectivePoint;function r2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function Z6(r,e){let t=ct.digest(e instanceof Uint8Array?e:e.subarray());if(r2(t))return t.then(({digest:n})=>_r.sign(n,r).toDERRawBytes()).catch(n=>{throw new Pa(String(n))});try{return _r.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Pa(String(n))}}function J6(r,e,t){let n=ct.digest(t instanceof Uint8Array?t:t.subarray());if(r2(n))return n.then(({digest:o})=>_r.verify(e,o,r)).catch(o=>{throw new Ra(String(o))});try{return _r.verify(e,n.digest,r)}catch(o){throw new Ra(String(o))}}var Na=class{type="secp256k1";raw;_key;constructor(e){this._key=r8(e),this.raw=e8(this._key)}toMultihash(){return jt.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 J6(this._key,t,e)}},Ba=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=t8(e),this.publicKey=new Na(t??n8(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return Z6(this.raw,e)}};function n2(r){return new Ba(r)}function o2(r){return new Na(r)}async function o8(){let r=Xv();return new Ba(r)}function e8(r){return _r.ProjectivePoint.fromHex(r).toRawBytes(!0)}function t8(r){try{return _r.getPublicKey(r,!0),r}catch(e){throw new ra(String(e))}}function r8(r){try{return _r.ProjectivePoint.fromHex(r),r}catch(e){throw new Pn(String(e))}}function n8(r){try{return _r.getPublicKey(r,!0)}catch(e){throw new ra(String(e))}}function Xv(){return _r.utils.randomPrivateKey()}async function Lu(r,e){if(r==="Ed25519")return Y4();if(r==="secp256k1")return o8();if(r==="RSA")return J0(e??2048);throw new Fr}function et(r){let{Type:e,Data:t}=gn.decode(r),n=t??new Uint8Array;switch(e){case Ge.RSA:return Z0(n);case Ge.Ed25519:return V0(n);case Ge.secp256k1:return o2(n);default:throw new Fr}}function Du(r){let{Type:e,Data:t}=gn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ge.Ed25519:return V0(n);case Ge.secp256k1:return o2(n);default:throw new Fr}}function Rt(r){return gn.encode({Type:Ge[r.type],Data:r.raw})}function s8(r){let e=Ea.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ge.RSA:return Pu(t);case Ge.Ed25519:return $0(t);case Ge.secp256k1:return n2(t);default:throw new Fr}}function i8(r){return r.byteLength===64?$0(r):r.byteLength===32?n2(r):Pu(r)}function ti(r){return Ea.encode({Type:Ge[r.type],Data:r.raw})}var a8=Symbol.for("nodejs.util.inspect.custom"),jv=114,Oa=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()})`}[Xc]=!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(jv,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")}[a8](){return`PeerId(${this.toString()})`}},Ma=class extends Oa{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Ua=class extends Oa{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Fa=class extends Oa{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},Zv=2336,$a=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=jt.digest(O(this.url))}[a8](){return`PeerId(${this.url})`}[Xc]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return Z.createV1(Zv,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=F(e)),e.toString()===this.toString())}};var Jv=114,c8=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 mt(t)}function xn(r){if(r.type==="Ed25519")return new Ua({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Fa({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new Ma({multihash:r.toCID().multihash,publicKey:r});throw new Fr}function l8(r){return xn(r.publicKey)}function mt(r){if(tS(r))return new Ma({multihash:r});if(eS(r))try{let e=Du(r);if(e.type==="Ed25519")return new Ua({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Fa({multihash:r,publicKey:e})}catch{let t=F(r.digest);return new $a(new URL(t))}throw new oo("Supplied PeerID Multihash is invalid")}function En(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==Jv&&r.code!==c8)throw new ol("Supplied PeerID CID is invalid");if(r.code===c8){let e=F(r.multihash.digest);return new $a(new URL(e))}return mt(r.multihash)}function eS(r){return r.code===jt.code}function tS(r){return r.code===ct.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 Nu(r){let e=Te(Ee.decode(`z${r}`));return mt(e)}var gt=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 tr=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=Nu(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Nu(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return as(this.set.values(),e=>Nu(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 u8(r,e,t,n){jo(r);let o=T4({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(lo(s),lo(i),lo(a),s<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=qr(e),l=qr(t),d=new Uint8Array(i),u=vo.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function d8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function f8(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=u8(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 d8(a,c,i,l,f)}async function Bu(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=u8(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 _4(o-1,i,()=>{c._cloneInto(d).update(h).digestInto(h);for(let y=0;y<g.length;y++)g[y]^=h[y]})}return d8(c,l,a,d,h)}var Va=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),So=new Uint32Array(80),s2=class extends uo{constructor(){super(64,20,8,!1),this.A=Va[0]|0,this.B=Va[1]|0,this.C=Va[2]|0,this.D=Va[3]|0,this.E=Va[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)So[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)So[c]=Pl(So[c-3]^So[c-8]^So[c-14]^So[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=Rl(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=Pl(n,5)+l+a+d+So[c]|0;a=i,i=s,s=Pl(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(){So.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},h8=Ws(()=>new s2);var p8={sha1:h8,"sha2-256":Sr,"sha2-512":po};function Ka(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(p8).join(" / ");throw new C(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let s=p8[o],i=f8(s,r,e,{c:t,dkLen:n});return nt.encode(i).substring(1)}var i2=kt(Mu(),1);var nS=Math.LN2*Math.LN2,Uu=class{seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=sS(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=i2.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=i2.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 a2(r,e=.005){let t=oS(r,e);return new Uu(t)}function oS(r,e=.005){let t=Math.round(-1*r*Math.log(e)/nS),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function sS(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(dt(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var c2=64,Qr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>c2)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 l2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},y8={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},w8=new globalThis.TextEncoder;function iS(r,e){let t=l2[e],n=y8[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function aS(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=l2[e],o=y8[e],s=r;for(;s.length>0;){let i=w8.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 u2(r,{size:e=32,utf8Buffer:t}={}){if(!l2[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 aS(r,e,t);r=w8.encode(r)}return iS(r,e)}var cS=kt(Mu(),1);var qa={hash:r=>Number(u2(r,{size:32})),hashV:(r,e)=>lS(qa.hash(r,e))};function lS(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),O(e,"base16")}var uS=500,Wa=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??qa,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<uS;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}},dS={1:.5,2:.84,4:.95,8:.98};function fS(r=.001){return r>.002?2:r>1e-5?4:8}function b8(r,e=.001){let t=fS(e),n=dS[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),c2);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var Fu=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??qa,this.seed=e.seed??cs(0,Math.pow(2,10)),this.filterSeries=[new Wa({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 Wa({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 za(r,e=.001,t){return new Fu({...b8(r,e),...t??{}})}var $u=class{filter;constructor(e,t){this.filter=za(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 d2(r,e=.001){return new $u(r,e)}var f2=class extends gt{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 Ga(r){let{name:e,metrics:t}=r,n;return t!=null?n=new f2({name:e,metrics:t}):n=new gt,n}var Yn=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=nt.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=nt.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=nt.encode(e.multihash.bytes);this.blocks.set(n,t)}};function hS(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 x8=hS;function h2(r){return x8([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var Vu=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 Yn,n=new Set;for(let[o,s]of this.wants.entries())try{let i=await this.blockstore.get(s.cid,e);s.wantType===Ze.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:h2(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:h2(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 Ku=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=Ga({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 Vu({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===Ze.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??Ze.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 pS(r,e){try{if(typeof r=="string"&&r.length>0)return mS(r);if(typeof r=="number"&&isFinite(r))return e?.long?yS(r):gS(r);throw new Error("Value is not a string or number.")}catch(t){let n=wS(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function mS(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 qu=pS;function gS(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 yS(r){let e=Math.abs(r);return e>=864e5?Hu(r,e,864e5,"day"):e>=36e5?Hu(r,e,36e5,"hour"):e>=6e4?Hu(r,e,6e4,"minute"):e>=1e3?Hu(r,e,1e3,"second"):`${r} ms`}function Hu(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function wS(r){return typeof r=="object"&&r!==null&&"message"in r}function p2(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=qu,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,v)=>{if(T==="%%")return"%";x++;let S=t.formatters[v];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 Wu=IS(),bS=["#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 xS(){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 ES(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+qu(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 vS=console.debug??console.log??(()=>{});function SS(r){try{r?Wu?.setItem("debug",r):Wu?.removeItem("debug")}catch{}}function AS(){let r;try{r=Wu?.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function IS(){try{return localStorage}catch{}}function _S(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var E8=p2({formatArgs:ES,save:SS,load:AS,useColors:xS,setupFormatters:_S,colors:bS,storage:Wu,log:vS});var fr=E8;fr.formatters.b=r=>r==null?"undefined":Ee.baseEncode(r);fr.formatters.t=r=>r==null?"undefined":at.baseEncode(r);fr.formatters.m=r=>r==null?"undefined":nt.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 kS(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 Ao(){return{forComponent(r){return hr(r)}}}function hr(r){let e=kS(`${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 g2=kt(S8(),1);var ri=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},y2=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},A8=r=>globalThis.DOMException===void 0?new y2(r):new DOMException(r),I8=r=>{let e=r.reason===void 0?A8("This operation was aborted."):r.reason;return e instanceof Error?e:A8(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(I8(f)),f.addEventListener("abort",()=>{d(I8(f))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new ri;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 w2(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=w2(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 g2.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 ri&&!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 Gu(r){let e=[pr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var b2=60;function Yu(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??b2,data:e.data instanceof Uint8Array?F(e.data):e.data}))}}var PS=4;function x2(r,e={}){let t=new kr({concurrency:e.queryConcurrency??PS});return async(n,o={})=>{let s=new URLSearchParams;s.set("name",n),Gu(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=Yu(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 _8(){return[x2("https://cloudflare-dns.com/dns-query"),x2("https://dns.google/resolve")]}var T8=kt(E2(),1);var v2=class{lru;constructor(e){this.lru=(0,T8.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 Yu({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??b2)*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 C8(r){return new v2(r)}var RS=1e3,Qu=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=C8(e.cacheSize??RS),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["."]=_8())}async query(e,t={}){let n=Gu(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 Xu(r={}){return new Qu(r)}var LS=["string","number","bigint","symbol"],DS=["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 P8(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(LS.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(NS(r))return"Buffer";let t=BS(r);return t||"Object"}function NS(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function BS(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(DS.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 ni=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",OS=new TextDecoder,MS=new TextEncoder;function ju(r){return ni&&globalThis.Buffer.isBuffer(r)}function Xa(r){return r instanceof Uint8Array?ju(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var N8=ni?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):L8(r,e,t):(r,e,t)=>t-e>64?OS.decode(r.subarray(e,t)):L8(r,e,t),Zu=ni?r=>r.length>64?globalThis.Buffer.from(r):R8(r):r=>r.length>64?MS.encode(r):R8(r),vn=r=>Uint8Array.from(r),oi=ni?(r,e,t)=>ju(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),B8=ni?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Xa(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},O8=ni?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function M8(r,e){if(ju(r)&&ju(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 R8(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 L8(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 S2(n)}var D8=4096;function S2(r){let e=r.length;if(e<=D8)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=D8));return t}var US=256,ja=class{constructor(e=US){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=O8(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=oi(n,0,this.cursor)}else t=B8(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",Qn="CBOR encode error:",Za=[];Za[23]=1;Za[24]=2;Za[25]=3;Za[26]=5;Za[27]=9;function Xn(r,e,t){if(r.length-e<t)throw new Error(`${Q} not enough data for type`)}var yt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){Xn(r,e,1);let n=r[e];if(t.strict===!0&&n<yt[0])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function gr(r,e,t){Xn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<yt[1])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){Xn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<yt[2])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){Xn(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<yt[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 U8(r,e,t,n){return new U(E.uint,mr(r,e+1,n),2)}function F8(r,e,t,n){return new U(E.uint,gr(r,e+1,n),3)}function $8(r,e,t,n){return new U(E.uint,yr(r,e+1,n),5)}function V8(r,e,t,n){return new U(E.uint,wr(r,e+1,n),9)}function Tr(r,e){return xt(r,0,e.value)}function xt(r,e,t){if(t<yt[0]){let n=Number(t);r.push([e|n])}else if(t<yt[1]){let n=Number(t);r.push([e|24,n])}else if(t<yt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<yt[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<yt[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<yt[0]?1:e<yt[1]?2:e<yt[2]?3:e<yt[3]?5:9};Tr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function K8(r,e,t,n){return new U(E.negint,-1-mr(r,e+1,n),2)}function H8(r,e,t,n){return new U(E.negint,-1-gr(r,e+1,n),3)}function q8(r,e,t,n){return new U(E.negint,-1-yr(r,e+1,n),5)}var A2=BigInt(-1),W8=BigInt(1);function z8(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,A2-BigInt(o),9)}function Ju(r,e){let t=e.value,n=typeof t=="bigint"?t*A2-W8:t*-1-1;xt(r,e.type.majorEncoded,n)}Ju.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*A2-W8:t*-1-1;return n<yt[0]?1:n<yt[1]?2:n<yt[2]?3:n<yt[3]?5:9};Ju.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Ja(r,e,t,n){Xn(r,e,t+n);let o=oi(r,e+t,e+t+n);return new U(E.bytes,o,t+n)}function G8(r,e,t,n){return Ja(r,e,1,t)}function Y8(r,e,t,n){return Ja(r,e,2,mr(r,e+1,n))}function Q8(r,e,t,n){return Ja(r,e,3,gr(r,e+1,n))}function X8(r,e,t,n){return Ja(r,e,5,yr(r,e+1,n))}function j8(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 Ja(r,e,9,o)}function e1(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===E.string?Zu(r.value):r.value),r.encodedBytes}function si(r,e){let t=e1(e);xt(r,e.type.majorEncoded,t.length),r.push(t)}si.encodedSize=function(e){let t=e1(e);return xt.encodedSize(t.length)+t.length};si.compareTokens=function(e,t){return $S(e1(e),e1(t))};function $S(r,e){return r.length<e.length?-1:r.length>e.length?1:M8(r,e)}function ec(r,e,t,n,o){let s=t+n;Xn(r,e,s);let i=new U(E.string,N8(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=oi(r,e+t,e+s)),i}function Z8(r,e,t,n){return ec(r,e,1,t,n)}function J8(r,e,t,n){return ec(r,e,2,mr(r,e+1,n),n)}function e5(r,e,t,n){return ec(r,e,3,gr(r,e+1,n),n)}function t5(r,e,t,n){return ec(r,e,5,yr(r,e+1,n),n)}function r5(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 ec(r,e,9,o,n)}var n5=si;function ii(r,e,t,n){return new U(E.array,n,t)}function o5(r,e,t,n){return ii(r,e,1,t)}function s5(r,e,t,n){return ii(r,e,2,mr(r,e+1,n))}function i5(r,e,t,n){return ii(r,e,3,gr(r,e+1,n))}function a5(r,e,t,n){return ii(r,e,5,yr(r,e+1,n))}function c5(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 ii(r,e,9,o)}function l5(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 t1(r,e){xt(r,E.array.majorEncoded,e.value)}t1.compareTokens=Tr.compareTokens;t1.encodedSize=function(e){return xt.encodedSize(e.value)};function ai(r,e,t,n){return new U(E.map,n,t)}function u5(r,e,t,n){return ai(r,e,1,t)}function d5(r,e,t,n){return ai(r,e,2,mr(r,e+1,n))}function f5(r,e,t,n){return ai(r,e,3,gr(r,e+1,n))}function h5(r,e,t,n){return ai(r,e,5,yr(r,e+1,n))}function p5(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 ai(r,e,9,o)}function m5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return ai(r,e,1,1/0)}function r1(r,e){xt(r,E.map.majorEncoded,e.value)}r1.compareTokens=Tr.compareTokens;r1.encodedSize=function(e){return xt.encodedSize(e.value)};function g5(r,e,t,n){return new U(E.tag,t,1)}function y5(r,e,t,n){return new U(E.tag,mr(r,e+1,n),2)}function w5(r,e,t,n){return new U(E.tag,gr(r,e+1,n),3)}function b5(r,e,t,n){return new U(E.tag,yr(r,e+1,n),5)}function x5(r,e,t,n){return new U(E.tag,wr(r,e+1,n),9)}function n1(r,e){xt(r,E.tag.majorEncoded,e.value)}n1.compareTokens=Tr.compareTokens;n1.encodedSize=function(e){return xt.encodedSize(e.value)};var zS=20,GS=21,YS=22,QS=23;function E5(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 v5(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 I2(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 S5(r,e,t,n){return I2(_2(r,e+1),3,n)}function A5(r,e,t,n){return I2(k2(r,e+1),5,n)}function I5(r,e,t,n){return I2(C5(r,e+1),9,n)}function o1(r,e,t){let n=e.value;if(n===!1)r.push([E.float.majorEncoded|zS]);else if(n===!0)r.push([E.float.majorEncoded|GS]);else if(n===null)r.push([E.float.majorEncoded|YS]);else if(n===void 0)r.push([E.float.majorEncoded|QS]);else{let o,s=!1;(!t||t.float64!==!0)&&(k5(n),o=_2(jr,1),n===o||Number.isNaN(n)?(jr[0]=249,r.push(jr.slice(0,3)),s=!0):(T5(n),o=k2(jr,1),n===o&&(jr[0]=250,r.push(jr.slice(0,5)),s=!0))),s||(XS(n),o=C5(jr,1),jr[0]=251,r.push(jr.slice(0,9)))}}o1.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){k5(n);let o=_2(jr,1);if(n===o||Number.isNaN(n))return 3;if(T5(n),o=k2(jr,1),n===o)return 5}return 9};var _5=new ArrayBuffer(9),Cr=new DataView(_5,1),jr=new Uint8Array(_5,0);function k5(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 _2(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 T5(r){Cr.setFloat32(0,r,!1)}function k2(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 XS(r){Cr.setFloat64(0,r,!1)}function C5(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)}o1.compareTokens=Tr.compareTokens;function ve(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function s1(r){return()=>{throw new Error(`${Q} ${r}`)}}var K=[];for(let r=0;r<=23;r++)K[r]=ve;K[24]=U8;K[25]=F8;K[26]=$8;K[27]=V8;K[28]=ve;K[29]=ve;K[30]=ve;K[31]=ve;for(let r=32;r<=55;r++)K[r]=ve;K[56]=K8;K[57]=H8;K[58]=q8;K[59]=z8;K[60]=ve;K[61]=ve;K[62]=ve;K[63]=ve;for(let r=64;r<=87;r++)K[r]=G8;K[88]=Y8;K[89]=Q8;K[90]=X8;K[91]=j8;K[92]=ve;K[93]=ve;K[94]=ve;K[95]=s1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)K[r]=Z8;K[120]=J8;K[121]=e5;K[122]=t5;K[123]=r5;K[124]=ve;K[125]=ve;K[126]=ve;K[127]=s1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)K[r]=o5;K[152]=s5;K[153]=i5;K[154]=a5;K[155]=c5;K[156]=ve;K[157]=ve;K[158]=ve;K[159]=l5;for(let r=160;r<=183;r++)K[r]=u5;K[184]=d5;K[185]=f5;K[186]=h5;K[187]=p5;K[188]=ve;K[189]=ve;K[190]=ve;K[191]=m5;for(let r=192;r<=215;r++)K[r]=g5;K[216]=y5;K[217]=w5;K[218]=b5;K[219]=x5;K[220]=ve;K[221]=ve;K[222]=ve;K[223]=ve;for(let r=224;r<=243;r++)K[r]=s1("simple values are not supported");K[244]=ve;K[245]=ve;K[246]=ve;K[247]=E5;K[248]=s1("simple values are not supported");K[249]=S5;K[250]=A5;K[251]=I5;K[252]=ve;K[253]=ve;K[254]=ve;K[255]=v5;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 P5(r){switch(r.type){case E.false:return vn([244]);case E.true:return vn([245]);case E.null:return vn([246]);case E.bytes:return r.value.length?void 0:vn([64]);case E.string:return r.value===""?vn([96]):void 0;case E.array:return r.value===0?vn([128]):void 0;case E.map:return r.value===0?vn([160]):void 0;case E.uint:return r.value<24?vn([Number(r.value)]):void 0;case E.negint:if(r.value>=-24)return vn([31-Number(r.value)])}}var ZS={float64:!1,mapSorter:tA,quickEncodeToken:P5};function JS(){let r=[];return r[E.uint.major]=Tr,r[E.negint.major]=Ju,r[E.bytes.major]=si,r[E.string.major]=n5,r[E.array.major]=t1,r[E.map.major]=r1,r[E.tag.major]=n1,r[E.float.major]=o1,r}var R5=JS(),T2=new ja,a1=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(`${Qn} object contains circular references`);return new r(t,e)}},Io={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)},_o={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?Io.true:Io.false},null(r,e,t,n){return Io.null},undefined(r,e,t,n){return Io.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?[Io.emptyArray,new U(E.break)]:Io.emptyArray;n=a1.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=i1(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?[Io.emptyMap,new U(E.break)]:Io.emptyMap;n=a1.createCheck(n,r);let a=[],c=0;for(let l of s)a[c++]=[i1(l,t,n),i1(o?r.get(l):r[l],t,n)];return eA(a,t),t.addBreakTokens?[new U(E.map,i),a,new U(E.break)]:[new U(E.map,i),a]}};_o.Map=_o.Object;_o.Buffer=_o.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))_o[`${r}Array`]=_o.DataView;function i1(r,e={},t){let n=P8(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||_o[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=_o[n];if(!s)throw new Error(`${Qn} unsupported type: ${n}`);return s(r,n,e,t)}function eA(r,e){e.mapSorter&&r.sort(e.mapSorter)}function tA(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=R5[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function L5(r,e,t,n){if(Array.isArray(e))for(let o of e)L5(r,o,t,n);else t[e.type.major](r,e,n)}function C2(r,e,t){let n=i1(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 Xa(a.chunks[0])}}return T2.reset(),L5(T2,n,e,t),T2.toBytes(!0)}function ds(r,e){return e=Object.assign({},ZS,e),C2(r,R5,e)}var rA={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},c1=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}},tc=Symbol.for("DONE"),l1=Symbol.for("BREAK");function nA(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=ci(e,t);if(s===l1){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(s===tc)throw new Error(`${Q} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function oA(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===l1){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===tc)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===tc)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 tc;let t=r.next();if(t.type===E.break)return l1;if(t.type.terminal)return t.value;if(t.type===E.array)return nA(t,r,e);if(t.type===E.map)return oA(t,r,e);if(t.type===E.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 P2(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Q} data to decode must be a Uint8Array`);e=Object.assign({},rA,e);let t=e.tokenizer||new c1(r,e),n=ci(t,e);if(n===tc)throw new Error(`${Q} did not find any content to decode`);if(n===l1)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function Jr(r,e){let[t,n]=P2(r,e);if(n.length>0)throw new Error(`${Q} too many terminals, data makes no sense`);return t}var jn="/",D5=new TextEncoder().encode(jn),u1=D5[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]!==u1)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(jn))}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=D5),this._buf[0]!==u1){let e=new Uint8Array(this._buf.byteLength+1);e.fill(u1,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===u1;)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(jn).slice(1)}type(){return sA(this.baseNamespace())}name(){return iA(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(jn)||(e+=jn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(jn):new r(e.slice(0,-1).join(jn))}child(e){return this.toString()===jn?e:e.toString()===jn?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(),...aA(e.map(t=>t.namespaces()))])}};function sA(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function iA(r){let e=r.split(":");return e[e.length-1]}function aA(r){return[].concat(...r)}function d1({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*cA(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*L2(n,o))}else{let t=Z.asCID(e);t!=null?yield[r.join("/"),t]:yield*L2(e,r)}}function*L2(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*cA(s,o)}}function*lA(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*D2(n,o))}else yield*D2(e,r)}function*D2(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*lA(o,n))}}function uA(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 N2=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:d1(),bytes:d1(),value:d1(),asBlock:d1()})}links(){return L2(this.value,[])}tree(){return D2(this.value,[])}get(e="/"){return uA(this.value,e.split("/").filter(Boolean))}};function N5({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 N2({cid:e,bytes:r,value:o})}var U5="/pin/",B5="/pinned-block/",B2=pn,O5=1;function M5(r){return r.version===0&&(r=r.toV1()),new Le(`${U5}${r.toString(B2)}`)}var f1=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=M5(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 ur({concurrency:O5});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=N5({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 Le(`${B5}${B2.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=M5(e),o=await this.datastore.get(n,t),s=Jr(o);await this.datastore.delete(n,t);let i=new ur({concurrency:O5});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:U5+(e.cid!=null?`${e.cid.toString(pn)}`:"")},e)){let o=Z.parse(t.toString().substring(5),pn),s=Jr(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new Le(`${B5}${B2.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}};var O2=1,M2=5;var rc=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"}},nc=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},oc=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var dA=5,h1=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??dA}async start(){await Ht(...this.routers)}async stop(){await qt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new ko("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 ko("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 ko("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 ko("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 To={},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)=>{To[r]==null&&(To[r]=[]),To[r].push(e)};ui.removeEventListener=(r,e)=>{To[r]!=null&&(To[r]=To[r].filter(t=>t===e))};ui.dispatchEvent=function(r,e,t){To[r]!=null&&To[r].forEach(n=>n(e,t))};var U2=ui;var F2="lock:worker:request-read",$2="lock:worker:release-read",V2="lock:master:grant-read",K2="lock:worker:request-write",H2="lock:worker:release-write",q2="lock:master:grant-write";var F5=(r=21)=>Math.random().toString().substring(2);var $5=(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)})}}}))},V5=(r,e,t,n)=>async()=>{let o=F5();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)})},fA={singleProcess:!1},K5=r=>{if(r=Object.assign({},fA,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return U2.addEventListener("message",$5(t,"requestReadLock",F2,$2,V2)),U2.addEventListener("message",$5(t,"requestWriteLock",K2,H2,q2)),t}return{isWorker:!0,readLock:t=>V5(t,F2,V2,$2),writeLock:t=>V5(t,K2,q2,H2)}};var fs={},Co;async function W2(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 hA=(r,e)=>{if(Co.isWorker===!0)return{readLock:Co.readLock(r,e),writeLock:Co.writeLock(r,e)};let t=new kr({concurrency:1}),n;return{async readLock(){if(n!=null)return W2(n,e);n=new kr({concurrency:e.concurrency,autoStart:!1});let o=n,s=W2(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),s},async writeLock(){return n=null,W2(t,e)}}},pA={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function sc(r){let e=Object.assign({},pA,r);return Co==null&&(Co=K5(e),Co.isWorker!==!0&&(Co.addEventListener("requestReadLock",t=>{fs[t.data.name]!=null&&fs[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Co.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]=hA(e.name,e)),fs[e.name]}var p1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=sc({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 z2=new Le("/version"),H5=1;async function q5(r){if(!await r.has(z2)){await r.put(z2,O(`${H5}`));return}let e=await r.get(z2),t=F(e);if(parseInt(t,10)!==H5)throw new Error("Unknown datastore version, a datastore migration may be required")}var Q2={};Qe(Q2,{code:()=>Y2,decode:()=>SA,decodeOptions:()=>xA,encode:()=>vA,encodeOptions:()=>wA,name:()=>EA,toByteView:()=>z5});var W5=42;function z5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function mA(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,W5),new U(E.bytes,t)]}function gA(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function yA(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 G2={float64:!0,typeEncoders:{Object:mA,undefined:gA,number:yA}},wA={...G2,typeEncoders:{...G2.typeEncoders}};function bA(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return Z.decode(r.subarray(1))}var m1={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};m1.tags[W5]=bA;var xA={...m1,tags:m1.tags.slice()},EA="dag-cbor",Y2=113,vA=r=>ds(r,G2),SA=r=>Jr(z5(r),m1);var rp={};Qe(rp,{code:()=>tp,decode:()=>Y5,encode:()=>G5,format:()=>NA,name:()=>DA,parse:()=>OA,stringify:()=>NA});var X2=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(`${Qn} unsupported type: Uint8Array`)}[E.string.major](e,t){this.prefix(e);let n=Zu(JSON.stringify(t.value));e.push(n.length>32?Xa(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(`${Qn} 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 AA(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Qn} 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(`${Qn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Qn} unexpected duplicate map keys, this is not supported`)}var IA={addBreakTokens:!0,mapSorter:AA};function j2(r,e){return e=Object.assign({},IA,e),C2(r,new X2,e)}var di=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,S2(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 Z2(r,e){return e=Object.assign({tokenizer:new di(r,e)},e),Jr(r,e)}function kA(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function TA(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 g1(r){let e=nt.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 g1(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function CA(r){return g1(new Uint8Array(r))}function PA(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function RA(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 LA={typeEncoders:{Object:TA,Buffer:g1,Uint8Array:g1,Int8Array:en,Uint16Array:en,Int16Array:en,Uint32Array:en,Int32Array:en,Float32Array:en,Float64Array:en,Uint8ClampedArray:en,BigInt64Array:en,BigUint64Array:en,DataView:en,ArrayBuffer:CA,undefined:PA,number:RA}},J2=class extends di{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=nt.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}},ep={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};ep.tags[42]=Z.parse;var DA="dag-json",tp=297,G5=r=>j2(r,LA),Y5=r=>{let e=kA(r),t=Object.assign(ep,{tokenizer:new J2(e,ep)});return Z2(e,t)},NA=r=>BA.decode(G5(r));var BA=new TextDecoder,OA=r=>Y5(MA.encode(r)),MA=new TextEncoder;var cp={};Qe(cp,{code:()=>ap,createLink:()=>og,createNode:()=>ng,decode:()=>XA,encode:()=>QA,name:()=>YA,prepare:()=>sp,validate:()=>ip});var UA=new TextDecoder;function np(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 y1(r,e){let t;[t,e]=np(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 Q5(r,e){let t;return[t,e]=np(r,e),[t&7,t>>3,e]}function FA(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=Q5(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]=y1(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]=y1(r,n),e.Name=UA.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]=np(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 X5(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=Q5(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]=y1(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]=y1(r,t),n.push(FA(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 Z5=new TextEncoder,j5=2**32,$A=2**31;function VA(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=ic(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=Z5.encode(r.Name);t-=n.length,e.set(n,t),t=ic(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=ic(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function J5(r){let e=HA(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=ic(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let s=VA(r.Links[o],t.subarray(0,n));n-=s,n=ic(t,n,s)-1,t[n]=18}return t}function KA(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+fi(t)}if(typeof r.Name=="string"){let t=Z5.encode(r.Name).length;e+=1+t+fi(t)}return typeof r.Tsize=="number"&&(e+=1+fi(r.Tsize)),e}function HA(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+fi(t)}if(r.Links)for(let t of r.Links){let n=KA(t);e+=1+n+fi(n)}return e}function ic(r,e,t){e-=fi(t);let n=e;for(;t>=$A;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function fi(r){return r%2===0&&r++,Math.floor((qA(r)+6)/7)}function qA(r){let e=0;return r>=j5&&(r=Math.floor(r/j5),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+WA[r]}var WA=[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 zA=["Data","Links"],GA=["Hash","Name","Tsize"],op=new TextEncoder;function tg(r,e){if(r===e)return 0;let t=r.Name?op.encode(r.Name):[],n=e.Name?op.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 eg(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function rg(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 sp(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=op.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(rg),e.Links.sort(tg);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function ip(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!eg(r,zA))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(!eg(t,GA))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&&tg(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function ng(r,e=[]){return sp({Data:r,Links:e})}function og(r,e,t){return rg({Hash:t,Name:r,Tsize:e})}function sg(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var YA="dag-pb",ap=112;function QA(r){ip(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),J5(e)}function XA(r){let e=sg(r),t=X5(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 hi(r){return r?.then!=null}function ig(r=[],e){let t={[ap]:cp,[ia]:aa,[Y2]:Q2,[tp]:rp,[o0]:xl};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);hi(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new oc(`Could not load codec for ${n}`)}}function ag(r=[],e){let t={[ct.code]:ct,[vl.code]:vl,[jt.code]:jt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);hi(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new nc(`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 Zn=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 w1=0,b1=class extends Zn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===w1||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===w1)return e.multihash.digest;if(this.child==null)throw new Pr;return this.child.get(e)}has(e){return e.multihash.code===w1?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==w1&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function jA(r){return r[Symbol.asyncIterator]!=null}function ZA(r,e){let t=0;if(jA(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Ns(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=ZA;function JA(r){return r[Symbol.asyncIterator]!=null}function cg(r){return r?.then!=null}function eI(r,e){let t=0;if(JA(r))return async function*(){for await(let c of r){let l=e(c,t++);cg(l)&&await l,yield c}}();let n=Ns(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++);cg(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var hs=eI;var x1=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 b1(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 lg(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 lg(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)}},E1=class extends x1{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 lp({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},lp=class extends x1{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 tI(r){return typeof r.retrieve=="function"}var rI=(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(hi(o)?n=await o:n=o,!te(n.digest,r.multihash.digest))throw new oo("Hash of downloaded block did not match multihash from passed CID")}};async function lg(r,e,t,n){let o=rI(r,t),s=new AbortController,i=xe([s.signal,n.signal]);V(1/0,s.signal,i);let a=[];for(let c of e)tI(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 up=kt(Mu(),1);var nI=Math.LN2*Math.LN2,v1=class r{static create(e,t=.005){let n=oI(e,t);return new r(n)}seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=sI(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=up.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=up.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 oI(r,e=.005){let t=Math.round(-1*r*Math.log(e)/nI),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function sI(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(dt(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=v1.create(this.maxProviders)}async retrieve(e,t={}){let n=nt.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 ur({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 rc(`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 S1=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??Ao(),this.log=this.logger.forComponent("helia"),this.getHasher=ag(e.hashers,e.loadHasher),this.getCodec=ig(e.codecs,e.loadCodec),this.dns=e.dns??Xu(),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 h1(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 E1(t);this.pins=new f1(e.datastore,n,this.getCodec),this.blockstore=new p1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await q5(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 dp=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 ug(r,e){return new dp(r,e)}var A1=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 fp=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 I1(r){let{name:e,metrics:t}=r,n;return t!=null?n=new fp({name:e,metrics:t}):n=new Map,n}function iI(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 dg=iI;var _1=class extends pe{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),V(1/0,this),this.peers=Ga({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=I1({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??Ze.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===Ze.WantHave&&t.wantType===Ze.WantBlock&&(o.wantType=Ze.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===Ze.WantBlock?(await lr(this,"block",t?.signal,{filter:a=>te(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await lr(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 Yn;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 Yn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ze.WantHave,priority:1}),await this.network.sendMessage(t,o),(await lr(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:Ze.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Yn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ze.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await lr(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=dg(o.prefix),i=s[0],a=s[1],c=s[2],l=c===ct.code?ct: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 Yn(!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:Ze.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 A1(e),this.network=new Cl(e,t),this.peerWantLists=new Ku({...e,network:this.network},t),this.wantList=new _1({...e,network:this.network},t)}createSession(e={}){return ug({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 fg=(r,e={})=>new k1(r,e);var hp=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=fg(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 pp(r={}){return e=>new hp(e,r)}var T1=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 hg=45,aI=15,pi=new T1;function mp(r){if(!(r.length>aI))return pi.new(r).parseWith(()=>pi.readIPv4Addr())}function gp(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>hg))return pi.new(r).parseWith(()=>pi.readIPv6Addr())}function C1(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>hg))return pi.new(r).parseWith(()=>pi.readIPAddr())}function mi(r){return!!mp(r)}function gi(r){return!!gp(r)}function P1(r){return!!C1(r)}var mg=kt(pg(),1),cI=["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"],lI=cI.map(r=>new mg.Netmask(r));function yp(r){for(let e of lI)if(e.contains(r))return!0;return!1}function uI(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function dI(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 yp(o)}function fI(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function hI(r){let e=r.split(":"),t=e[e.length-1];return yp(t)}function pI(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 rr(r){return mi(r)?yp(r):uI(r)?dI(r):fI(r)?hI(r):gi(r)?pI(r):void 0}var _K=parseInt("0xFFFF",16),kK=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var wg=mi,bI=gi,wp=function(r){let e=0;if(r=r.toString().trim(),wg(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(bI(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=wg(t[n]),i;s&&(i=wp(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")},bg=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 yi={},bp={},EI=[[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"]];EI.forEach(r=>{let e=vI(...r);bp[e.code]=e,yi[e.name]=e});function vI(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function ee(r){if(typeof r=="number"){if(bp[r]!=null)return bp[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(yi[r]!=null)return yi[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var cH=ee("ip4"),lH=ee("ip6"),uH=ee("ipcidr");function Sp(r,e){switch(ee(r).code){case 4:case 41:return AI(e);case 42:return vp(e);case 6:case 273:case 33:case 132:return vg(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return vp(e);case 421:return TI(e);case 444:return Eg(e);case 445:return Eg(e);case 466:return kI(e);case 481:return globalThis.encodeURIComponent(vp(e));default:return F(e,"base16")}}function Ap(r,e){switch(ee(r).code){case 4:return xg(e);case 41:return xg(e);case 42:return Ep(e);case 6:case 273:case 33:case 132:return Ip(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Ep(e);case 421:return II(e);case 444:return CI(e);case 445:return PI(e);case 466:return _I(e);case 481:return Ep(globalThis.decodeURIComponent(e));default:return O(e,"base16")}}var xp=Object.values(Dn).map(r=>r.decoder),SI=function(){let r=xp[0].or(xp[1]);return xp.slice(2).forEach(e=>r=r.or(e)),r}();function xg(r){if(!P1(r))throw new Error("invalid ip address");return wp(r)}function AI(r){let e=bg(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!P1(e))throw new Error("invalid ip address");return e}function Ip(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function vg(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function Ep(r){let e=O(r),t=Uint8Array.from($e(e.length));return Pe([t,e],t.length+e.length)}function vp(r){let e=Bt(r);if(r=r.slice(he(e)),r.length!==e)throw new Error("inconsistent lengths");return F(r)}function II(r){let e;r[0]==="Q"||r[0]==="1"?e=Te(Ee.decode(`z${r}`)).bytes:e=Z.parse(r).multihash.bytes;let t=Uint8Array.from($e(e.length));return Pe([t,e],t.length+e.length)}function _I(r){let e=SI.decode(r),t=Uint8Array.from($e(e.length));return Pe([t,e],t.length+e.length)}function kI(r){let e=Bt(r),t=r.slice(he(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+F(t,"base64url")}function TI(r){let e=Bt(r),t=r.slice(he(e));if(t.length!==e)throw new Error("inconsistent lengths");return F(t,"base58btc")}function CI(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=at.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=Ip(n);return Pe([t,o],t.length+o.length)}function PI(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=at.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=Ip(n);return Pe([t,o],t.length+o.length)}function Eg(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=F(e,"base32"),o=vg(t);return`${n}:${o}`}function Sg(r){r=_p(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 Ig("invalid address: "+r);if(a.path===!0){n=_p(o.slice(s).join("/")),e.push([a.code,Ap(a.code,n)]),t.push([a.code,n]);break}let c=Ap(a.code,o[s]);e.push([a.code,c]),t.push([a.code,Sp(a.code,c)])}return{string:Ag(t),bytes:Tp(e),tuples:e,stringTuples:t,path:n}}function kp(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=Bt(r,o),i=he(s),a=ee(s),c=RI(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 Ig("Invalid address Uint8Array: "+F(r,"base16"));e.push([s,l]);let d=Sp(s,l);if(t.push([s,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:Ag(t),tuples:e,stringTuples:t,path:n}}function Ag(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}),_p(e.join("/"))}function Tp(r){return Pe(r.map(e=>{let t=ee(e[0]),n=Uint8Array.from($e(t.code));return e.length>1&&e[1]!=null&&(n=Pe([n,e[1]])),n}))}function RI(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 _p(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function Ig(r){return new Error("Error parsing address: "+r)}var LI=Symbol.for("nodejs.util.inspect.custom"),Pp=Symbol.for("@multiformats/js-multiaddr/multiaddr"),DI=[ee("dns").code,ee("dns4").code,ee("dns6").code,ee("dnsaddr").code],Cp=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},R1=class r{bytes;#e;#t;#r;#o;[Pp]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=kp(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=Sg(e)}else if(Po(e))t=kp(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??""}`),DI.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(Tp(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===yi.p2p.code&&e.push([n,o]),n===yi["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=wi.get(t.name);if(n==null)throw new Cp(`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)}[LI](){return`Multiaddr(${this.#e})`}};var wi=new Map;function Po(r){return!!r?.[Pp]}function X(r){return new R1(r)}var NI=r=>r.toString().split("/").slice(1),cc=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Ie=r=>({match:e=>cc(t=>t===r).match(e),pattern:r}),N1=()=>({match:r=>cc(e=>typeof e=="string").match(r),pattern:"{string}"}),B1=()=>({match:r=>cc(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}"}),L1=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{e0.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),ft=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Rr=(...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 tt(...r){function e(o){let s=NI(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 Lp=Ce(Ie("dns4"),N1()),Dp=Ce(Ie("dns6"),N1()),Np=Ce(Ie("dnsaddr"),N1()),_g=Ce(Ie("dns"),N1()),UH=tt(Lp),FH=tt(Dp),$H=tt(Np),O1=tt(Rr(_g,Np,Lp,Dp)),kg=Ce(Ie("ip4"),cc(mi)),Tg=Ce(Ie("ip6"),cc(gi)),Cg=Rr(kg,Tg),Sn=Rr(Cg,_g,Lp,Dp,Np),Pg=tt(Sn),VH=tt(kg),KH=tt(Tg),Rg=tt(Cg),Bp=Ce(Sn,Ie("tcp"),B1()),lc=Ce(Sn,Ie("udp"),B1()),HH=tt(Bp),qH=tt(lc),Op=Ce(lc,Ie("quic")),M1=Ce(lc,Ie("quic-v1")),BI=Rr(Op,M1),WH=tt(Op),zH=tt(M1),Rp=Rr(Sn,Bp,lc,Op,M1),Lg=Rr(Ce(Rp,Ie("ws"),ft(Et()))),GH=tt(Lg),Dg=Rr(Ce(Rp,Ie("wss"),ft(Et())),Ce(Rp,Ie("tls"),Ie("ws"),ft(Et()))),YH=tt(Dg),Ng=Ce(lc,Ie("webrtc-direct"),ft(L1()),ft(L1()),ft(Et())),Bg=tt(Ng),Og=Ce(M1,Ie("webtransport"),ft(L1()),ft(L1()),ft(Et())),U1=tt(Og),D1=Rr(Lg,Dg,Ce(Bp,ft(Et())),Ce(BI,ft(Et())),Ce(Sn,ft(Et())),Ng,Og,Et()),QH=tt(D1),OI=Ce(D1,Ie("p2p-circuit"),Et()),An=tt(OI),MI=Rr(Ce(D1,Ie("p2p-circuit"),Ie("webrtc"),ft(Et())),Ce(D1,Ie("webrtc"),ft(Et())),Ie("webrtc")),Mg=tt(MI),UI=Rr(Ce(Sn,Ie("tcp"),B1(),Ie("http"),ft(Et())),Ce(Sn,Ie("http"),ft(Et()))),Ug=tt(UI),FI=Rr(Ce(Sn,Ie("tcp"),Rr(Ce(Ie("443"),Ie("http")),Ce(B1(),Ie("https"))),ft(Et())),Ce(Sn,Ie("tls"),Ie("http"),ft(Et())),Ce(Sn,Ie("https"),ft(Et()))),Fg=tt(FI);var $I=[ee("tcp").code,ee("dns").code,ee("dnsaddr").code,ee("dns4").code,ee("dns6").code];function $g(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 Vg(r){return r.some(([e,t])=>e===ee("tls").code)}function nr(r,e,t){let n=Kg[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 Kg={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://${nr(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://${nr(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`${nr(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`${nr(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=Vg(e),n=$g(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=nr(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=nr(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 nr(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return nr(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=nr(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=Vg(e),n=$g(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=nr(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=nr(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`${nr(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`${nr(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`${nr(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function F1(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=Kg[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&$I.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 $1=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 nt.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 VI(r,e,t){return r.filter(n=>{if(Fg.matches(n)||e&&Ug.matches(n))return t||O1.matches(n)?!0:rr(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*V1(r,e,t,n,o,s){for await(let i of e.findProviders(r,s)){let a=VI(i.multiaddrs,n,o);if(a.length===0)continue;let c=F1(a[0]);yield new $1(c,t)}}var Mp=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??K1,this.allowLocal=t.allowLocal??H1}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*V1(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 Hg(r,e){return new Mp(r,e)}var q1=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??K1,this.allowLocal=t.allowLocal??H1}async retrieve(e,t={}){let n=[];for await(let o of V1(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 Hg({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure})}};var K1=!1,H1=!1;function Up(r={}){return e=>new q1(e,r)}async function*W1(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 GI=kt(z1(),1);var rn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},G1=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},bi=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},Y1=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},Q1=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},X1=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},uc=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var or;(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)})(or||(or={}));var KI=hr("ipns:utils"),qg=O("/ipns/");var HI=0,qI=18;function Wg(r){let e;if(r.pubKey!=null)try{e=et(r.pubKey)}catch(t){throw KI.error(t),t}if(e!=null)return e}function zg(r){let e=O("ipns-signature:");return Pe([e,r])}function dc(r){return"signatureV1"in r?or.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}):or.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function In(r){let e=or.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=Gg(e.data),n=WI(t.Value),o=F(t.Validity);if(e.value!=null&&e.signatureV1!=null)return zI(e),{value:n,validityType:or.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:or.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 fc(r){return Pe([qg,r.bytes])}function xi(r){let e=Te(r.slice(qg.length));if(!j1(e,HI)&&!j1(e,qI))throw new oo("Multihash in IPNS key was not identity or sha2-256");return e}function Gg(r){let e=Jr(r);if(e.ValidityType===0)e.ValidityType=or.ValidityType.EOL;else throw new bi("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 WI(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 Q1("Value must be a valid content path starting with /")}function zI(r){if(r.data==null)throw new X1("Record data is missing");let e=Gg(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 j1(r,e){return r.code===e}var $q=hr("ipns"),Vq=60*60*1e9,YI="/ipns/",Kq=YI.length;var Yg=kt(z1(),1);var Z1=hr("ipns:validator"),QI=1024*10,XI=async(r,e)=>{let t=In(e),n;try{let o=zg(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Z1.error("record signature verification failed"),new rn("Record signature verification failed");if(t.validityType===or.ValidityType.EOL){if(Yg.default.fromString(t.validity).toDate().getTime()<Date.now())throw Z1.error("record has expired"),new G1("record has expired")}else if(t.validityType!=null)throw Z1.error("the validity type is unsupported"),new bi("The validity type is unsupported");Z1("ipns record for %s is valid",t.value)};async function J1(r,e){if(e.byteLength>QI)throw new Y1("The record is too large");let t=xi(r),n;j1(t,0)&&(n=Du(t));let o=In(e),s=Wg(o)??n;if(s==null)throw new uc("Could not extract public key from IPNS record or routing key");let i=fc(s.toMultihash());if(!te(r,i))throw new uc("Embedded public key did not match routing key");await XI(s,e)}async function*hc(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 Ei=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},ms=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function jI(r){return r[Symbol.asyncIterator]!=null}function ZI(r){if(jI(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var gs=ZI;var Qg=O("/ipns/");function Xg(r){return te(r.subarray(0,Qg.byteLength),Qg)}var ed=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(!Xg(e))return;let o=xi(e),s=Z.createV1(114,o),i=In(t);await this.client.putIPNS(s,i,n)}async get(e,t){if(!Xg(e))throw new Be("Not found");let n=xi(e),o=Z.createV1(114,n);try{let s=await this.client.getIPNS(o,t);return dc(s)}catch(s){throw s.name==="BadResponseError"?new Be("Not found"):s}}},td=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await gs(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"),jg={concurrentRequests:4,timeout:3e4},rd=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??jg.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??jg.timeout,this.contentRouting=new ed(this),this.peerRouting=new td(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={}){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=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 Ei("Request does not conform to schema or semantic constraints");if(l.body==null)throw new ms("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 hc(W1(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=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 Ei("Request does not conform to schema or semantic constraints");if(l.body==null)throw new ms("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 hc(W1(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=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(Ft("getIPNS GET %s %d",a,l.status),l.status===404)throw new Be("No matching records found");if(l.status===422)throw new Ei("Request does not conform to schema or semantic constraints");if(l.body==null)throw new ms("GET ipns response had no body");let d=await l.arrayBuffer(),u=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await J1(fc(e.multihash),u),In(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=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=dc(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 ms("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 Zg(r,e={}){return new rd(new URL(r),e)}var Jg="[a-fA-F\\d:]",Ro=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${Jg})|(?<=${Jg})(?=\\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}",ot="[a-fA-F\\d]{1,4}",nd=`
|
|
7
|
+
`)}`:`${t} :`}};m6=So;G.Constructed=m6;So.NAME="CONSTRUCTED";var Zl=class extends Nt{fromBER(e,t,n){return t}toBER(e){return Yr}};Zl.override="EndOfContentValueBlock";var g6,Jl=class extends Et{constructor(e={}){super(e,Zl),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};g6=Jl;G.EndOfContent=g6;Jl.NAME=Ta;var y6,Vn=class extends Et{constructor(e={}){super(e,Nt),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}`}};y6=Vn;G.Null=y6;Vn.NAME="NULL";var eu=class extends Wn(Nt){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 qn(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,X0.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};eu.NAME="BooleanValueBlock";var w6,tu=class extends Et{constructor(e={}){super(e,eu),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}`}};w6=tu;G.Boolean=w6;tu.NAME="BOOLEAN";var ru=class extends Wn(yn){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=yn.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===Ta){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==d6)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?yn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};ru.NAME="OctetStringValueBlock";var b6,Kn=class r extends Et{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},ru),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=Pu(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?So.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)}};b6=Kn;G.OctetString=b6;Kn.NAME=d6;var nu=class extends Wn(yn){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=yn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Ta){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==f6)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(!qn(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=Pu(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 yn.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}}};nu.NAME="BitStringValueBlock";var x6,si=class extends Et{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},nu),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 So.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)}`}}};x6=si;G.BitString=x6;si.NAME=f6;var E6;function zv(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=Wl(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=Wl(t,s)),s}function u6(r){if(r>=Ia.length)for(let e=Ia.length;e<=r;e++){let t=new Uint8Array([0]),n=Ia[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=Wl(t,n)),Ia.push(n)}return Ia[r]}function Gv(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 ka=class extends Wn(Nt){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=X0.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(a6(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=Gv(u6(n),t),i="-";break;default:t=zv(t,u6(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=l6.charAt(t[c]));return a===!1&&(i+=l6.charAt(0)),i}};E6=ka;ka.NAME="IntegerValueBlock";Object.defineProperty(E6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var v6,et=class r extends Et{constructor(e={}){super(e,ka),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return zl(),BigInt(this.valueBlock.toString())}static fromBigInt(e){zl();let t=BigInt(e),n=new _a,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()}`}};v6=et;G.Integer=v6;et.NAME="INTEGER";var S6,ou=class extends et{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};S6=ou;G.Enumerated=S6;ou.NAME="ENUMERATED";var Ca=class extends Wn(Nt){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(!qn(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=as(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){zl();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=vo(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}}};Ca.NAME="sidBlock";var su=class extends Nt{constructor({value:e=ii,...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.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 j0(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 Ca;if(o>Number.MAX_SAFE_INTEGER){zl();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}};su.NAME="ObjectIdentifierValueBlock";var A6,Tr=class extends Et{constructor(e={}){super(e,su),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()}}};A6=Tr;G.ObjectIdentifier=A6;Tr.NAME="OBJECT IDENTIFIER";var Pa=class extends Wn($n){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(!qn(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=as(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=vo(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}}};Pa.NAME="relativeSidBlock";var iu=class extends Nt{constructor({value:e=ii,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Pa;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let s=this.value[o].toBER(e);if(s.byteLength===0)return this.error=this.value[o].error,Yr;n.push(s)}return j0(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let s=new Pa;if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return!0;this.value.push(s)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};iu.NAME="RelativeObjectIdentifierValueBlock";var I6,au=class extends Et{constructor(e={}){super(e,iu),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()}}};I6=au;G.RelativeObjectIdentifier=I6;au.NAME="RelativeObjectIdentifier";var _6,ht=class extends So{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};_6=ht;G.Sequence=_6;ht.NAME="SEQUENCE";var T6,cu=class extends So{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};T6=cu;G.Set=T6;cu.NAME="SET";var lu=class extends Wn(Nt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ii}toJSON(){return{...super.toJSON(),value:this.value}}};lu.NAME="StringValueBlock";var uu=class extends lu{};uu.NAME="SimpleStringValueBlock";var Vt=class extends Ql{constructor({...e}={}){super(e,uu)}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}};Vt.NAME="SIMPLE STRING";var du=class extends Vt{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}};du.NAME="Utf8StringValueBlock";var k6,Hn=class extends du{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};k6=Hn;G.Utf8String=k6;Hn.NAME="UTF8String";var fu=class extends Vt{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))}};fu.NAME="BmpStringValueBlock";var C6,hu=class extends fu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};C6=hu;G.BmpString=C6;hu.NAME="BMPString";var pu=class extends Vt{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=vo(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}};pu.NAME="UniversalStringValueBlock";var P6,mu=class extends pu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};P6=mu;G.UniversalString=P6;mu.NAME="UniversalString";var R6,gu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};R6=gu;G.NumericString=R6;gu.NAME="NumericString";var D6,yu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};D6=yu;G.PrintableString=D6;yu.NAME="PrintableString";var L6,wu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};L6=wu;G.TeletexString=L6;wu.NAME="TeletexString";var N6,bu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};N6=bu;G.VideotexString=N6;bu.NAME="VideotexString";var B6,xu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};B6=xu;G.IA5String=B6;xu.NAME="IA5String";var O6,Eu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};O6=Eu;G.GraphicString=O6;Eu.NAME="GraphicString";var M6,Ra=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};M6=Ra;G.VisibleString=M6;Ra.NAME="VisibleString";var U6,vu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};U6=vu;G.GeneralString=U6;vu.NAME="GeneralString";var F6,Su=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};F6=Su;G.CharacterString=F6;Su.NAME="CharacterString";var $6,Da=class extends Ra{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]=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}}};$6=Da;G.UTCTime=$6;Da.NAME="UTCTime";var V6,Au=class extends Da{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}}};V6=Au;G.GeneralizedTime=V6;Au.NAME="GeneralizedTime";var K6,Iu=class extends Hn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};K6=Iu;G.DATE=K6;Iu.NAME="DATE";var H6,_u=class extends Hn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};H6=_u;G.TimeOfDay=H6;_u.NAME="TimeOfDay";var q6,Tu=class extends Hn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};q6=Tu;G.DateTime=q6;Tu.NAME="DateTime";var W6,ku=class extends Hn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};W6=ku;G.Duration=W6;ku.NAME="Duration";var z6,Cu=class extends Hn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};z6=Cu;G.TIME=z6;Cu.NAME="TIME";function F(r,e="utf8"){let t=_l[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function pt(r){if(isNaN(r)||r<=0)throw new C("random bytes length must be a Number bigger than 0");return rs(r)}var La=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Na=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Ru=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var G6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Ru("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=G6;async function Y6(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 Yv(e);return{privateKey:t[0],publicKey:t[1]}}async function Q6(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 X6(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 Yv(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 e2(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 ai=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Ba.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:J(this.raw,e.raw)}verify(e,t){return X6(this._key,t,e)}},Oa=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Ba.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return Q6(this._key,e)}};var Du=8192,t2=18;function j6(r){let{result:e}=cs(r),t=e.valueBlock.value;return{n:F(wn(t[1].toBigInt()),"base64url"),e:F(wn(t[2].toBigInt()),"base64url"),d:F(wn(t[3].toBigInt()),"base64url"),p:F(wn(t[4].toBigInt()),"base64url"),q:F(wn(t[5].toBigInt()),"base64url"),dp:F(wn(t[6].toBigInt()),"base64url"),dq:F(wn(t[7].toBigInt()),"base64url"),qi:F(wn(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function Qv(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 ht({value:[new et({value:0}),et.fromBigInt(bn(O(r.n,"base64url"))),et.fromBigInt(bn(O(r.e,"base64url"))),et.fromBigInt(bn(O(r.d,"base64url"))),et.fromBigInt(bn(O(r.p,"base64url"))),et.fromBigInt(bn(O(r.q,"base64url"))),et.fromBigInt(bn(O(r.dp,"base64url"))),et.fromBigInt(bn(O(r.dq,"base64url"))),et.fromBigInt(bn(O(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function Z6(r){let{result:e}=cs(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:F(wn(t[0].toBigInt()),"base64url"),e:F(wn(t[1].toBigInt()),"base64url")}}function r2(r){if(r.n==null||r.e==null)throw new C("JWK was missing components");let t=new ht({value:[new ht({value:[new Tr({value:"1.2.840.113549.1.1.1"}),new Vn]}),new si({valueHex:new ht({value:[et.fromBigInt(bn(O(r.n,"base64url"))),et.fromBigInt(bn(O(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function wn(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 bn(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 Lu(r){let e=j6(r);return J6(e)}function n2(r){let e=Z6(r);if(e2(e)>Du)throw new Cn("Key size is too large");let t=Ir(gn.encode({Type:Ge.RSA,Data:r})),n=jt(t2,t);return new ai(e,n)}function J6(r){if(e2(r)>Du)throw new C("Key size is too large");let e=e8(r),t=Ir(gn.encode({Type:Ge.RSA,Data:r2(e.publicKey)})),n=jt(t2,t);return new Oa(e.privateKey,new ai(e.publicKey,n))}async function o2(r){if(r>Du)throw new C("Key size is too large");let e=await Y6(r),t=Ir(gn.encode({Type:Ge.RSA,Data:r2(e.publicKey)})),n=jt(t2,t);return new Oa(e.privateKey,new ai(e.publicKey,n))}function e8(r){if(r==null)throw new C("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var Nu=class extends js{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 Xs(this),this.iHash.update(e),this}digestInto(e){Xs(this),Qs(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Ao=(r,e,t)=>new Nu(r,e).update(t).digest();Ao.create=(r,e)=>new Nu(r,e);function t8(r){r.lowS!==void 0&&Wr("lowS",r.lowS),r.prehash!==void 0&&Wr("prehash",r.prehash)}function Xv(r){let e=ba(r);Ar(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:jv,hexToBytes:Zv}=Ul,zn={Err:class extends Error{constructor(e=""){super(e)}},_tlv:{encode:(r,e)=>{let{Err:t}=zn;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=ns(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let s=n>127?ns(o.length/2|128):"";return`${ns(r)}${s}${o}${e}`},decode(r,e){let{Err:t}=zn,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}=zn;if(r<Gn)throw new e("integer: negative integers are not allowed");let t=ns(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}=zn;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 jv(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=zn,o=typeof r=="string"?Zv(r):r;Js(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}=zn,n=`${e.encode(2,t.encode(r.r))}${e.encode(2,t.encode(r.s))}`;return e.encode(48,n)}},Gn=BigInt(0),gt=BigInt(1),EB=BigInt(2),r8=BigInt(3),vB=BigInt(4);function Jv(r){let e=Xv(r),{Fp:t}=e,n=bo(e.n,e.nBitLength),o=e.toBytes||((m,g,y)=>{let b=g.toAffine();return Un(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 ya(m,gt,e.n)}function c(m){let{allowedPrivateKeyLengths:g,nByteLength:y,wrapPrivateKey:b,n:w}=e;if(g&&typeof m!="bigint"){if(yo(m)&&(m=Bn(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:On(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)),xt("private key",x,gt,w),x}function l(m){if(!(m instanceof f))throw new Error("ProjectivePoint expected")}let d=ss((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=ss(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 Vl(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,r8),{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,r8),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){xt("scalar",g,Gn,e.n);let y=f.ZERO;if(g===Gn)return y;if(g===gt)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>Gn||k>Gn;)x>&&(v=v.add(_)),k>&&(S=S.add(_)),_=_.double(),x>>=gt,k>>=gt;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;xt("scalar",g,gt,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===Gn||v===gt||!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===gt)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===gt?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),Bn(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=$l(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:i,isWithinCurveOrder:a}}function eS(r){let e=ba(r);return Ar(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function n8(r){let e=eS(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 Fl(D,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:d,isWithinCurveOrder:u}=Jv({...e,toBytes(D,L,I){let A=L.toAffine(),R=t.toBytes(A.x),P=Un;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=On(A);if(!ya(R,gt,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>)===gt;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=>Bn(wo(D,e.nByteLength));function h(D){let L=n>>gt;return D>L}function p(D){return h(D)?i(-D):D}let m=(D,L,I)=>On(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}=zn.toSig(Me("DER",L));return new g(I,A)}assertValidity(){xt("r",this.r,gt,n),xt("s",this.s,gt,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),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 os(this.toDERHex())}toDERHex(){return zn.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return os(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=$0(e.n);return z4(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=yo(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=On(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=wa(e.nBitLength);function S(D){return xt(`num < 2^${e.nBitLength}`,D,Gn,v),wo(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),t8(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=Un(...le),be=j;function Le(Ne){let $e=T(Ne);if(!u($e))return;let Mt=a($e),ct=c.BASE.multiply($e).toAffine(),zt=i(ct.x);if(zt===Gn)return;let kn=i(Mt*i(be+zt*ae));if(kn===Gn)return;let oa=(ct.x===zt?0:2)|Number(ct.y>),sa=kn;return P&&h(kn)&&(sa=p(kn),oa^=1),new g(zt,sa,oa)}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 B0(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");t8(A);let{lowS:P,prehash:q}=A,z,j;try{if(typeof R=="string"||yo(R))try{z=g.fromDER(R)}catch(ct){if(!(ct instanceof zn.Err))throw ct;z=g.fromCompact(R)}else if(typeof R=="object"&&typeof R.r=="bigint"&&typeof R.s=="bigint"){let{r:ct,s:zt}=R;z=new g(ct,zt)}else throw new Error("PARSE");j=c.fromHex(I)}catch(ct){if(ct.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),be=a(le),Le=i(fe*be),Ne=i(ae*be),$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 tS(r){return{hash:r,hmac:(e,...t)=>Ao(r,e,T0(...t)),randomBytes:rs}}function o8(r,e){let t=n=>n8({...r,...tS(n)});return Object.freeze({...t(e),create:t})}var a8=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),s8=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),rS=BigInt(1),s2=BigInt(2),i8=(r,e)=>(r+e/s2)/e;function nS(r){let e=a8,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,s2,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,s2,e);if(!i2.eql(i2.sqr(k),r))throw new Error("Cannot find square root");return k}var i2=bo(a8,void 0,void 0,{sqrt:nS}),kr=o8({a:BigInt(0),b:BigInt(7),Fp:i2,n:s8,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=s8,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-rS*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=t,i=BigInt("0x100000000000000000000000000000000"),a=i8(s*r,e),c=i8(-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}}}},Ir),RB=BigInt(0);var DB=kr.ProjectivePoint;function a2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function c8(r,e){let t=dt.digest(e instanceof Uint8Array?e:e.subarray());if(a2(t))return t.then(({digest:n})=>kr.sign(n,r).toDERRawBytes()).catch(n=>{throw new La(String(n))});try{return kr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new La(String(n))}}function l8(r,e,t){let n=dt.digest(t instanceof Uint8Array?t:t.subarray());if(a2(n))return n.then(({digest:o})=>kr.verify(e,o,r)).catch(o=>{throw new Na(String(o))});try{return kr.verify(e,n.digest,r)}catch(o){throw new Na(String(o))}}var Ma=class{type="secp256k1";raw;_key;constructor(e){this._key=f8(e),this.raw=u8(this._key)}toMultihash(){return Zt.digest(Lt(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:J(this.raw,e.raw)}verify(e,t){return l8(this._key,t,e)}},Ua=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=d8(e),this.publicKey=new Ma(t??h8(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return c8(this.raw,e)}};function c2(r){return new Ua(r)}function l2(r){return new Ma(r)}async function p8(){let r=oS();return new Ua(r)}function u8(r){return kr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function d8(r){try{return kr.getPublicKey(r,!0),r}catch(e){throw new ia(String(e))}}function f8(r){try{return kr.ProjectivePoint.fromHex(r),r}catch(e){throw new Cn(String(e))}}function h8(r){try{return kr.getPublicKey(r,!0)}catch(e){throw new ia(String(e))}}function oS(){return kr.utils.randomPrivateKey()}async function Bu(r,e){if(r==="Ed25519")return o6();if(r==="secp256k1")return p8();if(r==="RSA")return o2(e??2048);throw new Fr}function tt(r){let{Type:e,Data:t}=gn.decode(r),n=t??new Uint8Array;switch(e){case Ge.RSA:return n2(n);case Ge.Ed25519:return z0(n);case Ge.secp256k1:return l2(n);default:throw new Fr}}function Ou(r){let{Type:e,Data:t}=gn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ge.Ed25519:return z0(n);case Ge.secp256k1:return l2(n);default:throw new Fr}}function Lt(r){return gn.encode({Type:Ge[r.type],Data:r.raw})}function m8(r){let e=Aa.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ge.RSA:return Lu(t);case Ge.Ed25519:return W0(t);case Ge.secp256k1:return c2(t);default:throw new Fr}}function g8(r){return r.byteLength===64?W0(r):r.byteLength===32?c2(r):Lu(r)}function ci(r){return Aa.encode({Type:Ge[r.type],Data:r.raw})}var y8=Symbol.for("nodejs.util.inspect.custom"),sS=114,Fa=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(sS,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return J(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return J(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[y8](){return`PeerId(${this.toString()})`}},$a=class extends Fa{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Va=class extends Fa{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Ka=class extends Fa{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},iS=2336,Ha=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Zt.digest(O(this.url))}[y8](){return`PeerId(${this.url})`}[Zc]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return Z.createV1(iS,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=F(e)),e.toString()===this.toString())}};var aS=114,w8=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 yt(t)}function xn(r){if(r.type==="Ed25519")return new Va({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Ka({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new $a({multihash:r.toCID().multihash,publicKey:r});throw new Fr}function b8(r){return xn(r.publicKey)}function yt(r){if(lS(r))return new $a({multihash:r});if(cS(r))try{let e=Ou(r);if(e.type==="Ed25519")return new Va({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Ka({multihash:r,publicKey:e})}catch{let t=F(r.digest);return new Ha(new URL(t))}throw new io("Supplied PeerID Multihash is invalid")}function En(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==aS&&r.code!==w8)throw new ol("Supplied PeerID CID is invalid");if(r.code===w8){let e=F(r.multihash.digest);return new Ha(new URL(e))}return yt(r.multihash)}function cS(r){return r.code===Zt.code}function lS(r){return r.code===dt.code}function ls(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 Mu(r){let e=Ce(Ee.decode(`z${r}`));return yt(e)}var it=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 ls(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 ls(this.map.values(),e=>e.key)}values(){return ls(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 ls(this.set.entries(),e=>{let t=Mu(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Mu(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return ls(this.set.values(),e=>Mu(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 x8(r,e,t,n){Jo(r);let o=U4({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(fo(s),fo(i),fo(a),s<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=qr(e),l=qr(t),d=new Uint8Array(i),u=Ao.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function E8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function v8(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=x8(r,e,t,n),l,d=new Uint8Array(4),u=ts(d),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<s;h++,p+=a.outputLen){let 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 E8(a,c,i,l,f)}async function Uu(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=x8(r,e,t,n),d,u=new Uint8Array(4),f=ts(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 O4(o-1,i,()=>{c._cloneInto(d).update(h).digestInto(h);for(let y=0;y<g.length;y++)g[y]^=h[y]})}return E8(c,l,a,d,h)}var qa=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Io=new Uint32Array(80),u2=class extends ho{constructor(){super(64,20,8,!1),this.A=qa[0]|0,this.B=qa[1]|0,this.C=qa[2]|0,this.D=qa[3]|0,this.E=qa[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)Io[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Io[c]=Ll(Io[c-3]^Io[c-8]^Io[c-14]^Io[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=Nl(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=Bl(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=Ll(n,5)+l+a+d+Io[c]|0;a=i,i=s,s=Ll(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(){Io.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},S8=Zs(()=>new u2);var A8={sha1:S8,"sha2-256":Ir,"sha2-512":go};function Wa(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(A8).join(" / ");throw new C(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let s=A8[o],i=v8(s,r,e,{c:t,dkLen:n});return st.encode(i).substring(1)}var d2=kt($u(),1);var dS=Math.LN2*Math.LN2,Vu=class{seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=hS(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=d2.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=d2.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 f2(r,e=.005){let t=fS(r,e);return new Vu(t)}function fS(r,e=.005){let t=Math.round(-1*r*Math.log(e)/dS),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function hS(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(pt(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var h2=64,Qr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>h2)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?J(this.fp,e.fp):!1}};function us(r,e){return Math.floor(Math.random()*(e-r))+r}var ds=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Qr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Qr))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof Qr))throw new TypeError("Invalid Fingerprint");let t=us(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Qr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var p2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},T8={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},k8=new globalThis.TextEncoder;function pS(r,e){let t=p2[e],n=T8[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function mS(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=p2[e],o=T8[e],s=r;for(;s.length>0;){let i=k8.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 m2(r,{size:e=32,utf8Buffer:t}={}){if(!p2[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 mS(r,e,t);r=k8.encode(r)}return pS(r,e)}var gS=kt($u(),1);var Ga={hash:r=>Number(m2(r,{size:32})),hashV:(r,e)=>yS(Ga.hash(r,e))};function yS(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),O(e,"base16")}var wS=500,Ya=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??Ga,this.seed=e.seed??us(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 ds(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new ds(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let s=[n,o],i=s[us(0,s.length-1)];this.buckets[i]==null&&(this.buckets[i]=new ds(this.bucketSize));for(let a=0;a<wS;a++){let c=this.buckets[i].swap(t);if(c!=null&&(i=(i^c.hash())%this.filterSize,this.buckets[i]==null&&(this.buckets[i]=new ds(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=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}},bS={1:.5,2:.84,4:.95,8:.98};function xS(r=.001){return r>.002?2:r>1e-5?4:8}function C8(r,e=.001){let t=xS(e),n=bS[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),h2);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var Ku=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??Ga,this.seed=e.seed??us(0,Math.pow(2,10)),this.filterSeries=[new Ya({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 Ya({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 Qa(r,e=.001,t){return new Ku({...C8(r,e),...t??{}})}var Hu=class{filter;constructor(e,t){this.filter=Qa(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 g2(r,e=.001){return new Hu(r,e)}var y2=class extends it{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 Xa(r){let{name:e,metrics:t}=r,n;return t!=null?n=new y2({name:e,metrics:t}):n=new it,n}var Yn=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 ES(r){let e=new Uint8Array(r.reduce((n,o)=>n+pe(o),0)),t=0;for(let n of r)e=Ve(n,e,t),t+=pe(n);return e}var P8=ES;function w2(r){return P8([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var qu=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 Yn,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:w2(s.cid)})):(this.log("sending have for %c",s.cid),t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:Sr.HaveBlock})):(this.log("sending block for %c",s.cid),n.add(o),t.addBlock(s.cid,{data:i,prefix:w2(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:Sr.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 Wu=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=Xa({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 qu({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===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=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 vS(r,e){try{if(typeof r=="string"&&r.length>0)return SS(r);if(typeof r=="number"&&isFinite(r))return e?.long?IS(r):AS(r);throw new Error("Value is not a string or number.")}catch(t){let n=_S(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function SS(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 Gu=vS;function AS(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 IS(r){let e=Math.abs(r);return e>=864e5?zu(r,e,864e5,"day"):e>=36e5?zu(r,e,36e5,"hour"):e>=6e4?zu(r,e,6e4,"minute"):e>=1e3?zu(r,e,1e3,"second"):`${r} ms`}function zu(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function _S(r){return typeof r=="object"&&r!==null&&"message"in r}function b2(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=Gu,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 Yu=LS(),TS=["#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 kS(){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 CS(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Gu(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 PS=console.debug??console.log??(()=>{});function RS(r){try{r?Yu?.setItem("debug",r):Yu?.removeItem("debug")}catch{}}function DS(){let r;try{r=Yu?.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function LS(){try{return localStorage}catch{}}function NS(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var R8=b2({formatArgs:CS,save:RS,load:DS,useColors:kS,setupFormatters:NS,colors:TS,storage:Yu,log:PS});var nr=R8;nr.formatters.b=r=>r==null?"undefined":Ee.baseEncode(r);nr.formatters.t=r=>r==null?"undefined":ut.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 BS(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 _o(){return{forComponent(r){return pr(r)}}}function pr(r){let e=BS(`${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 E2=kt(L8(),1);var li=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},v2=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},N8=r=>globalThis.DOMException===void 0?new v2(r):new DOMException(r),B8=r=>{let e=r.reason===void 0?N8("This operation was aborted."):r.reason;return e instanceof Error?e:N8(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(B8(f)),f.addEventListener("abort",()=>{d(B8(f))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new li;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 S2(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 Za=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=S2(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 Cr=class extends E2.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:Za,...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 li&&!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 Xu(r){let e=[mr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var A2=60;function ju(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:mr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:mr[e.type],TTL:e.TTL??e.ttl??A2,data:e.data instanceof Uint8Array?F(e.data):e.data}))}}var US=4;function I2(r,e={}){let t=new Cr({concurrency:e.queryConcurrency??US});return async(n,o={})=>{let s=new URLSearchParams;s.set("name",n),Xu(o.types).forEach(a=>{s.append("type",mr[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=ju(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 O8(){return[I2("https://cloudflare-dns.com/dns-query"),I2("https://dns.google/resolve")]}var U8=kt(_2(),1);var T2=class{lru;constructor(e){this.lru=(0,U8.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 ju({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:mr[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??A2)*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 F8(r){return new T2(r)}var FS=1e3,Zu=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=F8(e.cacheSize??FS),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["."]=O8())}async query(e,t={}){let n=Xu(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 mr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(mr||(mr={}));function Ju(r={}){return new Zu(r)}var $S=["string","number","bigint","symbol"],VS=["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 $8(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if($S.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(KS(r))return"Buffer";let t=HS(r);return t||"Object"}function KS(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function HS(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(VS.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 ui=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",qS=new TextDecoder,WS=new TextEncoder;function e1(r){return ui&&globalThis.Buffer.isBuffer(r)}function Ja(r){return r instanceof Uint8Array?e1(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var q8=ui?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):K8(r,e,t):(r,e,t)=>t-e>64?qS.decode(r.subarray(e,t)):K8(r,e,t),t1=ui?r=>r.length>64?globalThis.Buffer.from(r):V8(r):r=>r.length>64?WS.encode(r):V8(r),vn=r=>Uint8Array.from(r),di=ui?(r,e,t)=>e1(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),W8=ui?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Ja(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},z8=ui?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function G8(r,e){if(e1(r)&&e1(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 V8(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 K8(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 k2(n)}var H8=4096;function k2(r){let e=r.length;if(e<=H8)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=H8));return t}var zS=256,ec=class{constructor(e=zS){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=z8(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=di(n,0,this.cursor)}else t=W8(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",Qn="CBOR encode error:",tc=[];tc[23]=1;tc[24]=2;tc[25]=3;tc[26]=5;tc[27]=9;function Xn(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 gr(r,e,t){Xn(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 yr(r,e,t){Xn(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 wr(r,e,t){Xn(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 br(r,e,t){Xn(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 Y8(r,e,t,n){return new U(E.uint,gr(r,e+1,n),2)}function Q8(r,e,t,n){return new U(E.uint,yr(r,e+1,n),3)}function X8(r,e,t,n){return new U(E.uint,wr(r,e+1,n),5)}function j8(r,e,t,n){return new U(E.uint,br(r,e+1,n),9)}function Pr(r,e){return vt(r,0,e.value)}function vt(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`)}}Pr.encodedSize=function(e){return vt.encodedSize(e.value)};vt.encodedSize=function(e){return e<wt[0]?1:e<wt[1]?2:e<wt[2]?3:e<wt[3]?5:9};Pr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Z8(r,e,t,n){return new U(E.negint,-1-gr(r,e+1,n),2)}function J8(r,e,t,n){return new U(E.negint,-1-yr(r,e+1,n),3)}function e5(r,e,t,n){return new U(E.negint,-1-wr(r,e+1,n),5)}var C2=BigInt(-1),t5=BigInt(1);function r5(r,e,t,n){let o=br(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,C2-BigInt(o),9)}function r1(r,e){let t=e.value,n=typeof t=="bigint"?t*C2-t5:t*-1-1;vt(r,e.type.majorEncoded,n)}r1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*C2-t5:t*-1-1;return n<wt[0]?1:n<wt[1]?2:n<wt[2]?3:n<wt[3]?5:9};r1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function rc(r,e,t,n){Xn(r,e,t+n);let o=di(r,e+t,e+t+n);return new U(E.bytes,o,t+n)}function n5(r,e,t,n){return rc(r,e,1,t)}function o5(r,e,t,n){return rc(r,e,2,gr(r,e+1,n))}function s5(r,e,t,n){return rc(r,e,3,yr(r,e+1,n))}function i5(r,e,t,n){return rc(r,e,5,wr(r,e+1,n))}function a5(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer bytes lengths not supported`);return rc(r,e,9,o)}function n1(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===E.string?t1(r.value):r.value),r.encodedBytes}function fi(r,e){let t=n1(e);vt(r,e.type.majorEncoded,t.length),r.push(t)}fi.encodedSize=function(e){let t=n1(e);return vt.encodedSize(t.length)+t.length};fi.compareTokens=function(e,t){return YS(n1(e),n1(t))};function YS(r,e){return r.length<e.length?-1:r.length>e.length?1:G8(r,e)}function nc(r,e,t,n,o){let s=t+n;Xn(r,e,s);let i=new U(E.string,q8(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=di(r,e+t,e+s)),i}function c5(r,e,t,n){return nc(r,e,1,t,n)}function l5(r,e,t,n){return nc(r,e,2,gr(r,e+1,n),n)}function u5(r,e,t,n){return nc(r,e,3,yr(r,e+1,n),n)}function d5(r,e,t,n){return nc(r,e,5,wr(r,e+1,n),n)}function f5(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer string lengths not supported`);return nc(r,e,9,o,n)}var h5=fi;function hi(r,e,t,n){return new U(E.array,n,t)}function p5(r,e,t,n){return hi(r,e,1,t)}function m5(r,e,t,n){return hi(r,e,2,gr(r,e+1,n))}function g5(r,e,t,n){return hi(r,e,3,yr(r,e+1,n))}function y5(r,e,t,n){return hi(r,e,5,wr(r,e+1,n))}function w5(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer array lengths not supported`);return hi(r,e,9,o)}function b5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return hi(r,e,1,1/0)}function o1(r,e){vt(r,E.array.majorEncoded,e.value)}o1.compareTokens=Pr.compareTokens;o1.encodedSize=function(e){return vt.encodedSize(e.value)};function pi(r,e,t,n){return new U(E.map,n,t)}function x5(r,e,t,n){return pi(r,e,1,t)}function E5(r,e,t,n){return pi(r,e,2,gr(r,e+1,n))}function v5(r,e,t,n){return pi(r,e,3,yr(r,e+1,n))}function S5(r,e,t,n){return pi(r,e,5,wr(r,e+1,n))}function A5(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer map lengths not supported`);return pi(r,e,9,o)}function I5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return pi(r,e,1,1/0)}function s1(r,e){vt(r,E.map.majorEncoded,e.value)}s1.compareTokens=Pr.compareTokens;s1.encodedSize=function(e){return vt.encodedSize(e.value)};function _5(r,e,t,n){return new U(E.tag,t,1)}function T5(r,e,t,n){return new U(E.tag,gr(r,e+1,n),2)}function k5(r,e,t,n){return new U(E.tag,yr(r,e+1,n),3)}function C5(r,e,t,n){return new U(E.tag,wr(r,e+1,n),5)}function P5(r,e,t,n){return new U(E.tag,br(r,e+1,n),9)}function i1(r,e){vt(r,E.tag.majorEncoded,e.value)}i1.compareTokens=Pr.compareTokens;i1.encodedSize=function(e){return vt.encodedSize(e.value)};var eA=20,tA=21,rA=22,nA=23;function R5(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 D5(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 P2(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 L5(r,e,t,n){return P2(R2(r,e+1),3,n)}function N5(r,e,t,n){return P2(D2(r,e+1),5,n)}function B5(r,e,t,n){return P2(F5(r,e+1),9,n)}function a1(r,e,t){let n=e.value;if(n===!1)r.push([E.float.majorEncoded|eA]);else if(n===!0)r.push([E.float.majorEncoded|tA]);else if(n===null)r.push([E.float.majorEncoded|rA]);else if(n===void 0)r.push([E.float.majorEncoded|nA]);else{let o,s=!1;(!t||t.float64!==!0)&&(M5(n),o=R2(jr,1),n===o||Number.isNaN(n)?(jr[0]=249,r.push(jr.slice(0,3)),s=!0):(U5(n),o=D2(jr,1),n===o&&(jr[0]=250,r.push(jr.slice(0,5)),s=!0))),s||(oA(n),o=F5(jr,1),jr[0]=251,r.push(jr.slice(0,9)))}}a1.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){M5(n);let o=R2(jr,1);if(n===o||Number.isNaN(n))return 3;if(U5(n),o=D2(jr,1),n===o)return 5}return 9};var O5=new ArrayBuffer(9),Rr=new DataView(O5,1),jr=new Uint8Array(O5,0);function M5(r){if(r===1/0)Rr.setUint16(0,31744,!1);else if(r===-1/0)Rr.setUint16(0,64512,!1);else if(Number.isNaN(r))Rr.setUint16(0,32256,!1);else{Rr.setFloat32(0,r);let e=Rr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Rr.setUint16(0,31744,!1);else if(t===0)Rr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Rr.setUint16(0,0):o<-14?Rr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Rr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function R2(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 U5(r){Rr.setFloat32(0,r,!1)}function D2(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 oA(r){Rr.setFloat64(0,r,!1)}function F5(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)}a1.compareTokens=Pr.compareTokens;function ve(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function c1(r){return()=>{throw new Error(`${Q} ${r}`)}}var K=[];for(let r=0;r<=23;r++)K[r]=ve;K[24]=Y8;K[25]=Q8;K[26]=X8;K[27]=j8;K[28]=ve;K[29]=ve;K[30]=ve;K[31]=ve;for(let r=32;r<=55;r++)K[r]=ve;K[56]=Z8;K[57]=J8;K[58]=e5;K[59]=r5;K[60]=ve;K[61]=ve;K[62]=ve;K[63]=ve;for(let r=64;r<=87;r++)K[r]=n5;K[88]=o5;K[89]=s5;K[90]=i5;K[91]=a5;K[92]=ve;K[93]=ve;K[94]=ve;K[95]=c1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)K[r]=c5;K[120]=l5;K[121]=u5;K[122]=d5;K[123]=f5;K[124]=ve;K[125]=ve;K[126]=ve;K[127]=c1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)K[r]=p5;K[152]=m5;K[153]=g5;K[154]=y5;K[155]=w5;K[156]=ve;K[157]=ve;K[158]=ve;K[159]=b5;for(let r=160;r<=183;r++)K[r]=x5;K[184]=E5;K[185]=v5;K[186]=S5;K[187]=A5;K[188]=ve;K[189]=ve;K[190]=ve;K[191]=I5;for(let r=192;r<=215;r++)K[r]=_5;K[216]=T5;K[217]=k5;K[218]=C5;K[219]=P5;K[220]=ve;K[221]=ve;K[222]=ve;K[223]=ve;for(let r=224;r<=243;r++)K[r]=c1("simple values are not supported");K[244]=ve;K[245]=ve;K[246]=ve;K[247]=R5;K[248]=c1("simple values are not supported");K[249]=L5;K[250]=N5;K[251]=B5;K[252]=ve;K[253]=ve;K[254]=ve;K[255]=D5;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 $5(r){switch(r.type){case E.false:return vn([244]);case E.true:return vn([245]);case E.null:return vn([246]);case E.bytes:return r.value.length?void 0:vn([64]);case E.string:return r.value===""?vn([96]):void 0;case E.array:return r.value===0?vn([128]):void 0;case E.map:return r.value===0?vn([160]):void 0;case E.uint:return r.value<24?vn([Number(r.value)]):void 0;case E.negint:if(r.value>=-24)return vn([31-Number(r.value)])}}var iA={float64:!1,mapSorter:lA,quickEncodeToken:$5};function aA(){let r=[];return r[E.uint.major]=Pr,r[E.negint.major]=r1,r[E.bytes.major]=fi,r[E.string.major]=h5,r[E.array.major]=o1,r[E.map.major]=s1,r[E.tag.major]=i1,r[E.float.major]=a1,r}var V5=aA(),L2=new ec,u1=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(`${Qn} object contains circular references`);return new r(t,e)}},To={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)},ko={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?To.true:To.false},null(r,e,t,n){return To.null},undefined(r,e,t,n){return To.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?[To.emptyArray,new U(E.break)]:To.emptyArray;n=u1.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=l1(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?[To.emptyMap,new U(E.break)]:To.emptyMap;n=u1.createCheck(n,r);let a=[],c=0;for(let l of s)a[c++]=[l1(l,t,n),l1(o?r.get(l):r[l],t,n)];return cA(a,t),t.addBreakTokens?[new U(E.map,i),a,new U(E.break)]:[new U(E.map,i),a]}};ko.Map=ko.Object;ko.Buffer=ko.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))ko[`${r}Array`]=ko.DataView;function l1(r,e={},t){let n=$8(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||ko[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=ko[n];if(!s)throw new Error(`${Qn} unsupported type: ${n}`);return s(r,n,e,t)}function cA(r,e){e.mapSorter&&r.sort(e.mapSorter)}function lA(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=V5[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function K5(r,e,t,n){if(Array.isArray(e))for(let o of e)K5(r,o,t,n);else t[e.type.major](r,e,n)}function N2(r,e,t){let n=l1(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 ec(i);if(s(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return Ja(a.chunks[0])}}return L2.reset(),K5(L2,n,e,t),L2.toBytes(!0)}function hs(r,e){return e=Object.assign({},iA,e),N2(r,V5,e)}var uA={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},d1=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}},oc=Symbol.for("DONE"),f1=Symbol.for("BREAK");function dA(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=mi(e,t);if(s===f1){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(s===oc)throw new Error(`${Q} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function fA(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},s=n?new Map:void 0;for(let i=0;i<r.value;i++){let a=mi(e,t);if(a===f1){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===oc)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=mi(e,t);if(c===oc)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 mi(r,e){if(r.done())return oc;let t=r.next();if(t.type===E.break)return f1;if(t.type.terminal)return t.value;if(t.type===E.array)return dA(t,r,e);if(t.type===E.map)return fA(t,r,e);if(t.type===E.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=mi(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({},uA,e);let t=e.tokenizer||new d1(r,e),n=mi(t,e);if(n===oc)throw new Error(`${Q} did not find any content to decode`);if(n===f1)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function Jr(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 jn="/",H5=new TextEncoder().encode(jn),h1=H5[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]!==h1)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(jn))}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=H5),this._buf[0]!==h1){let e=new Uint8Array(this._buf.byteLength+1);e.fill(h1,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===h1;)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(jn).slice(1)}type(){return hA(this.baseNamespace())}name(){return pA(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(jn)||(e+=jn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(jn):new r(e.slice(0,-1).join(jn))}child(e){return this.toString()===jn?e:e.toString()===jn?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(),...mA(e.map(t=>t.namespaces()))])}};function hA(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function pA(r){let e=r.split(":");return e[e.length-1]}function mA(r){return[].concat(...r)}function p1({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*gA(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*M2(n,o))}else{let t=Z.asCID(e);t!=null?yield[r.join("/"),t]:yield*M2(e,r)}}function*M2(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*gA(s,o)}}function*yA(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*U2(n,o))}else yield*U2(e,r)}function*U2(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*yA(o,n))}}function wA(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 F2=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:p1(),bytes:p1(),value:p1(),asBlock:p1()})}links(){return M2(this.value,[])}tree(){return U2(this.value,[])}get(e="/"){return wA(this.value,e.split("/").filter(Boolean))}};function q5({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 F2({cid:e,bytes:r,value:o})}var Y5="/pin/",W5="/pinned-block/",$2=pn,z5=1;function G5(r){return r.version===0&&(r=r.toV1()),new De(`${Y5}${r.toString($2)}`)}var m1=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=G5(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 fr({concurrency:z5});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>J(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,hs(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=q5({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(`${W5}${$2.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,hs(s),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=G5(e),o=await this.datastore.get(n,t),s=Jr(o);await this.datastore.delete(n,t);let i=new fr({concurrency:z5});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>J(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:Y5+(e.cid!=null?`${e.cid.toString(pn)}`:"")},e)){let o=Z.parse(t.toString().substring(5),pn),s=Jr(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new De(`${W5}${$2.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}};var V2=1,K2=5;var sc=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Co=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},ic=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},ac=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var bA=5,g1=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??bA}async start(){await bt(...this.routers)}async stop(){await Ct(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Co("No content routers available");let n=new Ut({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of $t(n.toGenerator(),...gi(this.routers,"findProviders").map(s=>s.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let s=await this.findPeer(o.id,t);return s.multiaddrs.length===0?null:s}catch(s){return this.log.error("could not load multiaddrs for peer %p",o.id,s),null}},{peerId:o.id,signal:t.signal}).catch(s=>{this.log.error("could not load multiaddrs for peer %p",o.id,s)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new Co("No content routers available");await Promise.all(gi(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(gi(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(gi(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Co("No peer routers available");let n=this,o=$t(...gi(this.routers,"findPeer").map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s;throw new Be("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Co("No peer routers available");for await(let n of $t(...gi(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function gi(r,e){return r.filter(t=>t[e]!=null)}var Po={},yi=r=>{r.addEventListener("message",e=>{yi.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{yi.dispatchEvent("message",r,e)})};yi.addEventListener=(r,e)=>{Po[r]==null&&(Po[r]=[]),Po[r].push(e)};yi.removeEventListener=(r,e)=>{Po[r]!=null&&(Po[r]=Po[r].filter(t=>t===e))};yi.dispatchEvent=function(r,e,t){Po[r]!=null&&Po[r].forEach(n=>n(e,t))};var H2=yi;var q2="lock:worker:request-read",W2="lock:worker:release-read",z2="lock:master:grant-read",G2="lock:worker:request-write",Y2="lock:worker:release-write",Q2="lock:master:grant-write";var Q5=(r=21)=>Math.random().toString().substring(2);var X5=(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)})}}}))},j5=(r,e,t,n)=>async()=>{let o=Q5();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)})},xA={singleProcess:!1},Z5=r=>{if(r=Object.assign({},xA,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return H2.addEventListener("message",X5(t,"requestReadLock",q2,W2,z2)),H2.addEventListener("message",X5(t,"requestWriteLock",G2,Y2,Q2)),t}return{isWorker:!0,readLock:t=>j5(t,q2,z2,W2),writeLock:t=>j5(t,G2,Q2,Y2)}};var ps={},Ro;async function X2(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 EA=(r,e)=>{if(Ro.isWorker===!0)return{readLock:Ro.readLock(r,e),writeLock:Ro.writeLock(r,e)};let t=new Cr({concurrency:1}),n;return{async readLock(){if(n!=null)return X2(n,e);n=new Cr({concurrency:e.concurrency,autoStart:!1});let o=n,s=X2(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),s},async writeLock(){return n=null,X2(t,e)}}},vA={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function cc(r){let e=Object.assign({},vA,r);return Ro==null&&(Ro=Z5(e),Ro.isWorker!==!0&&(Ro.addEventListener("requestReadLock",t=>{ps[t.data.name]!=null&&ps[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Ro.addEventListener("requestWriteLock",async t=>{ps[t.data.name]!=null&&ps[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),ps[e.name]==null&&(ps[e.name]=EA(e.name,e)),ps[e.name]}var y1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=cc({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await bt(this.child),this.started=!0}async stop(){await Ct(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 j2=new De("/version"),J5=1;async function eg(r){if(!await r.has(j2)){await r.put(j2,O(`${J5}`));return}let e=await r.get(j2),t=F(e);if(parseInt(t,10)!==J5)throw new Error("Unknown datastore version, a datastore migration may be required")}var ep={};Qe(ep,{code:()=>J2,decode:()=>RA,decodeOptions:()=>kA,encode:()=>PA,encodeOptions:()=>_A,name:()=>CA,toByteView:()=>rg});var tg=42;function rg(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function SA(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,tg),new U(E.bytes,t)]}function AA(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function IA(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 Z2={float64:!0,typeEncoders:{Object:SA,undefined:AA,number:IA}},_A={...Z2,typeEncoders:{...Z2.typeEncoders}};function TA(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return Z.decode(r.subarray(1))}var w1={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};w1.tags[tg]=TA;var kA={...w1,tags:w1.tags.slice()},CA="dag-cbor",J2=113,PA=r=>hs(r,Z2),RA=r=>Jr(rg(r),w1);var ap={};Qe(ap,{code:()=>ip,decode:()=>og,encode:()=>ng,format:()=>KA,name:()=>VA,parse:()=>qA,stringify:()=>KA});var tp=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(`${Qn} unsupported type: Uint8Array`)}[E.string.major](e,t){this.prefix(e);let n=t1(JSON.stringify(t.value));e.push(n.length>32?Ja(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(`${Qn} 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 DA(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Qn} 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(`${Qn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Qn} unexpected duplicate map keys, this is not supported`)}var LA={addBreakTokens:!0,mapSorter:DA};function rp(r,e){return e=Object.assign({},LA,e),N2(r,new tp,e)}var wi=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,k2(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 np(r,e){return e=Object.assign({tokenizer:new wi(r,e)},e),Jr(r,e)}function BA(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function OA(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 b1(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 b1(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function MA(r){return b1(new Uint8Array(r))}function UA(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function FA(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 $A={typeEncoders:{Object:OA,Buffer:b1,Uint8Array:b1,Int8Array:en,Uint16Array:en,Int16Array:en,Uint32Array:en,Int32Array:en,Float32Array:en,Float64Array:en,Uint8ClampedArray:en,BigInt64Array:en,BigUint64Array:en,DataView:en,ArrayBuffer:MA,undefined:UA,number:FA}},op=class extends wi{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}},sp={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};sp.tags[42]=Z.parse;var VA="dag-json",ip=297,ng=r=>rp(r,$A),og=r=>{let e=BA(r),t=Object.assign(sp,{tokenizer:new op(e,sp)});return np(e,t)},KA=r=>HA.decode(ng(r));var HA=new TextDecoder,qA=r=>og(WA.encode(r)),WA=new TextEncoder;var hp={};Qe(hp,{code:()=>fp,createLink:()=>pg,createNode:()=>hg,decode:()=>oI,encode:()=>nI,name:()=>rI,prepare:()=>up,validate:()=>dp});var zA=new TextDecoder;function cp(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 x1(r,e){let t;[t,e]=cp(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 sg(r,e){let t;return[t,e]=cp(r,e),[t&7,t>>3,e]}function GA(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=sg(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]=x1(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]=x1(r,n),e.Name=zA.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]=cp(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 ig(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=sg(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]=x1(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]=x1(r,t),n.push(GA(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 cg=new TextEncoder,ag=2**32,YA=2**31;function QA(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=lc(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=cg.encode(r.Name);t-=n.length,e.set(n,t),t=lc(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=lc(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function lg(r){let e=jA(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=lc(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let s=QA(r.Links[o],t.subarray(0,n));n-=s,n=lc(t,n,s)-1,t[n]=18}return t}function XA(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+bi(t)}if(typeof r.Name=="string"){let t=cg.encode(r.Name).length;e+=1+t+bi(t)}return typeof r.Tsize=="number"&&(e+=1+bi(r.Tsize)),e}function jA(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+bi(t)}if(r.Links)for(let t of r.Links){let n=XA(t);e+=1+n+bi(n)}return e}function lc(r,e,t){e-=bi(t);let n=e;for(;t>=YA;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function bi(r){return r%2===0&&r++,Math.floor((ZA(r)+6)/7)}function ZA(r){let e=0;return r>=ag&&(r=Math.floor(r/ag),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+JA[r]}var JA=[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 eI=["Data","Links"],tI=["Hash","Name","Tsize"],lp=new TextEncoder;function dg(r,e){if(r===e)return 0;let t=r.Name?lp.encode(r.Name):[],n=e.Name?lp.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 ug(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function fg(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 up(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=lp.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(fg),e.Links.sort(dg);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function dp(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!ug(r,eI))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(!ug(t,tI))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&&dg(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function hg(r,e=[]){return up({Data:r,Links:e})}function pg(r,e,t){return fg({Hash:t,Name:r,Tsize:e})}function mg(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var rI="dag-pb",fp=112;function nI(r){dp(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),lg(e)}function oI(r){let e=mg(r),t=ig(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 xi(r){return r?.then!=null}function gg(r=[],e){let t={[fp]:hp,[la]:ua,[J2]:ep,[ip]:ap,[l0]:Sl};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);xi(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new ac(`Could not load codec for ${n}`)}}function yg(r=[],e){let t={[dt.code]:dt,[Il.code]:Il,[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);xi(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new ic(`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 Dr=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 Zn=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 E1=0,v1=class extends Zn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===E1||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===E1)return e.multihash.digest;if(this.child==null)throw new Dr;return this.child.get(e)}has(e){return e.multihash.code===E1?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==E1&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function sI(r){return r[Symbol.asyncIterator]!=null}function iI(r,e){let t=0;if(sI(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Vs(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=iI;function aI(r){return r[Symbol.asyncIterator]!=null}function wg(r){return r?.then!=null}function cI(r,e){let t=0;if(aI(r))return async function*(){for await(let c of r){let l=e(c,t++);wg(l)&&await l,yield c}}();let n=Vs(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++);wg(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var ms=cI;var S1=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 v1(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=ms(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 bg(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(ms(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 bg(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)}},A1=class extends S1{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await bt(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Ct(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 pp({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},pp=class extends S1{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=he([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=he([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=he([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=he([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=he([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=he([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=he([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=he([this.closeController.signal,e.signal]);V(1/0,t);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function lI(r){return typeof r.retrieve=="function"}var uI=(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(xi(o)?n=await o:n=o,!J(n.digest,r.multihash.digest))throw new io("Hash of downloaded block did not match multihash from passed CID")}};async function bg(r,e,t,n){let o=uI(r,t),s=new AbortController,i=he([s.signal,n.signal]);V(1/0,s.signal,i);let a=[];for(let c of e)lI(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 mp=kt($u(),1);var dI=Math.LN2*Math.LN2,I1=class r{static create(e,t=.005){let n=fI(e,t);return new r(n)}seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=hI(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=mp.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=mp.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 fI(r,e=.005){let t=Math.round(-1*r*Math.log(e)/dI),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function hI(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(pt(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var gs=class extends xe{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=I1.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=ee();if(this.requests.set(n,s.promise),this.providers.length===0){let l=!1;this.intialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.intialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.intialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let i=!1,a=new fr({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{i=!0,s.resolve(l.detail.result)}),a.addEventListener("idle",()=>{i||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let d=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(d)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),s.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),s.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(d=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,d)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await s.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=ee(),s=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let i of this.findNewProviders(e,n)){if(s===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(i)&&(this.log("found %d/%d new providers",s,this.maxProviders),this.providers.push(i),this.safeDispatchEvent("provider",{detail:i}),s++,s===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",s);break}}if(this.log("found %d/%d new session peers",s,this.maxProviders),s<t)throw new sc(`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 _1=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??_o(),this.log=this.logger.forComponent("helia"),this.getHasher=yg(e.hashers,e.loadHasher),this.getCodec=gg(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 g1(t,{routers:(e.routers??[]).flatMap(o=>{let s=[o];return o[ln]!=null&&s.push(o[ln]),o[un]!=null&&s.push(o[un]),s}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new A1(t);this.pins=new m1(e.datastore,n,this.getCodec),this.blockstore=new y1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await eg(this.datastore),await bt(this.blockstore,this.datastore,this.routing)}async stop(){await Ct(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 gp=class extends gs{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function xg(r,e){return new gp(r,e)}var T1=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 yp=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 k1(r){let{name:e,metrics:t}=r,n;return t!=null?n=new yp({name:e,metrics:t}):n=new Map,n}function pI(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Ft(r);e.push(t),r=r.slice(pe(t))}return e}var Eg=pI;var C1=class extends xe{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),V(1/0,this),this.peers=Xa({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=k1({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??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 dr(this,"block",t?.signal,{filter:a=>J(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await dr(this,"presence",t?.signal,{filter:i=>J(e.multihash.digest,i.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=ee(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Yn;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 Yn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Je.WantHave,priority:1}),await this.network.sendMessage(t,o),(await dr(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&J(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:Je.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Yn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Je.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await dr(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&J(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=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=Eg(o.prefix),i=s[0],a=s[1],c=s[2],l=c===dt.code?dt: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===Sr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Yn(!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 P1=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 T1(e),this.network=new Dl(e,t),this.peerWantLists=new Wu({...e,network:this.network},t),this.wantList=new C1({...e,network:this.network},t)}createSession(e={}){return xg({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=he([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 vg=(r,e={})=>new P1(r,e);var wp=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=vg(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 bp(r={}){return e=>new wp(e,r)}var R1=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 Sg=45,mI=15,Ei=new R1;function xp(r){if(!(r.length>mI))return Ei.new(r).parseWith(()=>Ei.readIPv4Addr())}function Ep(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>Sg))return Ei.new(r).parseWith(()=>Ei.readIPv6Addr())}function D1(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>Sg))return Ei.new(r).parseWith(()=>Ei.readIPAddr())}function vi(r){return!!xp(r)}function Si(r){return!!Ep(r)}function L1(r){return!!D1(r)}var Ig=kt(Ag(),1),gI=["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"],yI=gI.map(r=>new Ig.Netmask(r));function vp(r){for(let e of yI)if(e.contains(r))return!0;return!1}function wI(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function bI(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 vp(o)}function xI(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function EI(r){let e=r.split(":"),t=e[e.length-1];return vp(t)}function vI(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 Ot(r){return vi(r)?vp(r):wI(r)?bI(r):xI(r)?EI(r):Si(r)?vI(r):void 0}var WK=parseInt("0xFFFF",16),zK=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var kg=vi,TI=Si,Sp=function(r){let e=0;if(r=r.toString().trim(),kg(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(TI(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=kg(t[n]),i;s&&(i=Sp(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")},Cg=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 Ai={},Ap={},CI=[[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"]];CI.forEach(r=>{let e=PI(...r);Ap[e.code]=e,Ai[e.name]=e});function PI(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function te(r){if(typeof r=="number"){if(Ap[r]!=null)return Ap[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Ai[r]!=null)return Ai[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var TH=te("ip4"),kH=te("ip6"),CH=te("ipcidr");function kp(r,e){switch(te(r).code){case 4:case 41:return DI(e);case 42:return Tp(e);case 6:case 273:case 33:case 132:return Dg(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Tp(e);case 421:return OI(e);case 444:return Rg(e);case 445:return Rg(e);case 466:return BI(e);case 481:return globalThis.encodeURIComponent(Tp(e));default:return F(e,"base16")}}function Cp(r,e){switch(te(r).code){case 4:return Pg(e);case 41:return Pg(e);case 42:return _p(e);case 6:case 273:case 33:case 132:return Pp(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return _p(e);case 421:return LI(e);case 444:return MI(e);case 445:return UI(e);case 466:return NI(e);case 481:return _p(globalThis.decodeURIComponent(e));default:return O(e,"base16")}}var Ip=Object.values(Ln).map(r=>r.decoder),RI=function(){let r=Ip[0].or(Ip[1]);return Ip.slice(2).forEach(e=>r=r.or(e)),r}();function Pg(r){if(!L1(r))throw new Error("invalid ip address");return Sp(r)}function DI(r){let e=Cg(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!L1(e))throw new Error("invalid ip address");return e}function Pp(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function Dg(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function _p(r){let e=O(r),t=Uint8Array.from(Ve(e.length));return Pe([t,e],t.length+e.length)}function Tp(r){let e=Ft(r);if(r=r.slice(pe(e)),r.length!==e)throw new Error("inconsistent lengths");return F(r)}function LI(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 NI(r){let e=RI.decode(r),t=Uint8Array.from(Ve(e.length));return Pe([t,e],t.length+e.length)}function BI(r){let e=Ft(r),t=r.slice(pe(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+F(t,"base64url")}function OI(r){let e=Ft(r),t=r.slice(pe(e));if(t.length!==e)throw new Error("inconsistent lengths");return F(t,"base58btc")}function MI(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=ut.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Pp(n);return Pe([t,o],t.length+o.length)}function UI(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=ut.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Pp(n);return Pe([t,o],t.length+o.length)}function Rg(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=F(e,"base32"),o=Dg(t);return`${n}:${o}`}function Lg(r){r=Rp(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let s=0;s<o.length;s++){let i=o[s],a=te(i);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw Bg("invalid address: "+r);if(a.path===!0){n=Rp(o.slice(s).join("/")),e.push([a.code,Cp(a.code,n)]),t.push([a.code,n]);break}let c=Cp(a.code,o[s]);e.push([a.code,c]),t.push([a.code,kp(a.code,c)])}return{string:Ng(t),bytes:Lp(e),tuples:e,stringTuples:t,path:n}}function Dp(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=Ft(r,o),i=pe(s),a=te(s),c=FI(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 Bg("Invalid address Uint8Array: "+F(r,"base16"));e.push([s,l]);let d=kp(s,l);if(t.push([s,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:Ng(t),tuples:e,stringTuples:t,path:n}}function Ng(r){let e=[];return r.map(t=>{let n=te(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Rp(e.join("/"))}function Lp(r){return Pe(r.map(e=>{let t=te(e[0]),n=Uint8Array.from(Ve(t.code));return e.length>1&&e[1]!=null&&(n=Pe([n,e[1]])),n}))}function FI(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Ft(e instanceof Uint8Array?e:Uint8Array.from(e));return t+pe(t)}}function Rp(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function Bg(r){return new Error("Error parsing address: "+r)}var $I=Symbol.for("nodejs.util.inspect.custom"),Bp=Symbol.for("@multiformats/js-multiaddr/multiaddr"),VI=[te("dns").code,te("dns4").code,te("dns6").code,te("dnsaddr").code],Np=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},N1=class r{bytes;#e;#t;#r;#o;[Bp]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=Dp(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=Lg(e)}else if(Do(e))t=Dp(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,s="",i=te("tcp"),a=te("udp"),c=te("ip4"),l=te("ip6"),d=te("dns6"),u=te("ip6zone");for(let[h,p]of this.stringTuples())h===u.code&&(s=`%${p??""}`),VI.includes(h)&&(t=i.name,o=443,n=`${p??""}${s}`,e=h===d.code?6:4),(h===i.code||h===a.code)&&(t=te(h).name,o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=te(h).name,n=`${p??""}${s}`,e=h===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},te(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>te(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(Lp(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Ai.p2p.code&&e.push([n,o]),n===Ai["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 J(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(s=>s.resolvable);if(t==null)return[this];let n=Ii.get(t.name);if(n==null)throw new Np(`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)}[$I](){return`Multiaddr(${this.#e})`}};var Ii=new Map;function Do(r){return!!r?.[Bp]}function X(r){return new N1(r)}var KI=r=>r.toString().split("/").slice(1),dc=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Ie=r=>({match:e=>dc(t=>t===r).match(e),pattern:r}),M1=()=>({match:r=>dc(e=>typeof e=="string").match(r),pattern:"{string}"}),U1=()=>({match:r=>dc(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}"}),B1=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{s0.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 rt(...r){function e(o){let s=KI(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 F1=Te(Ie("dns4"),M1()),$1=Te(Ie("dns6"),M1()),V1=Te(Ie("dnsaddr"),M1()),Mp=Te(Ie("dns"),M1()),nq=rt(F1,Fe(Ye())),oq=rt($1,Fe(Ye())),sq=rt(V1,Fe(Ye())),K1=rt(or(Mp,V1,F1,$1),Fe(Ye())),Og=Te(Ie("ip4"),dc(vi)),Mg=Te(Ie("ip6"),dc(Si)),Up=or(Og,Mg),Jn=or(Up,Mp,F1,$1,V1),Ug=rt(or(Up,Te(or(Mp,V1,F1,$1),Fe(Ye())))),iq=rt(Og),aq=rt(Mg),Fg=rt(Up),Fp=Te(Jn,Ie("tcp"),U1()),fc=Te(Jn,Ie("udp"),U1()),$p=rt(Te(Fp,Fe(Ye()))),cq=rt(fc),Vp=Te(fc,Ie("quic")),H1=Te(fc,Ie("quic-v1")),HI=or(Vp,H1),lq=rt(Vp),uq=rt(H1),Op=or(Jn,Fp,fc,Vp,H1),$g=or(Te(Op,Ie("ws"),Fe(Ye()))),Kp=rt($g),Vg=or(Te(Op,Ie("wss"),Fe(Ye())),Te(Op,Ie("tls"),Ie("ws"),Fe(Ye()))),Hp=rt(Vg),Kg=Te(fc,Ie("webrtc-direct"),Fe(B1()),Fe(B1()),Fe(Ye())),hc=rt(Kg),Hg=Te(H1,Ie("webtransport"),Fe(B1()),Fe(B1()),Fe(Ye())),ys=rt(Hg),O1=or($g,Vg,Te(Fp,Fe(Ye())),Te(HI,Fe(Ye())),Te(Jn,Fe(Ye())),Kg,Hg,Ye()),dq=rt(O1),qI=Te(O1,Ie("p2p-circuit"),Ye()),Sn=rt(qI),WI=or(Te(O1,Ie("p2p-circuit"),Ie("webrtc"),Fe(Ye())),Te(O1,Ie("webrtc"),Fe(Ye())),Ie("webrtc")),pc=rt(WI),zI=or(Te(Jn,Ie("tcp"),U1(),Ie("http"),Fe(Ye())),Te(Jn,Ie("http"),Fe(Ye()))),qg=rt(zI),GI=or(Te(Jn,Ie("tcp"),or(Te(Ie("443"),Ie("http")),Te(U1(),Ie("https"))),Fe(Ye())),Te(Jn,Ie("tls"),Ie("http"),Fe(Ye())),Te(Jn,Ie("https"),Fe(Ye()))),Wg=rt(GI);var YI=[te("tcp").code,te("dns").code,te("dnsaddr").code,te("dns4").code,te("dns6").code];function zg(r){let e;try{e=te("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function Gg(r){return r.some(([e,t])=>e===te("tls").code)}function sr(r,e,t){let n=Yg[te(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${te(r).name}`);let o=n(e,t);return r===te("ip6").code?`[${o}]`:o}var Yg={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=Gg(e),n=zg(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=Gg(e),n=zg(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 q1(r,e){let n=X(r).stringTuples(),o=n.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let s=te(o[0]),i=Yg[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&YI.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 W1=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 QI(r,e,t){return r.filter(n=>{if(Wg.matches(n)||e&&qg.matches(n))return t||K1.matches(n)?!0:Ot(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*z1(r,e,t,n,o,s){for await(let i of e.findProviders(r,s)){let a=QI(i.multiaddrs,n,o);if(a.length===0)continue;let c=q1(a[0]);yield new W1(c,t)}}var qp=class extends gs{routing;allowInsecure;allowLocal;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??G1,this.allowLocal=t.allowLocal??Y1}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*z1(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 Qg(r,e){return new qp(r,e)}var Q1=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??G1,this.allowLocal=t.allowLocal??Y1}async retrieve(e,t={}){let n=[];for await(let o of z1(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 Qg({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure})}};var G1=!1,Y1=!1;function Wp(r={}){return e=>new Q1(e,r)}async function*X1(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 t_=kt(j1(),1);var rn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},Z1=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},_i=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"}},ed=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},td=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},mc=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 XI=pr("ipns:utils"),Xg=O("/ipns/");var jI=0,ZI=18;function jg(r){let e;if(r.pubKey!=null)try{e=tt(r.pubKey)}catch(t){throw XI.error(t),t}if(e!=null)return e}function Zg(r){let e=O("ipns-signature:");return Pe([e,r])}function gc(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 An(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=Jg(e.data),n=JI(t.Value),o=F(t.Validity);if(e.value!=null&&e.signatureV1!=null)return e_(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 yc(r){return Pe([Xg,r.bytes])}function Ti(r){let e=Ce(r.slice(Xg.length));if(!rd(e,jI)&&!rd(e,ZI))throw new io("Multihash in IPNS key was not identity or sha2-256");return e}function Jg(r){let e=Jr(r);if(e.ValidityType===0)e.ValidityType=ir.ValidityType.EOL;else throw new _i("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 JI(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 ed("Value must be a valid content path starting with /")}function e_(r){if(r.data==null)throw new td("Record data is missing");let e=Jg(r.data);if(!J(e.Value,r.value??new Uint8Array(0)))throw new rn('Field "value" did not match between protobuf and CBOR');if(!J(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 rd(r,e){return r.code===e}var rW=pr("ipns"),nW=60*60*1e9,r_="/ipns/",oW=r_.length;var e7=kt(j1(),1);var nd=pr("ipns:validator"),n_=1024*10,o_=async(r,e)=>{let t=An(e),n;try{let o=Zg(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw nd.error("record signature verification failed"),new rn("Record signature verification failed");if(t.validityType===ir.ValidityType.EOL){if(e7.default.fromString(t.validity).toDate().getTime()<Date.now())throw nd.error("record has expired"),new Z1("record has expired")}else if(t.validityType!=null)throw nd.error("the validity type is unsupported"),new _i("The validity type is unsupported");nd("ipns record for %s is valid",t.value)};async function od(r,e){if(e.byteLength>n_)throw new J1("The record is too large");let t=Ti(r),n;rd(t,0)&&(n=Ou(t));let o=An(e),s=jg(o)??n;if(s==null)throw new mc("Could not extract public key from IPNS record or routing key");let i=yc(s.toMultihash());if(!J(r,i))throw new mc("Embedded public key did not match routing key");await o_(s,e)}async function*wc(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 ki=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},ws=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function s_(r){return r[Symbol.asyncIterator]!=null}function i_(r){if(s_(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var bc=i_;var t7=O("/ipns/");function r7(r){return J(r.subarray(0,t7.byteLength),t7)}var sd=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(!r7(e))return;let o=Ti(e),s=Z.createV1(114,o),i=An(t);await this.client.putIPNS(s,i,n)}async get(e,t){if(!r7(e))throw new Be("Not found");let n=Ti(e),o=Z.createV1(114,n);try{let s=await this.client.getIPNS(o,t);return gc(s)}catch(s){throw s.name==="BadResponseError"?new Be("Not found"):s}}},id=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await bc(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 Ht=pr("delegated-routing-v1-http-api-client"),n7={concurrentRequests:4,timeout:3e4},ad=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 Cr({concurrency:t.concurrentRequests??n7.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??n7.timeout,this.contentRouting=new sd(this),this.peerRouting=new id(this)}get[ln](){return this.contentRouting}get[un](){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={}){Ht("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=he([this.shutDownController.signal,n,t.signal]);V(1/0,n,o);let s=ee(),i=ee();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=`${this.clientUrl}routing/v1/providers/${e.toString()}`,l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new Be("No matching records found");if(l.status===422)throw new ki("Request does not conform to schema or semantic constraints");if(l.body==null)throw new ws("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 wc(X1(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){Ht.error("getProviders errored:",a)}finally{o.clear(),i.resolve(),Ht("getProviders finished: %c",e)}}async*getPeers(e,t={}){Ht("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=he([this.shutDownController.signal,n,t.signal]);V(1/0,n,o);let s=ee(),i=ee();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`,l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new Be("No matching records found");if(l.status===422)throw new ki("Request does not conform to schema or semantic constraints");if(l.body==null)throw new ws("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 wc(X1(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){Ht.error("getPeers errored:",a)}finally{o.clear(),i.resolve(),Ht("getPeers finished: %c",e)}}async getIPNS(e,t={}){Ht("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=he([this.shutDownController.signal,n,t.signal]);V(1/0,n,o);let s=ee(),i=ee();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=await fetch(a,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o});if(Ht("getIPNS GET %s %d",a,l.status),l.status===404)throw new Be("No matching records found");if(l.status===422)throw new ki("Request does not conform to schema or semantic constraints");if(l.body==null)throw new ws("GET ipns response had no body");let d=await l.arrayBuffer(),u=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await od(yc(e.multihash),u),An(u)}catch(c){throw Ht.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),i.resolve(),Ht("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){Ht("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=he([this.shutDownController.signal,o,n.signal]);V(1/0,o,s);let i=ee(),a=ee();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await i.promise;let l=gc(t),u=await fetch(c,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s});if(Ht("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new ws("PUT ipns response had status other than 200")}catch(l){throw Ht.error("putIPNS PUT %s error:",c,l.stack),l}finally{s.clear(),a.resolve(),Ht("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){Ht.error("could not conform record to peer schema",t)}}};function o7(r,e={}){return new ad(new URL(r),e)}var s7="[a-fA-F\\d:]",Lo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${s7})|(?<=${s7})(?=\\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}",at="[a-fA-F\\d]{1,4}",cd=`
|
|
8
8
|
(?:
|
|
9
|
-
(?:${
|
|
10
|
-
(?:${
|
|
11
|
-
(?:${
|
|
12
|
-
(?:${
|
|
13
|
-
(?:${
|
|
14
|
-
(?:${
|
|
15
|
-
(?:${
|
|
16
|
-
(?::(?:(?::${
|
|
9
|
+
(?:${at}:){7}(?:${at}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
|
|
10
|
+
(?:${at}:){6}(?:${nn}|:${at}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
|
|
11
|
+
(?:${at}:){5}(?::${nn}|(?::${at}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
|
|
12
|
+
(?:${at}:){4}(?:(?::${at}){0,1}:${nn}|(?::${at}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
|
|
13
|
+
(?:${at}:){3}(?:(?::${at}){0,2}:${nn}|(?::${at}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
|
|
14
|
+
(?:${at}:){2}(?:(?::${at}){0,3}:${nn}|(?::${at}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
|
|
15
|
+
(?:${at}:){1}(?:(?::${at}){0,4}:${nn}|(?::${at}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
|
|
16
|
+
(?::(?:(?::${at}){0,5}:${nn}|(?::${at}){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(),JI=new RegExp(`(?:^${nn}$)|(?:^${nd}$)`),e_=new RegExp(`^${nn}$`),t_=new RegExp(`^${nd}$`),$p=r=>r&&r.exact?JI:new RegExp(`(?:${Ro(r)}${nn}${Ro(r)})|(?:${Ro(r)}${nd}${Ro(r)})`,"g");$p.v4=r=>r&&r.exact?e_:new RegExp(`${Ro(r)}${nn}${Ro(r)}`,"g");$p.v6=r=>r&&r.exact?t_:new RegExp(`${Ro(r)}${nd}${Ro(r)}`,"g");var Vp=$p;function Kp(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function e7(){return!1}var{toString:r_}=Object.prototype;function Hp(r){return r_.call(r)==="[object RegExp]"}var t7={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function qp(r,e={}){if(!Hp(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(t7).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?t7[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function Wp(r,e,{timeout:t}={}){try{return Kp(()=>qp(r).test(e),{timeout:t})()}catch(n){if(e7(n))return!1;throw n}}var n_=15,o_=45,r7={timeout:400};function zp(r){return r.length>o_?!1:Wp(Vp.v6({exact:!0}),r,r7)}function n7(r){return r.length>n_?!1:Wp(Vp.v4({exact:!0}),r,r7)}var o7={http:"80",https:"443",ws:"80",wss:"443"},s_=["http","https","ws","wss"];function s7(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:s}=i_(r),a="/"+[a_(o,t),c_(s,n),l_(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return X(a)}function i_(r){let[e]=r.split(":");s_.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let s=u_(e);s!=null&&(o=s),s==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function a_(r,e){if(!(r==null||r==="")){if(n7(r))return["ip4",r];if(zp(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(zp(t))return["ip6",t]}return[e,r]}}function c_(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function l_(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function u_(r){if(!(r==null||r===""||o7[r]==null))return o7[r]}var d_=["https://trustless-gateway.link","https://4everland.io"],f_=2336;function h_(r){return r=r.toString(),{id:En(Z.createV1(f_,jt.digest(O(r)))),multiaddrs:[s7(r)]}}var Gp=class{gateways;constructor(e={}){this.gateways=(e.gateways??d_).map(t=>h_(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function Yp(r={}){return new Gp(r)}var Qp=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 Xp(r){return new Qp(r)}var pc=class extends Zn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(at.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(at.encode(e.multihash.bytes));if(t==null)throw new Pr;return t}has(e){return this.data.has(at.encode(e.multihash.bytes))}async delete(e){this.data.delete(at.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:Z.createV1(ia,Te(at.decode(e))),block:t}}};var Ez=hr("blockstore:core:tiered");var c7="SHARDING";function m_(r){return r[Symbol.asyncIterator]!=null}function g_(r){if(m_(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 mc=g_;function y_(r){return r[Symbol.asyncIterator]!=null}function w_(r,e){return y_(r)?async function*(){yield*(await mc(r)).sort(e)}():function*(){yield*mc(r).sort(e)}()}var od=w_;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=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)=>od(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=tn(n,()=>o++>=s)}return e.limit!=null&&(n=io(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)=>od(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=tn(n,()=>s++>=o)}return e.limit!=null&&(n=io(n,e.limit)),n}};var ys=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 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 Le(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Le(e)}};var eG=new Le(c7);var pG=hr("datastore:core:tiered");var sd=class extends S1{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 jp=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 u7(){return new jp}var id=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var Zp=class extends Error{code;constructor(e,t){super(e),this.code=t}},Jp=class extends Zp{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function ad(r,e){let t=u7();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 Jp("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 id("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 cd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},ld=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},ud=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function _n(r,e={}){let t=ad(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 cd("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new ud("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new ld("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 e3(){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 d7(){let r=e3(),e=e3();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var vi=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function dd(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function t3(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function r3(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function sr(r,...e){if(!r3(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 n3(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 f7(r,e){sr(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var eo=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),h7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),b_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!b_)throw new Error("Non little-endian hardware is not supported");function x_(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function fd(r){if(typeof r=="string")r=x_(r);else if(r3(r))r=hd(r);else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function p7(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function m7(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 o3=(r,e)=>(Object.assign(e,r),e);function s3(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 hd(r){return Uint8Array.from(r)}function to(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var y7=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),E_=y7("expand 16-byte k"),v_=y7("expand 32-byte k"),S_=eo(E_),w7=eo(v_),nY=w7.slice();function Y(r,e){return r<<e|r>>>32-e}function i3(r){return r.byteOffset%4===0}var pd=64,A_=16,b7=2**32-1,g7=new Uint32Array;function I_(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(pd),d=eo(l),u=i3(o)&&i3(s),f=u?eo(o):g7,h=u?eo(s):g7;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=b7)throw new Error("arx: counter overflow");let m=Math.min(pd,c-p);if(u&&m===pd){let g=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,b;y<A_;y++)b=g+y,h[b]=f[b]^d[y];p+=pd;continue}for(let g=0,y;g<m;g++)y=p+g,s[y]=o[y]^l[g];p+=m}}function a3(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=p7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return dd(o),dd(i),t3(s),t3(t),(a,c,l,d,u=0)=>{sr(a),sr(c),sr(l);let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),sr(d),dd(u),u<0||u>=b7)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=hd(a)),g=w7;else if(p===16&&t)m=new Uint8Array(32),m.set(a),m.set(a,16),g=S_,h.push(m);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);i3(c)||h.push(c=hd(c));let y=eo(m);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(g,y,eo(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=eo(c);return I_(r,g,y,w,l,d,u,i),to(...h),d}}var vt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,c3=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=fd(e),sr(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),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|k<<12)&8191),L=s[5]+(k>>>1&8191),D=s[6]+((k>>>14|T<<2)&8191),I=s[7]+((T>>>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+=L*(5*f)+D*(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+=L*(5*h)+D*(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+=L*(5*p)+D*(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+=L*(5*m)+D*(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+=L*(5*g)+D*(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+=L*a+D*(5*g)+I*(5*m)+A*(5*p)+R*(5*h),P+=fe>>>13,fe&=8191;let be=P+_*h+$*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+$*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+$*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+$*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;to(n)}update(e){n3(this);let{buffer:t,blockLen:n}=this;e=fd(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(){to(this.h,this.r,this.buffer,this.pad)}digestInto(e){n3(this),f7(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 __(r){let e=(n,o)=>r(o).update(fd(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var x7=__(r=>new c3(r));function S7(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,v=a,S=c,_=l,$=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+$|0,R=Y(R^T,16),L=L+R|0,$=Y($^L,12),T=T+$|0,R=Y(R^T,8),L=L+R|0,$=Y($^L,7),v=v+N|0,P=Y(P^v,16),D=D+P|0,N=Y(N^D,12),v=v+N|0,P=Y(P^v,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),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),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),_=_+$|0,q=Y(q^_,16),D=D+q|0,$=Y($^D,12),_=_+$|0,q=Y(q^_,8),D=D+q|0,$=Y($^D,7);let j=0;n[j++]=i+T|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+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 k_(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 T_=a3(S7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),C_=a3(S7,{counterRight:!1,counterLength:8,extendNonceFn:k_,allowShortKeys:!1});var P_=new Uint8Array(16),E7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(P_.subarray(t))},R_=new Uint8Array(32);function v7(r,e,t,n,o){let s=r(e,t,R_),i=x7.create(s);o&&E7(i,o),E7(i,n);let a=new Uint8Array(16),c=h7(a);s3(c,0,BigInt(o?o.length:0),!0),s3(c,8,BigInt(n.length),!0),i.update(a);let l=i.digest();return to(s,a),l}var A7=r=>(e,t,n)=>(sr(e,32),sr(t),{encrypt(s,i){let a=s.length,c=a+16;i?sr(i,c):i=new Uint8Array(c),r(e,t,s,i,1);let l=v7(r,e,t,i.subarray(0,-16),n);return i.set(l,a),to(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?sr(i,c):i=new Uint8Array(c);let l=s.subarray(0,-16),d=s.subarray(-16),u=v7(r,e,t,l,n);if(!m7(d,u))throw new Error("invalid tag");return r(e,t,l,i,1),to(u),i}}),l3=o3({blockSize:64,nonceLength:12,tagLength:16},A7(T_)),fY=o3({blockSize:64,nonceLength:24,tagLength:16},A7(C_));function _7(r,e,t){return jo(r),t===void 0&&(t=new Uint8Array(r.outputLen)),vo(r,qr(t),qr(e))}var u3=new Uint8Array([0]),I7=new Uint8Array;function k7(r,e,t,n=32){if(jo(r),lo(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=I7);let s=new Uint8Array(o*r.outputLen),i=vo.create(r,e),a=i._cloneInto(),c=new Uint8Array(i.outputLen);for(let l=0;l<o;l++)u3[0]=l+1,a.update(l===0?I7:c).update(t).update(u3).digestInto(c),s.set(c,r.outputLen*l),i._cloneInto(a);return i.destroy(),a.destroy(),c.fill(0),u3.fill(0),s.slice(0,n)}var d3={hashSHA256(r){return Sr(r.subarray())},getHKDF(r,e){let t=_7(Sr,e,r),o=k7(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=ba.utils.randomPrivateKey();return{publicKey:ba.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:ba.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return ba.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return l3(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return l3(n,e,t).decrypt(r.subarray(),o)}};var T7=d3;function C7(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 Si=r=>{let e=We(2);return e[0]=r>>8,e[1]=r,e};Si.bytes=2;var gc=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)};gc.bytes=2;function P7(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 f3(r,e){!e.enabled||!vi||(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 h3(r,e){!e.enabled||!vi||(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 R7(r,e){!e.enabled||!vi||e(r?`REMOTE_STATIC_PUBLIC_KEY ${F(r.subarray(),"hex")}`:"Missing remote static public key.")}function p3(r,e){!e.enabled||!vi||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${F(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function m3(r,e,t){!t.enabled||!vi||(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 Ai=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var L_=0,D_=4294967295,N_="Cipherstate has reached maximum n, a new handshake must be performed",md=class{n;bytes;view;constructor(e=L_){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>D_)throw new Error(N_)}};var ws=ie(0),Ii=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new md(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}},g3=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=O(t,"utf-8");this.h=B_(e,n),this.ck=this.h,this.cs=new Ii(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Ii(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ce(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,ws);return[new Ii(this.crypto,e),new Ii(this.crypto,t)]}},y3=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 g3(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()}},yc=class extends y3{writeMessageA(e){return new ce(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ce(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ce(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Ai(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new Ai(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new Ai(`handshake stage 2 validation fail: ${t.message}`)}}};function B_(r,e){if(e.length<=32){let t=ie(32);return t.set(e),t}else return r.hash(e)}var gd;(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())})(gd||(gd={}));var wc;(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),gd.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=gd.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())})(wc||(wc={}));async function w3(r,e,t){let n=await r.sign(L7(e));return wc.encode({identityKey:Rt(r.publicKey),identitySig:n,extensions:t})}async function b3(r,e,t){try{let n=wc.decode(r),o=et(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=L7(e);if(!await o.verify(s,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new Zc(n.message)}}function L7(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 D7(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await w3(s,a.publicKey,l),u=new yc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});f3(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(ws),e),t.trace("Stage 0 - Initiator finished sending first message."),h3(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."),p3(u.re,t),R7(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await b3(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 m3(p,m,t),{payload:h,encrypt:g=>p.encryptWithAd(ws,g),decrypt:(g,y)=>m.decryptWithAd(ws,g,y)}}async function N7(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await w3(s,a.publicKey,l),u=new yc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});f3(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."),p3(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."),h3(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 b3(f,u.rs,c),[p,m]=u.ss.split();return m3(p,m,t),{payload:h,encrypt:g=>m.encryptWithAd(ws,g),decrypt:(g,y)=>p.decryptWithAd(ws,g,y)}}var O7=16;function M7(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(Si(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-O7<o)throw new Error("Invalid chunk");let i=n.sublist(o,s),a=n.subarray(o,s-O7);try{let c=r.decrypt(i,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var yd=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??T7;this.crypto=C7(c),this.extensions=o,this.metrics=a?P7(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:Si,lengthDecoder:gc,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=et(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:xn(i)}}async secureInbound(e,t){let n=_n(e,{lengthEncoder:Si,lengthDecoder:gc,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=et(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:xn(i)}}async performHandshakeInitiator(e,t,n,o){let s;try{s=await D7({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 N7({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]=d7(),s=e.unwrap();return await Ve(n,M7(t,this.metrics),s,i=>Yt(i,{lengthDecoder:gc}),U7(t,this.metrics),n),o}};function _i(r={}){return e=>new yd(e,r)}function wd(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"}},ki=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Ti=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},bd=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},xd=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},Ed=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},vd=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Ci=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var F7=new Set([sn.name,ki.name,Ti.name,xd.name,Ed.name,vd.name,Ci.name]),xc=256*1024,$7=16*1024*1024;var V7={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:xc,maxStreamWindowSize:$7,maxMessageSize:64*1024};function K7(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<xc)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 je;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(je||(je={}));var qe;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(qe||(qe={}));var qQ=Object.values(qe).filter(r=>typeof r!="string"),H7=0,Lr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Lr||(Lr={}));var Lo=12;var q7=2**24;function O_(r){if(r[0]!==H7)throw new sn("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*q7+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*q7+(r[9]<<16)+(r[10]<<8)+r[11]}}var Sd=class{source;buffer;frameInProgress;constructor(e){this.source=M_(e),this.buffer=new ce,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===je.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new bd("decoding frame already in progress");if(this.buffer.length<Lo)return;let e=O_(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 M_(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 x3(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 W7(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function Ad(r,e){let t=wd(r).return?.();W7(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var U_=5e3;function E3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var kn=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??U_,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 qo(`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);E3(o)&&await o}let n=()=>{Ad(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);E3(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();E3(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 rl("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 Id=class extends kn{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=xc,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:je.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:je.WindowUpdate,flag:qe.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|qe.FIN;this.sendFrame({type:je.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new ht("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 Ci("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:je.WindowUpdate,flag:e,streamID:this._id,length:o})}};var z7="/yamux/1.0.0",F_=500,_d=class{protocol=z7;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Se]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new v3(this._components,{...this._init,...e})}},v3=class{protocol=z7;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={...V7,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),K7(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=wd(n);if(a.return!=null){let c=a.return();$_(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},s,i;try{let a=new Sd(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=Lr.NormalTermination}catch(a){F7.has(a.name)?(this.log?.error("protocol error in sink",a),s=Lr.ProtocolError):(this.log?.error("internal error in sink",a),s=Lr.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 so("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??Lr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(F_);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??Lr.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 Id({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(s)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return s}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:s}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case je.Ping:{this.handlePing(e);return}case je.GoAway:{this.handleGoAway(s);return}default:throw new sn("Invalid frame type")}else switch(e.type){case je.Data:case je.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 ki("ping not requested");if(this.activePing.id!==e)throw new Ti("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Lr[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:s}=e;(o&qe.SYN)===qe.SYN&&this.incomingStream(n);let i=this._streams.get(n);if(i===void 0){if(s===je.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.("frame for missing stream id=%s",n);return}switch(s){case je.WindowUpdate:{i.handleWindowUpdate(e);return}case je.Data:{if(t===void 0)throw new Error("unreachable");await i.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new 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:je.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:je.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,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===je.Data){if(t===void 0)throw new sn("Invalid frame");this.source.push(new ce(x3(e),t))}else this.source.push(x3(e))}sendPing(e,t=qe.SYN){t===qe.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:je.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Lr.NormalTermination){this.log?.("sending GoAway reason=%s",Lr[e]),this.localGoAway=e,this.sendFrame({type:je.GoAway,flag:0,streamID:0,length:e})}};function $_(r){return r!=null&&typeof r.then=="function"}function G7(r={}){return e=>new _d(e,r)}var kd=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 kd("task-complete"))},g=>{m.done=!0,m.err=g,o.dispatchEvent(new kd("task-complete"))})}c=!0,o.dispatchEvent(new kd("task-complete"))}catch(p){l=p,o.dispatchEvent(new kd("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 Y7="libp2p",Q7="autonat",X7="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)=>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)})(ye||(ye={}));var S3=4,Td=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??Y7}/${Q7}/${X7}`,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 ht)};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 gs(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=mt(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=!(rr(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(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: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!(rr(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 ht)},n.addEventListener("abort",d,{once:!0});let h=await Ve([s],m=>Gt(m),f,m=>Yt(m),async m=>gs(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 an(Qt(this.components.randomWalk.walk({signal:n}),d=>async()=>c(d)),{concurrency:S3}))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===S3){this.log("%a is externally dialable",d),e.confirmObservedAddr(d);return}if(i[u].failure===S3){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 j7(r={}){return e=>new Td(e,r)}var z_=W("dns4"),G_=W("dns6"),Y_=W("dnsaddr"),No=rt(W("dns"),Y_,z_,G_),Cd=rt(W("ip4"),W("ip6")),Pi=rt(se(Cd,W("tcp")),se(No,W("tcp"))),Pd=se(Cd,W("udp")),Q_=se(Pd,W("utp")),X_=se(Pd,W("quic")),j_=se(Pd,W("quic-v1")),A3=rt(se(Pi,W("ws")),se(No,W("ws"))),Ri=rt(se(A3,W("p2p")),A3),I3=rt(se(Pi,W("wss")),se(No,W("wss")),se(Pi,W("tls"),W("ws")),se(No,W("tls"),W("ws"))),bs=rt(se(I3,W("p2p")),I3),_3=rt(se(Pi,W("http")),se(Cd,W("http")),se(No,W("http"))),k3=rt(se(Pi,W("https")),se(Cd,W("https")),se(No,W("https"))),Z7=se(Pd,W("webrtc-direct"),W("certhash")),t9=rt(se(Z7,W("p2p")),Z7),J7=se(j_,W("webtransport"),W("certhash"),W("certhash")),r9=rt(se(J7,W("p2p")),J7),n9=rt(se(Ri,W("p2p-webrtc-star"),W("p2p")),se(bs,W("p2p-webrtc-star"),W("p2p")),se(Ri,W("p2p-webrtc-star")),se(bs,W("p2p-webrtc-star"))),jX=rt(se(Ri,W("p2p-websocket-star"),W("p2p")),se(bs,W("p2p-websocket-star"),W("p2p")),se(Ri,W("p2p-websocket-star")),se(bs,W("p2p-websocket-star"))),o9=rt(se(_3,W("p2p-webrtc-direct"),W("p2p")),se(k3,W("p2p-webrtc-direct"),W("p2p")),se(_3,W("p2p-webrtc-direct")),se(k3,W("p2p-webrtc-direct"))),xs=rt(A3,I3,_3,k3,n9,o9,Pi,Q_,X_,No,t9,r9),ZX=rt(se(xs,W("p2p-stardust"),W("p2p")),se(xs,W("p2p-stardust"))),Do=rt(se(xs,W("p2p")),n9,o9,t9,r9,W("p2p")),e9=rt(se(Do,W("p2p-circuit"),Do),se(Do,W("p2p-circuit")),se(W("p2p-circuit"),Do),se(xs,W("p2p-circuit")),se(W("p2p-circuit"),xs),W("p2p-circuit")),s9=()=>rt(se(e9,s9),e9),cn=s9(),i9=rt(se(cn,Do,cn),se(Do,cn),se(cn,Do),cn,Do);var JX=rt(se(cn,W("webrtc"),W("p2p")),se(cn,W("webrtc")),se(xs,W("webrtc"),W("p2p")),se(xs,W("webrtc")),W("webrtc"));function a9(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:a9(e),partialMatch:e}}function rt(...r){function e(n){let o=null;return r.some(s=>{let i=typeof s=="function"?s().partialMatch(n):s.partialMatch(n);return i!=null?(o=i,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:a9(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 Z_="bootstrap",J_=50,ek=1e3,T3=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??ek,this.list=[];for(let n of t.list){if(!i9.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}[Ho]=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??Z_]:{value:this._init.tagValue??J_,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 l9(r){return e=>new T3(e,r)}var Ec;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,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)})(Ec||(Ec={}));var Rd=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var br=class r{static createFromProtobuf=async e=>{let t=Ec.decode(e),n=et(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=u9(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 Rd("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=Ec.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=u9(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},u9=(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 d9(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 f9="libp2p-peer-record",h9=Uint8Array.from([3,1]);var vc;(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)})(vc||(vc={}));var $t=class r{static createFromProtobuf=e=>{let t=vc.decode(e),n=mt(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=f9;static CODEC=h9;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=vc.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||!d9(this.multiaddrs,e.multiaddrs))}};function Ye(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 p9="circuit-relay-relay";var Lj=BigInt(131072),Es="/libp2p/circuit/relay/0.2.0/hop",C3="/libp2p/circuit/relay/0.2.0/stop",Dj=30*1e3,Nj=30*1e3,P3=300,m9=4096,g9=.001;var Bo;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Li.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),Ld.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Di.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=Li.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=Ld.codec().decode(o,o.uint32(),{limits:i.limits?.reservation});break}case 4:{a.limit=Di.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)})(Bo||(Bo={}));var Tn;(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),Li.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Di.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=Li.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.limit=Di.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)})(Tn||(Tn={}));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.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)})(Li||(Li={}));var Ld;(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)})(Ld||(Ld={}));var Di;(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)})(Di||(Di={}));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 R3;(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"})(R3||(R3={}));(function(r){r.codec=()=>Ke(R3)})(St||(St={}));var y9;(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)})(y9||(y9={}));function L3(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Sc=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 D3(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=>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 Dd=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(Es,{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(Es)],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 N3=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 gt,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 sl("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 w9(r){return new N3(r)}var ok=60*1e3*10,sk=60*1e3*5,ik=30*1e3,Nd=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 gt,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e3,this.started=!1,this.relayFilter=a2(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(L3(o.reservation.expire)>ok){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=L3(a.expire),l=Math.min(Math.max(c-sk,ik),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:{[p9]:{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(Es,t),s=Ye(n).pb(Bo);await s.write({type:Bo.Type.RESERVE},t);let i;try{i=await s.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(i.status===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 ck=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(X)}catch{return!1}return!0},B3={maxInboundStopStreams:P3,maxOutboundStopStreams:P3,stopTimeout:3e4},Bd=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??B3.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??B3.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??B3.stopTimeout;let n=t.discoverRelays??0;n>0&&(this.discovery=new Dd(e,{filter:t.discoveryFilter??d2(m9,g9)}),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 Nd(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(C3,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(C3),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 Rn(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 Rn(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(Es),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(Bo);c?.(new H("circuit-relay:write-connect-message")),await d.write({type:Bo.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 Sc(u.limit),h=D3({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 w9({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=Ye(t).pb(Tn),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:Tn.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(s.type!==Tn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:Tn.Type.STATUS,status:St.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!ck(s)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:Tn.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let i=mt(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:Tn.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:Tn.Type.STATUS,status:St.OK},{signal:n});let a=new Sc(s.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),l=this.addressManager.getAddresses()[0],d=D3({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 O3(r={}){return e=>new Bd(e,r)}var b9=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},lk=new WeakMap;function uk({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(b9());let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(b9())},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}),lk.set(u,()=>{c(s),s=null,i()}),u}}var dk=uk(),Od=dk;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 M3(r,e){return An.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:O1.matches(r)?!0:Rg.matches(r)?rr(r.toOptions().host)===!1:!1}var x9=1024*4,E9=100,Md={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Ud=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??Md.timeout,this.retries=t.retries??Md.retries,this.maxInboundStreams=t.maxInboundStreams??Md.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Md.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[$r]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Ac,{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(Ac,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(Ac),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([Ac],{signal:o.signal,runOnLimitedConnection:!0});let s=Ye(t,{maxDataLength:x9}).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 Od(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:E9});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=>M3(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=Ye(e,{maxDataLength:x9}).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:E9,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(!M3(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Ac="/libp2p/dcutr";function v9(r={}){return e=>new Ud(e,r)}var S9="0.1.0",A9="id",I9="id/push",_9="1.0.0",k9="1.0.0";var Oo;(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)})(Oo||(Oo={}));var P9=kt(C9(),1),U3=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,Fd=(0,P9.default)(),$d=U3&&!Fd,R9=Fd&&!U3,L9=Fd&&U3,D9=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!Fd,Vd=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,JZ=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",N9=typeof navigator<"u"&&navigator.product==="ReactNative";var ir={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function B9(r){if(r!=null&&r.length>0)try{return X(r)}catch{}}function mk(r,e){return e!=null||(e=`${r.name}/${r.version}`,D9||R9?e+=` UserAgent=${globalThis.process.version}`:($d||Vd||L9||N9)&&(e+=` UserAgent=${globalThis.navigator.userAgent}`)),e}async function Kd(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=et(o.publicKey);if(!xn(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=En(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 Ni=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??ir.timeout,this.maxInboundStreams=t.maxInboundStreams??ir.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??ir.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??ir.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??ir.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??ir.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??ir.protocolPrefix}/${S9}`,agentVersion:mk(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 Hd=class extends Ni{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ir.protocolPrefix}/${I9}/${k9}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??ir.concurrency,(t.runOnSelfUpdate??ir.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 $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=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 Ye(f,{maxDataLength:c.maxMessageSize}).pb(Oo).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(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 Ye(n,{maxDataLength:this.maxMessageSize}).pb(Oo).read(o);await n.close(o),await Kd(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 qd=class extends Ni{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ir.protocolPrefix}/${A9}/${_9}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??ir.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(Oo).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=et(o),c=En(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=B9(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)),Kd(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 $t({peerId:this.peerId,multiaddrs:i});a=(await br.seal(d,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;Pg.matches(t.remoteAddr)||(c=void 0),await Ye(n).pb(Oo).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 O9(r={}){return e=>new qd(e,r)}function M9(r={}){return e=>new Hd(e,r)}var U9="/ipfs/kad/1.0.0",F9="/dht/record",F3="/dht/provider";var Ic;(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)})(Ic||(Ic={}));function $9(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 V9(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 Ic.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:$9(this.timeReceived)}}static deserialize(e){let t=Ic.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=V9(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 Mo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Wd=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},zd=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},Gd=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var K9;(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)})(K9||(K9={}));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 Yd;(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"})(Yd||(Yd={}));(function(r){r.codec=()=>Ke(Yd)})(we||(we={}));var Oi;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Oi||(Oi={}));var $3;(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"})($3||($3={}));(function(r){r.codec=()=>Ke($3)})(Oi||(Oi={}));var Bi;(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),Oi.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=Oi.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)})(Bi||(Bi={}));var Nr;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&Yd[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),Bi.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Bi.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(Bi.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(Bi.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)})(Nr||(Nr={}));function V3(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 _c(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 Qd(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 K3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function kc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function H3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function H9(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 Gd(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:s(e,t)}function yk(r,e){return 0}var q9={pk:yk};async function Mi(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 wk=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=et(e),o=r.slice(4);if(!te(o,n.toMultihash().bytes))throw new C("public key does not match passed in key")},W9={pk:wk};var bk=O("/pk/");function z9(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=rr(n);return o==null?!0:!o})}}async function Uo(r){return(await ct.digest(r)).digest}async function Br(r){return Uo(r.toMultihash().bytes)}function Fo(r){return new Le(`${F9}/${F(r,"base32")}`,!1)}function G9(r){return Pe([bk,r.toMultihash().bytes])}function Y9(r){return F(r.subarray(0,4))==="/pk/"}function Q9(r){let e=Te(r.subarray(4));return mt(e)}function q3(r,e){let t=new Date;return new At(r,e,t).serialize()}function X9(r,e=100){let t;return()=>{clearTimeout(t),t=setTimeout(()=>{r()},e)}}var xk=290,Ek=54,vk=55,Sk=56,Ak=4,Ik=41;function j9(r){let e=r.stringTuples();for(let t of e)if(t[0]===xk)return!1;if(e[0][0]===Ek||e[0][0]===vk||e[0][0]===Sk)return!0;if(e[0][0]===Ak||e[0][0]===Ik){let t=rr(`${e[0][1]}`);return t==null||!t}return!1}var Xd=class{log;components;validators;selectors;peerRouting;queryManager;network;constructor(e,t){let{validators:n,selectors:o,peerRouting:s,queryManager:i,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.validators=n,this.selectors=o,this.peerRouting=s,this.queryManager=i,this.network=a}async getLocal(e){this.log("getLocal %b",e);let t=Fo(e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=At.deserialize(n);return await Mi(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=Fo(e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray())}catch(d){this.log.error("Failed error correcting self",d)}continue}let c=!1,l={type: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&&te(d.record.value,At.deserialize(s).value)&&(c=!0),yield d;c||(yield xr({from:a,error:new Mo("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=Fo(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&&te(d.record.value,At.deserialize(o).value)||c.push(xr({from:a.peer.id,error:new Mo("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=H9(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 kc({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 kc({from:s,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function J9(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Tc(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Te(r.id);return{id:mt(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:we.ADD_PROVIDER,key:o,providers:[J9({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=>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 _c({from:this.components.peerId,messageType:we.GET_PROVIDERS,providers:d},t),yield K3({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 tr(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 K3({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var Ui=class{movingAverage;variance;deviation;forecast;timespan;previousTime;constructor(e){this.timespan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timespan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,s=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*s),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var _k=1.2,kk=2,Tk=2e3,Fi=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Ui(e.interval??5e3),this.failure=new Ui(e.interval??5e3),this.next=new Ui(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??kk,this.timeoutMultiplier=e.timeoutMultiplier??_k,this.minTimeout=e.minTimeout??Tk,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 Zd=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 Fi({...t.timeout??{},metrics:e.metrics,metricName:`${t.logPrefix.replaceAll(":","_")}_network_message_send_times_milliseconds`})}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new C("Message type was missing");this.log("sending %s to %p",t.type,e),yield H3({peer:e},n),yield V3({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 _c({from:e,messageType:c.type,closer:c.closer.map(Tc),providers:c.providers.map(Tc),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 H3({peer:e},n),yield V3({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 _c({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,Nr,n),await o.unwrap().close(n)}async _writeReadMessage(e,t,n){let o=Ye(e);await o.write(t,Nr,n);let s=await o.read(Nr,n);return await o.unwrap().close(n),s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:Tc(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:Tc(i)})}),s}};function $i(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var Vi=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await Br(e.id);this.addWitKadId(e,t)}addWitKadId(e,t){if(this.peerDistances.find(o=>o.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:on(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,s)=>$i(o.distance,s.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await Br(e),n=on(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return $i(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var Jd=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=G9(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let s=et(o.record.value),i=xn(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 kc({from:e,value:o.record.value},t)}throw new Mo(`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 Qd({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 Qd({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 Uo(e),o=this.routingTable.closestPeers(n),s=this,i=new Vi(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await i.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){s.log("closerPeersSingle %s from %p",F(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 Qd({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 Mo(i)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new zd("invalid record received");await Mi(this.validators,new At(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await Uo(e),o=this.routingTable.closestPeers(n),s=[];for(let i of o)if(!i.equals(t))try{let a=await this.peerStore.get(i);s.push({id:i,multiaddrs:a.addresses.map(({multiaddr:c})=>c)})}catch(a){if(a.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 ey=kt(E2(),1);var ef=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,ey.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:F3});for await(let a of i)try{let{cid:c,peerId:l}=ty(a.key),d=ry(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=Cc(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=Cc(e),n=this.cache.get(t);return n==null&&(n=await Dk(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=Cc(e);this.cache.set(s,n),await Lk(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 Cc(r){let e=typeof r=="string"?r:F(r.multihash.bytes,"base32");return`${F3}/${e}`}async function Lk(r,e,t,n){let o=[Cc(e),"/",t.toString()].join(""),s=new Le(o),i=$e(n.getTime());await r.put(s,i)}function ty(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 Dk(r,e){let t=new Map,n=r.query({prefix:Cc(e)});for await(let o of n){let{peerId:s}=ty(o.key);t.set(s,ry(o.value))}return t}function ry(r){return new Date(Bt(r))}async function*ny(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 ur({concurrency:i,sort:(g,y)=>$i(g.options.distance,y.options.distance)}),p=await Uo(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=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 v=await Br(T.id),S=on(v,p);if($i(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,v)}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 Br(t));try{for await(let g of h.toGenerator({signal:o}))g!=null&&(yield g)}catch(g){throw o.aborted?new Wd("Query aborted"):g}}var tf=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:`+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.queries++,this.metrics?.runningQueries.update(this.queries);let d=await Uo(e),u=this.routingTable.closestPeers(d),f=u.slice(0,Math.min(this.disjointPaths,u.length));if(u.length===0){a.error("Running query with no peers");return}let h=new tr,p=f.map((m,g)=>ny({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 Nk(r){return r[Symbol.asyncIterator]!=null}function Bk(r){if(Nk(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 rf=Bk;var Ok=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 Mk(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}=Ok(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 Pc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=Mk(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var nf=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=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 Pc(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=>io(s,this.count),async s=>rf(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 Uk(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 sy(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 Rc(r){return Array.isArray(r?.peers)}var of=class extends pe{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;constructor(e){super(),this.localPeer=e.localPeer,this.prefixLength=e.prefixLength,this.kBucketSize=e.kBucketSize??Lc,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfNodesToPing??3,sy("options.localPeer.kadId",e.localPeer.kadId),this.root={prefix:"",depth:0,peers:[]}}add(e){sy("peer.kadId",e?.kadId);let t=this._determineBucket(e.kadId);if(!(this._indexOf(t,e.kadId)>-1)){if(t.peers.length===this.splitThreshold&&t.depth<this.prefixLength){this._split(t),this.add(e);return}if(t.peers.length<this.kBucketSize){t.peers.push(e),this.safeDispatchEvent("added",{detail:e});return}this.safeDispatchEvent("ping",{detail:{oldContacts:t.peers.slice(0,this.numberOfNodesToPing),newContact:e}})}}*closest(e,t=this.kBucketSize){let n=new Vi(e,t);for(let o of this.toIterable())n.addWitKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Qt(n.peers,o=>o.id)}count(){function e(t){if(Rc(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(Rc(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 Rc(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=>Uk(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 Fk="kad-close",$k=50,Lc=20,Vk=32,Kk=1e4,Hk=10,sf=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??Lc,this.pingTimeout=t.pingTimeout??Kk,this.pingConcurrency=t.pingConcurrency??Hk,this.running=!1,this.protocol=t.protocol,this.tagName=t.tagName??Fk,this.tagValue=t.tagValue??$k,this.prefixLength=t.prefixLength??Vk,this.splitThreshold=t.splitThreshold??Lc,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 of({localPeer:{kadId:await Br(this.components.peerId),peerId:this.components.peerId},kBucketSize:this.kBucketSize,prefixLength:this.prefixLength,splitThreshold:this.splitThreshold,numberOfNodesToPing:1});this.kb=e,e.addEventListener("ping",n=>{this._onPing(n).catch(o=>{this.log.error("could not process k-bucket ping event",o)})});let t=0;for(let n of await this.components.peerStore.all())if(n.protocols.includes(this.protocol)){let o=await Br(n.id);this.kb.add({kadId:o,peerId:n.id}),t++}this.log("added %d peer store peers to the routing table",t),this._tagPeers(e)}async stop(){this.running=!1,this.pingQueue.clear(),this.kb=void 0}_tagPeers(e){let t=new tr,n=X9(()=>{let o=new tr(e.closest(e.localPeer.kadId,Lc)),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},Nr,l);let f=await u.read(Nr,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 Br(e);return this.kb?.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await Br(e);this.kb.add({kadId:t,peerId:e}),this.log("added %p with kad id %b",e,t),this.updateMetrics()}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await Br(e);this.kb.remove(t),this.updateMetrics()}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0;function o(s){if(Rc(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 iy=[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 af=15,cf=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 rf(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>af&&(e=af);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=dt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),s=Te(o);return mt(s)}async _makePeerId(e,t,n){if(n>af)throw new Error(`Cannot generate peer ID for common prefix length greater than ${af}`);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=iy[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,ct.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 lf=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=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"),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,mt(s))}))}};var uf=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: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 df=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: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 ff=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(Y9(n)){this.log("is public key");let a=Q9(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=Fo(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 hf=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 pf=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 Mi(this.validators,o),o.timeReceived=new Date;let s=Fo(o.key);await this.components.datastore.put(s,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,s)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var mf=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 ff(e,{peerRouting:o,logPrefix:i}),[we.PUT_VALUE.toString()]:new pf(e,{validators:s,logPrefix:i}),[we.FIND_NODE.toString()]:new uf(e,{peerRouting:o,logPrefix:i,peerInfoMapper:a}),[we.ADD_PROVIDER.toString()]:new lf(e,{providers:n,logPrefix:i}),[we.GET_PROVIDERS.toString()]:new df(e,{peerRouting:o,providers:n,logPrefix:i,peerInfoMapper:a}),[we.PING.toString()]:new hf(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=Nr.decode(a);s.log("incoming %s from %p",c.type,o);let l=await s.handleMessage(o,c);l!=null&&(yield Nr.encode(l))}},i=>Gt(i),t)}).catch(t=>{this.log.error(t)})}};var gf=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 z3=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")}},G3=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)}},qk=32,Wk=64,yf=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??qk,this.maxOutboundStreams=h??Wk,this.peerInfoMapper=t.peerInfoMapper??z9,this.routingTable=new sf(e,{kBucketSize:n,pingTimeout:d,pingConcurrency:u,protocol:this.protocol,logPrefix:m}),this.providers=new ef(e,p??{}),this.validators={...W9,...s},this.selectors={...q9,...i},this.network=new Zd(e,{protocol:this.protocol,logPrefix:m});let g=J();t.allowQueryWithZeroPeers===!0&&g.resolve(),this.queryManager=new tf(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:m,initialQuerySelfHasRun:g,routingTable:this.routingTable}),this.peerRouting=new Jd(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:m}),this.contentFetching=new Xd(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 cf(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:m}),this.rpc=new mf(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:m,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new gf(e,{protocol:this.protocol,logPrefix:m}),this.querySelf=new nf(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 G3(this),this.dhtContentRouting=new z3(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})=>j9(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[Ho](){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 ay;(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"})(ay||(ay={}));function cy(r={}){return e=>new yf(e,r)}var yy=kt(gy(),1),qi=yy.default;var Py=kt(_y(),1);var Wi={};Qe(Wi,{create:()=>lT,derivedEmptyPasswordKey:()=>xf});var xf={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function lT(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=er.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",xf,{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",xf,{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",xf,{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 Q3(r,e){let n=await Wi.create().encrypt(r,e);return nt.encode(n)}async function X3(r,e,t){if(r.type==="RSA")return fT(r,e,t);if(r.type==="Ed25519")return uT(r,e,t);if(r.type==="secp256k1")return dT(r,e,t);throw new Fr}async function uT(r,e,t="libp2p-key"){if(t==="libp2p-key")return Q3(ti(r),e);throw new C(`export format '${t}' is not supported`)}async function dT(r,e,t="libp2p-key"){if(t==="libp2p-key")return Q3(ti(r),e);throw new C("Export format is not supported")}async function fT(r,e,t="pkcs-8"){if(t==="pkcs-8")return hT(r,e);if(t==="libp2p-key")return Q3(ti(r),e);throw new C("Export format is not supported")}async function hT(r,e){let t=er.get(),o=new ut({value:[new Je({value:0}),new ut({value:[new Ir({value:"1.2.840.113549.1.1.1"}),new Vn]}),new Kn({valueHex:r.raw})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=dt(16),a=await Bu(po,e,i,{c:1e4,dkLen:32}),c=dt(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 ut({value:[new Kn({valueHex:i}),new Je({value:1e4}),new Je({value:32}),new ut({value:[new Ir({value:"1.2.840.113549.2.11"}),new Vn]})]}),f=new ut({value:[new Ir({value:"1.2.840.113549.1.5.13"}),new ut({value:[new ut({value:[new Ir({value:"1.2.840.113549.1.5.12"}),u]}),new ut({value:[new Ir({value:"2.16.840.1.101.3.4.1.42"}),new Kn({valueHex:c})]})]})]}),p=new ut({value:[f,new Kn({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 j3(r,e){try{let t=await pT(r,e);return s8(t)}catch{}if(!r.includes("BEGIN"))throw new C("Encrypted key was not a libp2p-key or a PEM file");return mT(r,e)}async function pT(r,e){let t=nt.decode(r);return Wi.create().decrypt(t,e)}async function mT(r,e){let t=er.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}=gT(i),f=await Bu(po,e,c,{c:l,dkLen:d}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Dc(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:m}=is(p);n=Cy(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=Cy(i)}else throw new C("Could not parse private key from PEM data");let o=i8(n);if(o.type!=="RSA")throw new C("Could not parse RSA private key from PEM data");return o}function gT(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=Dc(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=Dc(l.valueBlock.value[1].getValue());return{cipherText:Dc(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function Cy(r){return Dc(r.valueBlock.value[2].getValue())}function Dc(r){return new Uint8Array(r,0,r.byteLength)}var yT="/pkcs8/",J3="/info/",Nc=new WeakMap,vs={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},Z3={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function zi(r){return r==null||typeof r!="string"?!1:r===(0,Py.default)(r.trim())&&r.length>0}async function It(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function Ss(r){return new Le(yT+r)}function Gi(r){return new Le(J3+r)}async function wT(r){let e=ti(r),t=await ct.digest(e);return Ee.encode(t.bytes).substring(1)}var Ef=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=qi(Z3,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<vs.minKeyLength)throw new Error(`dek.keyLength must be least ${vs.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<vs.minSaltLength)throw new Error(`dek.saltLength must be least ${vs.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<vs.minIterationCount)throw new Error(`dek.iterationCount must be least ${vs.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Ka(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Nc.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Se]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},Z3),t=Math.ceil(vs.minSaltLength/3)*3;return e.dek.salt=F(dt(t),"base64"),e}static get options(){return Z3}async findKeyByName(e){if(!zi(e))throw await It(),new C(`Invalid key name '${e}'`);let t=Gi(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:J3};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(!zi(e))throw await It(),new C(`Invalid key name '${e}'`);if(t==null)throw await It(),new C("Key is required");let n=Ss(e);if(await this.components.datastore.has(n))throw await It(),new C(`Key '${e}' already exists`);let s,i;try{s=await wT(t);let l=Nc.get(this);if(l==null)throw new C("dek missing");let d=l.dek;i=await X3(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(Gi(e),O(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!zi(e))throw await It(),new C(`Invalid key name '${e}'`);let t=Ss(e);try{let n=await this.components.datastore.get(t),o=F(n),s=Nc.get(this);if(s==null)throw new C("dek missing");let i=s.dek;return await j3(o,i)}catch(n){throw await It(),n}}async removeKey(e){if(!zi(e)||e==="self")throw await It(),new C(`Invalid key name '${e}'`);let t=Ss(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Gi(e)),await o.commit(),n}async listKeys(){let e={prefix:J3},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(!zi(e)||e==="self")throw await It(),new C(`Invalid old key name '${e}'`);if(!zi(t)||t==="self")throw await It(),new C(`Invalid new key name '${t}'`);let n=Ss(e),o=Ss(t),s=Gi(e),i=Gi(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=Nc.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?Ka(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Nc.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(Ss(a.name)),l=F(c),d=await j3(l,o),u=s.toString(),f=await X3(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(Ss(a.name),O(f)),h.put(Gi(a.name),O(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function vf(r={}){return e=>new Ef(e,r)}var Sf=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 Yi=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 em}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 Sf("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 Od(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)}},em=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 Bc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),tm=Object.freeze({NEW_STREAM:ge.NEW_STREAM,MESSAGE:ge.MESSAGE_INITIATOR,CLOSE:ge.CLOSE_INITIATOR,RESET:ge.RESET_INITIATOR}),Ry=Object.freeze({MESSAGE:ge.MESSAGE_RECEIVER,CLOSE:ge.CLOSE_RECEIVER,RESET:ge.RESET_RECEIVER});var rm=1<<20,bT=4<<20,Af=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=rm,t=bT){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}=Dy(e),{value:o,offset:s}=Dy(e,n),i=t&7;if(Bc[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}}},xT=128,Ly=127;function Dy(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&Ly)<<n:(s&Ly)*Math.pow(2,n),n+=7}while(s>=xT);return e=o-e,{value:t,offset:e}}var nm=10*1024,om=class{_pool;_poolOffset;constructor(){this._pool=We(nm),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);nm-o<100?(this._pool=We(nm),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)}},ET=new om;async function*Ny(r){for await(let e of r){let t=new ce;ET.write(e,t),yield t}}var If=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var sm=class extends kn{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?tm:Ry,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:tm.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 By(r){let{id:e,name:t,send:n,onEnd:o,type:s="initiator",maxMsgSize:i=rm}=r;return new sm({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 vT=1024,ST=1024,AT=1024*1024*4,IT=5,_T=500;function Oy(r){let e={...r,type:`${Bc[r.type]} (${r.type})`};return r.type===ge.NEW_STREAM&&(e.data=F(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===ge.MESSAGE_INITIATOR||r.type===ge.MESSAGE_RECEIVER)&&(e.data=F(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var _f=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??_T,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=>Ny(n)),this.closeController=new AbortController,this.rateLimiter=new Yi({points:t.disconnectThreshold??IT,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??ST))throw new so("Too many outbound streams open");if(s.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=By({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,Oy(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=()=>{Ad(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new Af(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",Oy(e)),e.type===ge.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??vT)){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: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,Bc[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??AT;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 If("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 im=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 _f(this.components,{...e,...this._init})}};function My(r={}){return e=>new im(e,r)}var Uy="1.0.0",Fy="ping",$y="ipfs";var kf=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??$y}/${Fy}/${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 cr("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=dt(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 ht)},t.signal?.addEventListener("abort",a,{once:!0});let c=await Ve([o],i,async d=>gs(d)),l=Date.now()-n;if(c==null)throw new na(`Did not receive a ping ack after ${l}ms`);if(!te(o,c.subarray()))throw new na(`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 Ky(r={}){return e=>new kf(e,r)}var Hy=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))},PT=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var RT=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var LT=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 DT=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var NT=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var BT=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,OT=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,qy=3,MT=[["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",BT]],Wy=[["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 Gy(r){return r?zy(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new NT:typeof navigator<"u"?zy(navigator.userAgent):$T()}function UT(r){return r!==""&&MT.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 zy(r){var e=UT(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new DT;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<qy&&(o=Hy(Hy([],o,!0),VT(qy-o.length),!0)):o=[];var s=o.join("."),i=FT(r),a=OT.exec(r);return a&&a[1]?new LT(t,s,i,a[1]):new PT(t,s,i)}function FT(r){for(var e=0,t=Wy.length;e<t;e++){var n=Wy[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function $T(){var r=typeof process<"u"&&process.version;return r?new RT(process.version.slice(1)):null}function VT(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Yy=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"];var Qy=Gy(),Oc=Qy!=null&&Qy.name==="firefox",Tf=async function*(){},Cf=async r=>{},KT=30*1e3;function Xy(r,e,t=KT,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 Mc(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Yy.map(e=>({urls:[e]})),r}var As=class{log;peerConnection;remoteAddr;timeline;metrics;source=Tf();sink=Cf;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)=>re(o,r.codec(),s)})(Vt||(Vt={}));var HT=2*1024*1024,qT=30*1e3,Pf=16*1024;function WT(r=Pf){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 zT=WT(),GT=5e3,YT=5e3,am=class extends kn{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??qT,this.maxBufferedAmount=e.maxBufferedAmount??HT,this.maxMessageSize=(e.maxMessageSize??Pf)-zT,this.receiveFinAck=J(),this.finAckTimeout=e.closeTimeout??GT,this.openTimeout=e.openTimeout??YT,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 qo("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 Pc(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof cr?new cr(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new qo(`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 Pc(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 Qi(r){let{channel:e,direction:t}=r;return new am({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var jy="/webrtc",$o=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??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=Qi({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 cm(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},cm=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=Qi({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),Xy(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=Tf();sink=Cf;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=Qi({channel:e,direction:"outbound",onEnd:()=>{this.log("outgoing channel %s ended with state %s",e.id,e.readyState),this.#e(t,e)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(t),this.metrics?.increment({outgoing_stream:!0}),t}};var Is=globalThis.RTCPeerConnection,Rf=globalThis.RTCSessionDescription,Zy=globalThis.RTCIceCandidate;var Vo=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Or=class extends Vo{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var Uc=class extends Vo{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`),this.name="WebRTC/DataChannelError"}},Lf=class extends Vo{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`),this.name="WebRTC/InappropriateMultiaddrError"}};var Fc=class extends Vo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var Df=class extends Vo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},Nf=class extends Vo{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 ar;(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)})(ar||(ar={}));var Bf=async(r,e,t)=>{try{let n=J();for(QT(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!==ar.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 Zy(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&&Of(r)!=="connected")throw n}};function Of(r){return Oc?r.iceConnectionState:r.connectionState}function QT(r,e){r[Oc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(Of(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new Rs("RTCPeerConnection was closed"));break;default:break}}}async function Jy({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:s,transportManager:i,log:a,logger:c,onProgress:l}){let{baseAddr:d}=ew(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(Mf,{signal:t,runOnLimitedConnection:!0}),g=Ye(m).pb(ar),y=new Is(r),b=new $o({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:ar.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 Or("Failed to set createOffer")});a.trace("initiator send SDP offer %s",x.sdp),l?.(new H("webrtc:send-sdp-offer")),await g.write({type:ar.Type.SDP_OFFER,data:x.sdp},{signal:t}),await y.setLocalDescription(x).catch(v=>{throw a.error("could not execute setLocalDescription",v),new Or("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!==ar.Type.SDP_ANSWER)throw new Or("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",k.data);let T=new Rf({type:"answer",sdp:k.data});return await y.setRemoteDescription(T).catch(v=>{throw a.error("could not execute setRemoteDescription",v),new Or("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await Bf(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 Uf=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 tw({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let s=Ye(e).pb(ar);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),s.write({type:ar.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!==ar.Type.SDP_OFFER)throw new Or(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new Rf({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new Or("Failed to set remoteDescription")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new Or("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await s.write({type:ar.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new Or("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await Bf(r,s,{direction:"recipient",signal:t,log:o})}catch(a){if(Of(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 XT="/webrtc",jT="/p2p-circuit",Mf="/webrtc-signaling/0.0.1",ZT=30*1e3,Ff=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(Mf,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(Mf),this._started=!1}createListener(e){return new Uf(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Mg.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 Jy({rtcConfiguration:await Mc(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),i=new As(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,muxerFactory:s,onProgress:t.onProgress});return this._closeOnShutdown(o,i),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??ZT),o=new Is(await Mc(this.init.rtcConfiguration)),s=new $o(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i}=await tw({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new As(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:i,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:s}),this._closeOnShutdown(o,a)}catch(i){throw this.log.error("incoming signaling error",i),o.close(),t.abort(i),i}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function ew(r){let e=r.toString().split(XT+"/");if(e.length!==2)throw new C("webrtc protocol was not present in multiaddr");if(!e[0].includes(jT))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 lm=Object.values(Dn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function rw(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:eC(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 Fc("","no fingerprint on local certificate");return n}var JT=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function eC(r){return r.match(JT)?.groups?.fingerprint}function tC(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function $f(r){let t=r.stringTuples().filter(n=>n[0]===sw).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 um(r){return ze.decode(lm.decode(r))}function rC(r){let e=um($f(r)),t=dm(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 Fc(n,r.toString());return[`${t} ${o.join(":").toUpperCase()}`,n]}function dm(r){switch(r){case 17:return"SHA-1";case 18:return"SHA-256";case 19:return"SHA-512";default:throw new Nf(r)}}function nC(r,e){let{host:t,port:n}=r.toOptions(),o=tC(r),[s]=rC(r);return`v=0
|
|
18
|
+
`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),a_=new RegExp(`(?:^${nn}$)|(?:^${cd}$)`),c_=new RegExp(`^${nn}$`),l_=new RegExp(`^${cd}$`),Gp=r=>r&&r.exact?a_:new RegExp(`(?:${Lo(r)}${nn}${Lo(r)})|(?:${Lo(r)}${cd}${Lo(r)})`,"g");Gp.v4=r=>r&&r.exact?c_:new RegExp(`${Lo(r)}${nn}${Lo(r)}`,"g");Gp.v6=r=>r&&r.exact?l_:new RegExp(`${Lo(r)}${cd}${Lo(r)}`,"g");var Yp=Gp;function Qp(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function i7(){return!1}var{toString:u_}=Object.prototype;function Xp(r){return u_.call(r)==="[object RegExp]"}var a7={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function jp(r,e={}){if(!Xp(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(a7).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?a7[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function Zp(r,e,{timeout:t}={}){try{return Qp(()=>jp(r).test(e),{timeout:t})()}catch(n){if(i7(n))return!1;throw n}}var d_=15,f_=45,c7={timeout:400};function Jp(r){return r.length>f_?!1:Zp(Yp.v6({exact:!0}),r,c7)}function l7(r){return r.length>d_?!1:Zp(Yp.v4({exact:!0}),r,c7)}var u7={http:"80",https:"443",ws:"80",wss:"443"},h_=["http","https","ws","wss"];function d7(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:s}=p_(r),a="/"+[m_(o,t),g_(s,n),y_(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return X(a)}function p_(r){let[e]=r.split(":");h_.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let s=w_(e);s!=null&&(o=s),s==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function m_(r,e){if(!(r==null||r==="")){if(l7(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 g_(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function y_(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function w_(r){if(!(r==null||r===""||u7[r]==null))return u7[r]}var b_=["https://trustless-gateway.link","https://4everland.io"],x_=2336;function E_(r){return r=r.toString(),{id:En(Z.createV1(x_,Zt.digest(O(r)))),multiaddrs:[d7(r)]}}var em=class{gateways;constructor(e={}){this.gateways=(e.gateways??b_).map(t=>E_(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function tm(r={}){return new em(r)}var rm=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 nm(r){return new rm(r)}var xc=class extends Zn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(ut.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(ut.encode(e.multihash.bytes));if(t==null)throw new Dr;return t}has(e){return this.data.has(ut.encode(e.multihash.bytes))}async delete(e){this.data.delete(ut.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:Z.createV1(la,Ce(ut.decode(e))),block:t}}};var Mz=pr("blockstore:core:tiered");var p7="SHARDING";function S_(r){return r[Symbol.asyncIterator]!=null}function A_(r){if(S_(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 Ec=A_;function I_(r){return r[Symbol.asyncIterator]!=null}function __(r,e){return I_(r)?async function*(){yield*(await Ec(r)).sort(e)}():function*(){yield*Ec(r).sort(e)}()}var ld=__;var eo=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)=>ld(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=tn(n,()=>o++>=s)}return e.limit!=null&&(n=co(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)=>ld(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=tn(n,()=>s++>=o)}return e.limit!=null&&(n=co(n,e.limit)),n}};var bs=class extends eo{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 Dr;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 gG=new De(p7);var PG=pr("datastore:core:tiered");var ud=class extends _1{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 om=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=ee(),this.haveNext=ee()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=ee(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=ee(),await ke(this.readNext.promise,t?.signal,t)}};function g7(){return new om}var dd=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var sm=class extends Error{code;constructor(e,t){super(e),this.code=t}},im=class extends sm{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function xs(r,e){let t=g7();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 im("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 dd("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 fd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},hd=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},pd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function In(r,e={}){let t=xs(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=pe(e.maxDataLength));let n=e?.lengthDecoder??Ft,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 fd("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new pd("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new hd("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 am(){let r=ee(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function y7(){let r=am(),e=am();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Ci=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function md(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function cm(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function lm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function ar(r,...e){if(!lm(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 um(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 w7(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 to=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),b7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),T_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!T_)throw new Error("Non little-endian hardware is not supported");function k_(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function gd(r){if(typeof r=="string")r=k_(r);else if(lm(r))r=yd(r);else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function x7(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function E7(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 dm=(r,e)=>(Object.assign(e,r),e);function fm(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 yd(r){return Uint8Array.from(r)}function ro(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var S7=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),C_=S7("expand 16-byte k"),P_=S7("expand 32-byte k"),R_=to(C_),A7=to(P_),bY=A7.slice();function Y(r,e){return r<<e|r>>>32-e}function hm(r){return r.byteOffset%4===0}var wd=64,D_=16,I7=2**32-1,v7=new Uint32Array;function L_(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(wd),d=to(l),u=hm(o)&&hm(s),f=u?to(o):v7,h=u?to(s):v7;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=I7)throw new Error("arx: counter overflow");let m=Math.min(wd,c-p);if(u&&m===wd){let g=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,b;y<D_;y++)b=g+y,h[b]=f[b]^d[y];p+=wd;continue}for(let g=0,y;g<m;g++)y=p+g,s[y]=o[y]^l[g];p+=m}}function pm(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=x7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return md(o),md(i),cm(s),cm(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),md(u),u<0||u>=I7)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=yd(a)),g=A7;else if(p===16&&t)m=new Uint8Array(32),m.set(a),m.set(a,16),g=R_,h.push(m);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);hm(c)||h.push(c=yd(c));let y=to(m);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(g,y,to(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=to(c);return L_(r,g,y,w,l,d,u,i),ro(...h),d}}var St=(r,e)=>r[e++]&255|(r[e++]&255)<<8,mm=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=gd(e),ar(e,32);let t=St(e,0),n=St(e,2),o=St(e,4),s=St(e,6),i=St(e,8),a=St(e,10),c=St(e,12),l=St(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]=St(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=St(e,t+0),b=St(e,t+2),w=St(e,t+4),x=St(e,t+6),T=St(e,t+8),k=St(e,t+10),v=St(e,t+12),S=St(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 be=P+_*h+$*f+N*u+M*d+B*l;P=be>>>13,be&=8191,be+=D*c+L*a+I*(5*g)+A*(5*m)+R*(5*p),P+=be>>>13,be&=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]=be,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;ro(n)}update(e){um(this);let{buffer:t,blockLen:n}=this;e=gd(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(){ro(this.h,this.r,this.buffer,this.pad)}digestInto(e){um(this),w7(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 N_(r){let e=(n,o)=>r(o).update(gd(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var _7=N_(r=>new mm(r));function C7(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 B_(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 O_=pm(C7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),M_=pm(C7,{counterRight:!1,counterLength:8,extendNonceFn:B_,allowShortKeys:!1});var U_=new Uint8Array(16),T7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(U_.subarray(t))},F_=new Uint8Array(32);function k7(r,e,t,n,o){let s=r(e,t,F_),i=_7.create(s);o&&T7(i,o),T7(i,n);let a=new Uint8Array(16),c=b7(a);fm(c,0,BigInt(o?o.length:0),!0),fm(c,8,BigInt(n.length),!0),i.update(a);let l=i.digest();return ro(s,a),l}var P7=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=k7(r,e,t,i.subarray(0,-16),n);return i.set(l,a),ro(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=k7(r,e,t,l,n);if(!E7(d,u))throw new Error("invalid tag");return r(e,t,l,i,1),ro(u),i}}),gm=dm({blockSize:64,nonceLength:12,tagLength:16},P7(O_)),kY=dm({blockSize:64,nonceLength:24,tagLength:16},P7(M_));function D7(r,e,t){return Jo(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Ao(r,qr(t),qr(e))}var ym=new Uint8Array([0]),R7=new Uint8Array;function L7(r,e,t,n=32){if(Jo(r),fo(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=R7);let s=new Uint8Array(o*r.outputLen),i=Ao.create(r,e),a=i._cloneInto(),c=new Uint8Array(i.outputLen);for(let l=0;l<o;l++)ym[0]=l+1,a.update(l===0?R7:c).update(t).update(ym).digestInto(c),s.set(c,r.outputLen*l),i._cloneInto(a);return i.destroy(),a.destroy(),c.fill(0),ym.fill(0),s.slice(0,n)}var wm={hashSHA256(r){return Ir(r.subarray())},getHKDF(r,e){let t=D7(Ir,e,r),o=L7(Ir,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=va.utils.randomPrivateKey();return{publicKey:va.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:va.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return va.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return gm(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return gm(n,e,t).decrypt(r.subarray(),o)}};var N7=wm;function B7(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 Pi=r=>{let e=We(2);return e[0]=r>>8,e[1]=r,e};Pi.bytes=2;var vc=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)};vc.bytes=2;function O7(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 bm(r,e){!e.enabled||!Ci||(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 xm(r,e){!e.enabled||!Ci||(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 M7(r,e){!e.enabled||!Ci||e(r?`REMOTE_STATIC_PUBLIC_KEY ${F(r.subarray(),"hex")}`:"Missing remote static public key.")}function Em(r,e){!e.enabled||!Ci||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${F(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function vm(r,e,t){!t.enabled||!Ci||(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 Ri=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var $_=0,V_=4294967295,K_="Cipherstate has reached maximum n, a new handshake must be performed",bd=class{n;bytes;view;constructor(e=$_){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>V_)throw new Error(K_)}};var Es=ie(0),Di=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new bd(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}},Sm=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=O(t,"utf-8");this.h=H_(e,n),this.ck=this.h,this.cs=new Di(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Di(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,Es);return[new Di(this.crypto,e),new Di(this.crypto,t)]}},Am=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 Sm(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()}},Sc=class extends Am{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 Ri(`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 Ri(`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 Ri(`handshake stage 2 validation fail: ${t.message}`)}}};function H_(r,e){if(e.length<=32){let t=ie(32);return t.set(e),t}else return r.hash(e)}var xd;(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())})(xd||(xd={}));var Ac;(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),xd.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=xd.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())})(Ac||(Ac={}));async function Im(r,e,t){let n=await r.sign(U7(e));return Ac.encode({identityKey:Lt(r.publicKey),identitySig:n,extensions:t})}async function _m(r,e,t){try{let n=Ac.decode(r),o=tt(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=U7(e);if(!await o.verify(s,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new el(n.message)}}function U7(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 F7(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await Im(s,a.publicKey,l),u=new Sc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});bm(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(Es),e),t.trace("Stage 0 - Initiator finished sending first message."),xm(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."),Em(u.re,t),M7(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await _m(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 vm(p,m,t),{payload:h,encrypt:g=>p.encryptWithAd(Es,g),decrypt:(g,y)=>m.decryptWithAd(Es,g,y)}}async function $7(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await Im(s,a.publicKey,l),u=new Sc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});bm(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."),Em(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."),xm(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 _m(f,u.rs,c),[p,m]=u.ss.split();return vm(p,m,t),{payload:h,encrypt:g=>m.encryptWithAd(Es,g),decrypt:(g,y)=>p.decryptWithAd(Es,g,y)}}var K7=16;function H7(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(Pi(i.byteLength),i)}}}function q7(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-K7<o)throw new Error("Invalid chunk");let i=n.sublist(o,s),a=n.subarray(o,s-K7);try{let c=r.decrypt(i,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var Ed=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??N7;this.crypto=B7(c),this.extensions=o,this.metrics=a?O7(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=In(e,{lengthEncoder:Pi,lengthDecoder:vc,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=tt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:xn(i)}}async secureInbound(e,t){let n=In(e,{lengthEncoder:Pi,lengthDecoder:vc,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=tt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:xn(i)}}async performHandshakeInitiator(e,t,n,o){let s;try{s=await F7({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 $7({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]=y7(),s=e.unwrap();return await Ze(n,H7(t,this.metrics),s,i=>Qt(i,{lengthDecoder:vc}),q7(t,this.metrics),n),o}};function Li(r={}){return e=>new Ed(e,r)}function vd(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"}},Ni=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Bi=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},Sd=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},Ad=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},Id=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},_d=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Oi=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var W7=new Set([sn.name,Ni.name,Bi.name,Ad.name,Id.name,_d.name,Oi.name]),_c=256*1024,z7=16*1024*1024;var G7={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:_c,maxStreamWindowSize:z7,maxMessageSize:64*1024};function Y7(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<_c)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 je;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(je||(je={}));var qe;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(qe||(qe={}));var iX=Object.values(qe).filter(r=>typeof r!="string"),Q7=0,Lr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Lr||(Lr={}));var No=12;var X7=2**24;function q_(r){if(r[0]!==Q7)throw new sn("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*X7+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*X7+(r[9]<<16)+(r[10]<<8)+r[11]}}var Td=class{source;buffer;frameInProgress;constructor(e){this.source=W_(e),this.buffer=new ce,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===je.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new Sd("decoding frame already in progress");if(this.buffer.length<No)return;let e=q_(this.buffer.subarray(0,No));return this.buffer.consume(No),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 W_(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 Tm(r){let e=new Uint8Array(No);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 j7(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function kd(r,e){let t=vd(r).return?.();j7(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var z_=5e3;function km(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var _n=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=ee(),this.closed=ee(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??z_,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=Pt({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 Go(`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);km(o)&&await o}let n=()=>{kd(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);km(s)&&(this.sendingData=ee(),await s,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.log.trace("closing gracefully"),this.status="closing",await ke(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully")}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await ke(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await ke(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await ke(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();km(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 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 Cd=class extends _n{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=_c,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=ms(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-No,e.length),o=this.getSendFlags();this.sendFrame({type:je.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:je.WindowUpdate,flag:qe.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|qe.FIN;this.sendFrame({type:je.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new mt("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 Oi("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:je.WindowUpdate,flag:e,streamID:this._id,length:o})}};var Z7="/yamux/1.0.0",G_=500,Pd=class{protocol=Z7;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Se]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new Cm(this._components,{...this._init,...e})}},Cm=class{protocol=Z7;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={...G7,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),Y7(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=Pt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=vd(n);if(a.return!=null){let c=a.return();Y_(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},s,i;try{let a=new Td(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=Lr.NormalTermination}catch(a){W7.has(a.name)?(this.log?.error("protocol error in sink",a),s=Lr.ProtocolError):(this.log?.error("internal error in sink",a),s=Lr.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 fn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new fn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new ao("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 fn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new fn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,s)=>{let i=()=>{s(new fn("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??Lr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(G_);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??Lr.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 Cd({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(s)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return s}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:s}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case je.Ping:{this.handlePing(e);return}case je.GoAway:{this.handleGoAway(s);return}default:throw new sn("Invalid frame type")}else switch(e.type){case je.Data:case je.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 Ni("ping not requested");if(this.activePing.id!==e)throw new Bi("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Lr[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:s}=e;(o&qe.SYN)===qe.SYN&&this.incomingStream(n);let i=this._streams.get(n);if(i===void 0){if(s===je.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(s){case je.WindowUpdate:{i.handleWindowUpdate(e);return}case je.Data:{if(t===void 0)throw new Error("unreachable");await i.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new 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:je.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:je.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,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===je.Data){if(t===void 0)throw new sn("Invalid frame");this.source.push(new ce(Tm(e),t))}else this.source.push(Tm(e))}sendPing(e,t=qe.SYN){t===qe.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:je.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Lr.NormalTermination){this.log?.("sending GoAway reason=%s",Lr[e]),this.localGoAway=e,this.sendFrame({type:je.GoAway,flag:0,streamID:0,length:e})}};function Y_(r){return r!=null&&typeof r.then=="function"}function J7(r={}){return e=>new Pd(e,r)}var Rd=globalThis.CustomEvent??Event;async function*xr(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,s=[],i=ee(),a=ee(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(s.length===t&&(i=ee(),await i.promise),d)break;let m={done:!1};s.push(m),p().then(g=>{m.done=!0,m.ok=!0,m.value=g,o.dispatchEvent(new Rd("task-complete"))},g=>{m.done=!0,m.err=g,o.dispatchEvent(new Rd("task-complete"))})}c=!0,o.dispatchEvent(new Rd("task-complete"))}catch(p){l=p,o.dispatchEvent(new Rd("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=ee(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&s.length===0)break}}var e9="libp2p",t9="autonat",r9="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)=>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)})(ye||(ye={}));var Pm=4,Dd=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??e9}/${t9}/${r9}`,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 mt)};t.addEventListener("abort",n,{once:!0}),V(1/0,t);try{let o=this;await Ze(e.stream,s=>Qt(s),async function*(s){let i=await bc(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=>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: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=Ce(a.id);i=yt(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=!(Ot(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(te("p2p").code).bytes}}}catch(h){this.log("could not dial %p",i,h),l=h.message}finally{f!=null&&await f.close()}}return{type: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!(Ot(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 mt)},n.addEventListener("abort",d,{once:!0});let h=await Ze([s],m=>Yt(m),f,m=>Qt(m),async m=>bc(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 xr(Xt(this.components.randomWalk.walk({signal:n}),d=>async()=>c(d)),{concurrency:Pm}))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===Pm){this.log("%a is externally dialable",d),e.confirmObservedAddr(d);return}if(i[u].failure===Pm){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 n9(r={}){return e=>new Dd(e,r)}var eT=W("dns4"),tT=W("dns6"),rT=W("dnsaddr"),Oo=nt(W("dns"),rT,eT,tT),Ld=nt(W("ip4"),W("ip6")),Mi=nt(se(Ld,W("tcp")),se(Oo,W("tcp"))),Nd=se(Ld,W("udp")),nT=se(Nd,W("utp")),oT=se(Nd,W("quic")),sT=se(Nd,W("quic-v1")),Rm=nt(se(Mi,W("ws")),se(Oo,W("ws"))),Ui=nt(se(Rm,W("p2p")),Rm),Dm=nt(se(Mi,W("wss")),se(Oo,W("wss")),se(Mi,W("tls"),W("ws")),se(Oo,W("tls"),W("ws"))),vs=nt(se(Dm,W("p2p")),Dm),Lm=nt(se(Mi,W("http")),se(Ld,W("http")),se(Oo,W("http"))),Nm=nt(se(Mi,W("https")),se(Ld,W("https")),se(Oo,W("https"))),o9=se(Nd,W("webrtc-direct"),W("certhash")),a9=nt(se(o9,W("p2p")),o9),s9=se(sT,W("webtransport"),W("certhash"),W("certhash")),c9=nt(se(s9,W("p2p")),s9),l9=nt(se(Ui,W("p2p-webrtc-star"),W("p2p")),se(vs,W("p2p-webrtc-star"),W("p2p")),se(Ui,W("p2p-webrtc-star")),se(vs,W("p2p-webrtc-star"))),hj=nt(se(Ui,W("p2p-websocket-star"),W("p2p")),se(vs,W("p2p-websocket-star"),W("p2p")),se(Ui,W("p2p-websocket-star")),se(vs,W("p2p-websocket-star"))),u9=nt(se(Lm,W("p2p-webrtc-direct"),W("p2p")),se(Nm,W("p2p-webrtc-direct"),W("p2p")),se(Lm,W("p2p-webrtc-direct")),se(Nm,W("p2p-webrtc-direct"))),Ss=nt(Rm,Dm,Lm,Nm,l9,u9,Mi,nT,oT,Oo,a9,c9),pj=nt(se(Ss,W("p2p-stardust"),W("p2p")),se(Ss,W("p2p-stardust"))),Bo=nt(se(Ss,W("p2p")),l9,u9,a9,c9,W("p2p")),i9=nt(se(Bo,W("p2p-circuit"),Bo),se(Bo,W("p2p-circuit")),se(W("p2p-circuit"),Bo),se(Ss,W("p2p-circuit")),se(W("p2p-circuit"),Ss),W("p2p-circuit")),d9=()=>nt(se(i9,d9),i9),an=d9(),f9=nt(se(an,Bo,an),se(Bo,an),se(an,Bo),an,Bo);var mj=nt(se(an,W("webrtc"),W("p2p")),se(an,W("webrtc")),se(Ss,W("webrtc"),W("p2p")),se(Ss,W("webrtc")),W("webrtc"));function h9(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:h9(e),partialMatch:e}}function nt(...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:h9(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 iT="bootstrap",aT=50,cT=1e3,Bm=class extends xe{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??cT,this.list=[];for(let n of t.list){if(!f9.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}[zo]=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??iT]:{value:this._init.tagValue??aT,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 m9(r){return e=>new Bm(e,r)}var Tc;(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)})(Tc||(Tc={}));var Bd=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Er=class r{static createFromProtobuf=async e=>{let t=Tc.decode(e),n=tt(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=g9(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 Bd("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=Tc.encode({publicKey:Lt(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return J(this.marshal(),e.marshal())}async validate(e){let t=g9(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},g9=(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 y9(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 w9="libp2p-peer-record",b9=Uint8Array.from([3,1]);var kc;(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)})(kc||(kc={}));var qt=class r{static createFromProtobuf=e=>{let t=kc.decode(e),n=yt(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=w9;static CODEC=b9;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=kc.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||!y9(this.multiaddrs,e.multiaddrs))}};function ot(r,e){let t=In(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 x9="circuit-relay-relay";var Yj=BigInt(131072),As="/libp2p/circuit/relay/0.2.0/hop",Om="/libp2p/circuit/relay/0.2.0/stop",Qj=30*1e3,Xj=30*1e3,Mm=300,E9=4096,v9=.001;var Mo;(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),Fi.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),Od.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),$i.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),At.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=Fi.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=Od.codec().decode(o,o.uint32(),{limits:i.limits?.reservation});break}case 4:{a.limit=$i.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 5:{a.status=At.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)})(Mo||(Mo={}));var Tn;(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),Fi.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),$i.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),At.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=Fi.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.limit=$i.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 4:{a.status=At.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)})(Tn||(Tn={}));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.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)})(Fi||(Fi={}));var Od;(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)})(Od||(Od={}));var $i;(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)})($i||($i={}));var At;(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"})(At||(At={}));var Um;(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"})(Um||(Um={}));(function(r){r.codec=()=>Ke(Um)})(At||(At={}));var S9;(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)})(S9||(S9={}));function Fm(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Cc=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 $m(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(Ze(p,m=>ms(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 Md=class extends xe{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(As,{filter:this.filter,onConnect:e=>{this.log("discovered relay %p",e),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,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(As)],orders:[()=>Math.random()<.5?1:-1]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=new Ut({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=he([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 Vm=class extends xe{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 it,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 A9(r){return new Vm(r)}var fT=60*1e3*10,hT=60*1e3*5,pT=30*1e3,Ud=class extends xe{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 it,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e3,this.started=!1,this.relayFilter=f2(100),this.reserveQueue=new Ut({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(Fm(o.reservation.expire)>fT){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=Fm(a.expire),l=Math.min(Math.max(c-hT,pT),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:{[x9]:{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(As,t),s=ot(n).pb(Mo);await s.write({type:Mo.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===At.OK&&i.reservation!=null){let c=!1,l=e.remoteAddr.bytes;for(let d of i.reservation.addrs)if(J(l,d)){c=!0;break}return c||i.reservation.addrs.push(l),i.reservation}let a=`reservation failed with status ${i.status??"undefined"}`;throw this.log.error(a),new Error(a)}#t(e){let t=this.reservations.get(e);t!=null&&(this.log("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};var gT=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(X)}catch{return!1}return!0},Km={maxInboundStopStreams:Mm,maxOutboundStopStreams:Mm,stopTimeout:3e4},Fd=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??Km.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??Km.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??Km.stopTimeout;let n=t.discoverRelays??0;n>0&&(this.discovery=new Md(e,{filter:t.discoveryFilter??g2(E9,v9)}),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 Ud(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"]:[]}[dn]=!0;isStarted(){return this.started}async start(){await this.registrar.handle(Om,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 bt(this.discovery,this.reservationStore),this.started=!0}async stop(){await Ct(this.discovery,this.reservationStore),await this.registrar.unhandle(Om),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 Rn(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 Rn(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(As),await this.connectV2({stream:h,connection:f,destinationPeer:l,destinationAddr:s,relayAddr:o,ma:e,disconnectOnFailure:d,onProgress:t.onProgress})}catch(p){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,p),h?.abort(p),d&&await f.close(),p}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:o,relayAddr:s,ma:i,disconnectOnFailure:a,onProgress:c}){try{let l=ot(e),d=l.pb(Mo);c?.(new H("circuit-relay:write-connect-message")),await d.write({type:Mo.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!==At.OK)throw new de(`failed to connect via relay with status ${u?.status?.toString()??"undefined"}`);let f=new Cc(u.limit),h=$m({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 A9({connectionManager:this.connectionManager,relayStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>an.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=ot(t).pb(Tn),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:Tn.Type.STATUS,status:At.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(s.type!==Tn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:Tn.Type.STATUS,status:At.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!gT(s)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:Tn.Type.STATUS,status:At.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let i=yt(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:Tn.Type.STATUS,status:At.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:Tn.Type.STATUS,status:At.OK},{signal:n});let a=new Cc(s.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),l=this.addressManager.getAddresses()[0],d=$m({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 Hm(r={}){return e=>new Fd(e,r)}var I9=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},yT=new WeakMap;function wT({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(I9());let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(I9())},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}),yT.set(u,()=>{c(s),s=null,i()}),u}}var bT=wT(),$d=bT;var cn;(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)})(cn||(cn={}));function qm(r,e){return Sn.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:K1.matches(r)?!0:Fg.matches(r)?Ot(r.toOptions().host)===!1:!1}var _9=1024*4,T9=100,Vd={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Kd=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??Vd.timeout,this.retries=t.retries??Vd.retries,this.maxInboundStreams=t.maxInboundStreams??Vd.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Vd.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[$r]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Pc,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{Sn.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Pc,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(Pc),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([Pc],{signal:o.signal,runOnLimitedConnection:!0});let s=ot(t,{maxDataLength:_9}).pb(cn);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:cn.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!==cn.Type.CONNECT)throw this.log("A sent wrong message type"),new de("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 de("DCUtR connect message had no multiaddrs");let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:cn.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:T9});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=>qm(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(Sn.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=ot(e,{maxDataLength:_9}).pb(cn);this.log("A receiving connect");let s=await o.read(n);if(s.type!==cn.Type.CONNECT)throw this.log("B sent wrong message type"),new de("DCUtR message type was incorrect");if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new de("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 de("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:cn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==cn.Type.SYNC)throw new de("DCUtR message type was incorrect");this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:T9,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(!qm(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Pc="/libp2p/dcutr";function k9(r={}){return e=>new Kd(e,r)}var C9="0.1.0",P9="id",R9="id/push",D9="1.0.0",L9="1.0.0";var Uo;(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)})(Uo||(Uo={}));var O9=kt(B9(),1),Wm=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,Hd=(0,O9.default)(),qd=Wm&&!Hd,M9=Hd&&!Wm,U9=Hd&&Wm,F9=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!Hd,Wd=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,mJ=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",$9=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 V9(r){if(r!=null&&r.length>0)try{return X(r)}catch{}}function ST(r,e){return e!=null||(e=`${r.name}/${r.version}`,F9||M9?e+=` UserAgent=${globalThis.process.version}`:(qd||Wd||U9||$9)&&(e+=` UserAgent=${globalThis.navigator.userAgent}`)),e}async function zd(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new de("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=tt(o.publicKey);if(!xn(c).equals(n.remotePeer))throw new de("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 Er.openAndCertify(c,qt.DOMAIN),d=qt.createFromProtobuf(l.payload),u=En(l.publicKey.toCID());if(!d.peerId.equals(u))throw new de("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(d.peerId))throw new de("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 Er.createFromProtobuf(f.peerRecordEnvelope),p=qt.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 Vi=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}/${C9}`,agentVersion:ST(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 Gd=class extends Vi{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??cr.protocolPrefix}/${R9}/${L9}`,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(te("p2p").code)),t=new qt({peerId:this.peerId,multiaddrs:e}),n=await Er.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 ot(f,{maxDataLength:c.maxMessageSize}).pb(Uo).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(xr(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 ot(n,{maxDataLength:this.maxMessageSize}).pb(Uo).read(o);await n.close(o),await zd(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 Yd=class extends Vi{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??cr.protocolPrefix}/${P9}/${D9}`,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!==Pn.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 ot(n,{maxDataLength:this.maxMessageSize}).pb(Uo).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 de("public key was missing from identify message");let a=tt(o),c=En(a.toCID());if(!e.remotePeer.equals(c))throw new de("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new de("identified peer is our own peer id?");let l=V9(i);return this.log("identify completed for peer %p and protocols %o",c,s),l!=null&&(this.log("our observed address was %a",l),Ot(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))),zd(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(te("p2p").code)),a=s.peerRecordEnvelope;if(i.length>0&&a==null){let d=new qt({peerId:this.peerId,multiaddrs:i});a=(await Er.seal(d,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;Ug.matches(t.remoteAddr)||(c=void 0),await ot(n).pb(Uo).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Lt(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 K9(r={}){return e=>new Yd(e,r)}function H9(r={}){return e=>new Gd(e,r)}var q9="/ipfs/kad/1.0.0",W9="/dht/record",zm="/dht/provider";var Rc;(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)})(Rc||(Rc={}));function z9(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 G9(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 It=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 Rc.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:z9(this.timeReceived)}}static deserialize(e){let t=Rc.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=G9(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 Fo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Qd=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},Xd=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},jd=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Y9;(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)})(Y9||(Y9={}));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 Zd;(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"})(Zd||(Zd={}));(function(r){r.codec=()=>Ke(Zd)})(we||(we={}));var Hi;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Hi||(Hi={}));var Gm;(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"})(Gm||(Gm={}));(function(r){r.codec=()=>Ke(Gm)})(Hi||(Hi={}));var Ki;(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),Hi.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=Hi.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)})(Ki||(Ki={}));var no;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&Zd[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),Ki.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Ki.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(Ki.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(Ki.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)})(no||(no={}));function Ym(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 Dc(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 vr(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function Qm(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function Lc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function Xm(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function Q9(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 jd(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:s(e,t)}function IT(r,e){return 0}var X9={pk:IT};async function qi(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 _T=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=tt(e),o=r.slice(4);if(!J(o,n.toMultihash().bytes))throw new C("public key does not match passed in key")},j9={pk:_T};var TT=O("/pk/");function Z9(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=Ot(n);return o==null?!0:!o})}}async function $o(r){return(await dt.digest(r)).digest}async function lr(r){return $o(r.toMultihash().bytes)}function Vo(r){return new De(`${W9}/${F(r,"base32")}`,!1)}function J9(r){return Pe([TT,r.toMultihash().bytes])}function ey(r){return F(r.subarray(0,4))==="/pk/"}function ty(r){let e=Ce(r.subarray(4));return yt(e)}function jm(r,e){let t=new Date;return new It(r,e,t).serialize()}var kT=290,CT=54,PT=55,RT=56,DT=4,LT=41;function ry(r){let e=r.stringTuples();for(let t of e)if(t[0]===kT)return!1;if(e[0][0]===CT||e[0][0]===PT||e[0][0]===RT)return!0;if(e[0][0]===DT||e[0][0]===LT){let t=Ot(`${e[0][1]}`);return t==null||!t}return!1}var ef=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=Vo(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=It.deserialize(n);return await qi(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let s=jm(e,n);for(let{value:i,from:a}of t){if(J(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=Vo(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&&J(d.record.value,It.deserialize(s).value)&&(c=!0),yield d;c||(yield vr({from:a,error:new Fo("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=jm(e,t),s=Vo(e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray()),yield*Ze(this.peerRouting.getClosestPeers(e,{signal:n.signal}),i=>Xt(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&&J(d.record.value,It.deserialize(o).value)||c.push(vr({from:a.peer.id,error:new Fo("Value not put correctly")},n)));return c}),i=>xr(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=Q9(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 Lc({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 Lc({from:s,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function oy(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Nc(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Ce(r.id);return{id:yt(e),multiaddrs:(r.multiaddrs??[]).map(t=>X(t))}}var tf=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:[oy({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(vr({from:c.peer.id,error:d},n))}return l};yield*Ze(this.peerRouting.getClosestPeers(o,n),c=>Xt(c,l=>a(l)),c=>xr(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 Dc({from:this.components.peerId,messageType:we.GET_PROVIDERS,providers:d},t),yield Qm({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 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 Qm({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var Wi=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 NT=1.2,BT=2,OT=2e3,oo=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Wi(e.interval??5e3),this.failure=new Wi(e.interval??5e3),this.next=new Wi(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??BT,this.timeoutMultiplier=e.timeoutMultiplier??NT,this.minTimeout=e.minTimeout??OT,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=he([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 rf=class extends xe{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 oo({...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 Xm({peer:e},n),yield Ym({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 Dc({from:e,messageType:c.type,closer:c.closer.map(Nc),providers:c.providers.map(Nc),record:c.record==null?void 0:It.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 vr({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 Xm({peer:e},n),yield Ym({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 Dc({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.abort(a),yield vr({from:e,error:a},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){await ot(e).write(t,no,n)}async _writeReadMessage(e,t,n){let o=ot(e);await o.write(t,no,n);let s=await o.read(no,n);return s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:Nc(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:Nc(i)})}),s}};function zi(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 Ko=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 lr(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)=>zi(o.distance,s.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await lr(e),n=on(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return zi(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var nf=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=J9(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let s=tt(o.record.value),i=xn(s);if(!i.equals(e))throw new Cn("public key does not match id");if(i.publicKey==null)throw new Cn("public key missing");yield Lc({from:e,value:o.record.value},t)}throw new Fo(`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: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 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 vr({from:this.peerId,error:new Be("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await $o(e),o=this.routingTable.closestPeers(n),s=this,i=new Ko(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: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 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 vr({from:o.from,error:new Fo(i)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new Xd("invalid record received");await qi(this.validators,new It(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await $o(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 sy=kt(_2(),1);var of=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,sy.default)(n??256),this.syncQueue=new Cr({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:zm});for await(let a of i)try{let{cid:c,peerId:l}=iy(a.key),d=ay(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=Bc(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=Bc(e),n=this.cache.get(t);return n==null&&(n=await VT(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=Bc(e);this.cache.set(s,n),await $T(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 Bc(r){let e=typeof r=="string"?r:F(r.multihash.bytes,"base32");return`${zm}/${e}`}async function $T(r,e,t,n){let o=[Bc(e),"/",t.toString()].join(""),s=new De(o),i=Ve(n.getTime());await r.put(s,i)}function iy(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 VT(r,e){let t=new Map,n=r.query({prefix:Bc(e)});for await(let o of n){let{peerId:s}=iy(o.key);t.set(s,ay(o.value))}return t}function ay(r){return new Date(Ft(r))}async function*cy(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 fr({concurrency:i,sort:(g,y)=>zi(g.options.distance,y.options.distance)}),p=await $o(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=he(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 lr(k.id),S=on(v,p);if(zi(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 vr({from:g,error:T},r)}finally{x.clear()}},{distance:b}).catch(w=>{d.error(w)})}m(t,await lr(t));try{for await(let g of h.toGenerator({signal:o}))g!=null&&(yield g)}catch(g){throw o.aborted?new Qd("Query aborted"):g}}var sf=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=he([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 $o(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)=>cy({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 $t(...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 KT(r){return r[Symbol.asyncIterator]!=null}function HT(r){if(KT(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 af=HT;var qT=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 WT(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}=qT(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 Oc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=WT(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var cf=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;started;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){let{peerRouting:n,logPrefix:o,count:s,interval:i,queryTimeout:a,routingTable:c}=t;this.peerId=e.peerId,this.log=e.logger.forComponent(`${o}:query-self`),this.started=!1,this.peerRouting=n,this.routingTable=c,this.count=s??20,this.interval=i??3e5,this.initialInterval=t.initialInterval??1e3,this.queryTimeout=a??5e3,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun}isStarted(){return this.started}start(){this.started||(this.started=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.started=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.started){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=ee(),this.started){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);V(1/0,n),e.push(n)}let t=he(e);V(1/0,t,this.controller.signal);try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await Oc(this.routingTable,"peer:add",{signal:t,filter:s=>!this.peerId.equals(s.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Ze(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),s=>co(s,this.count),async s=>af(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))}};var zT=20,GT=5e3,YT="kad-close",QT=50,lf=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??GT,this.peerSetSize=t.peerSetSize??zT,this.closeTagName=t.closeTagName??YT,this.closeTagValue=t.closeTagValue??QT,this.closestPeers=new rr,this.onPeerPing=this.onPeerPing.bind(this)}async start(){let e=await lr(this.components.peerId);this.newPeers=new Ko(e,this.peerSetSize),this.routingTable.addEventListener("peer:ping",this.onPeerPing),this.timeout=setInterval(()=>{this.updatePeerTags().catch(t=>{this.log.error("error updating peer tags - %e",t)})},this.refreshInterval)}stop(){this.routingTable.removeEventListener("peer:ping",this.onPeerPing),clearTimeout(this.timeout)}onPeerPing(e){this.newPeers?.add({id:e.detail,multiaddrs:[]}).catch(t=>{this.log.error("error adding peer to distance list - %e",t)})}async updatePeerTags(){let e=new rr(this.newPeers?.peers.map(o=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[Bs]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[Bs]:void 0}})})])}};function Mc(r){return Array.isArray(r?.peers)}var uf=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??uy,this.kBucketSize=e.kBucketSize??Jm,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??dy,this.lastPingThreshold=e.lastPingThreshold??fy,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new it,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await lr(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await lr(e),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let s=this._add(n,t);this.addingPeerMap.set(e,s),await s}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!jT(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(i=>!(i.peerId.equals(this.localPeer?.peerId)||i.lastPing>Date.now()-this.lastPingThreshold)).sort((i,a)=>i.lastPing<a.lastPing?-1:i.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),s=!1;for await(let i of this.ping(o,t))s=!0,await this.remove(i.kadId);s&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new Ko(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(Mc(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]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(Mc(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 t=F(e,"base2");function n(o,s=0){return Mc(o)?o:t[s]==="0"?n(o.left,s+1):n(o.right,s+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>J(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)F(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));XT(e,t,n)}};function XT(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function jT(r,e){return r.lastPing<Date.now()-e}var Jm=20,uy=8;var ZT=20,JT=100,dy=3;var ek=20,tk=100,hy="kad-peer",rk=1,fy=6e5,nk=!0,ok=1e3,df=class extends xe{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??Jm,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??hy,this.peerTagValue=t.peerTagValue??rk,this.pingOldContacts=this.pingOldContacts.bind(this),this.verifyNewContact=this.verifyNewContact.bind(this),this.peerAdded=this.peerAdded.bind(this),this.peerRemoved=this.peerRemoved.bind(this),this.populateFromDatastoreOnStart=t.populateFromDatastoreOnStart??nk,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??ok,this.pingOldContactQueue=new Ut({concurrency:t.pingOldContactConcurrency??ek,metricName:`${t.logPrefix.replaceAll(":","_")}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??tk}),this.pingOldContactTimeout=new oo({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.logPrefix.replaceAll(":","_")}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new Ut({concurrency:t.pingNewContactConcurrency??ZT,metricName:`${t.logPrefix.replaceAll(":","_")}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??JT}),this.pingNewContactTimeout=new oo({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.logPrefix.replaceAll(":","_")}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new uf({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new lf(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),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`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_max_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,await bt(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId)}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(hy)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await Ct(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let s=this.pingOldContactQueue.find(o.peerId);if(s!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await s.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=he([c,a?.signal]);V(1/0,c,l);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of xr(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=he([n,t?.signal]);V(1/0,n,o);try{let s=this.pingNewContactQueue.find(e.peerId);return s!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await s.join({signal:o})):await this.pingNewContactQueue.add(async i=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,i)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{this.log("pinging contact %p",e.peerId);for await(let o of this.network.sendRequest(e.peerId,{type:we.PING},t))if(o.type===ff.PEER_RESPONSE)return o.messageType===we.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await lr(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,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await lr(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,s=0;function i(a){if(Mc(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>s&&(s=a.peers.length);return}i(a.left),i(a.right)}i(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(s),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var py=[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 hf=15,pf=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 af(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>hf&&(e=hf);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");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=pt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),s=Ce(o);return yt(s)}async _makePeerId(e,t,n){if(n>hf)throw new Error(`Cannot generate peer ID for common prefix length greater than ${hf}`);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=py[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,dt.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?.localPeer!=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 mf=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 de("Missing key");let n;try{n=Z.decode(t.key)}catch{throw new de("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,yt(s))}))}};var gf=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 de("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);J(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(te("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 yf=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 de("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=Z.decode(t.key)}catch{throw new de("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 wf=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 de("Invalid key");let o={type:we.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(ey(n)){this.log("is public key");let a=ty(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=Lt(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new It(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=Vo(e),n;try{n=await this.datastore.get(t)}catch(s){if(s.name==="NotFoundError")return;throw s}let o=It.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>1296e5){await this.datastore.delete(t);return}return o}};var bf=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 xf=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 de(o)}try{let o=It.deserialize(t.record);await qi(this.validators,o),o.timeReceived=new Date;let s=Vo(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 Ef=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={[we.GET_VALUE.toString()]:new wf(e,{peerRouting:o,logPrefix:i}),[we.PUT_VALUE.toString()]:new xf(e,{validators:s,logPrefix:i}),[we.FIND_NODE.toString()]:new gf(e,{peerRouting:o,logPrefix:i,peerInfoMapper:a}),[we.ADD_PROVIDER.toString()]:new mf(e,{providers:n,logPrefix:i}),[we.GET_PROVIDERS.toString()]:new yf(e,{peerRouting:o,providers:n,logPrefix:i,peerInfoMapper:a}),[we.PING.toString()]:new bf(e,{logPrefix:i})}}async handleMessage(e,t){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){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,s=o.remotePeer;try{await this.routingTable.add(s)}catch(a){this.log.error(a)}let i=this;await Ze(n,a=>Qt(a),async function*(a){for await(let c of a){let l=no.decode(c);t=l.type,i.log("incoming %s from %p",l.type,s);let d=await i.handleMessage(s,l);d!=null&&(yield no.encode(d))}},a=>Yt(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var vf=class extends xe{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 e3=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")}},t3=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)}},sk=32,ik=64,Sf=class extends xe{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,maxInboundStreams:d,maxOutboundStreams:u,providers:f}=t,h=l??"libp2p:kad-dht";this.running=!1,this.components=e,this.log=e.logger.forComponent(h),this.protocol=c??q9,this.kBucketSize=n??20,this.clientMode=o??!0,this.maxInboundStreams=d??sk,this.maxOutboundStreams=u??ik,this.peerInfoMapper=t.peerInfoMapper??Z9,this.providers=new of(e,f??{}),this.validators={...j9,...s},this.selectors={...X9,...i},this.network=new rf(e,{protocol:this.protocol,logPrefix:h}),this.routingTable=new df(e,{kBucketSize:n,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:h,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let p=ee();t.allowQueryWithZeroPeers===!0&&p.resolve(),this.queryManager=new sf(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:h,initialQuerySelfHasRun:p,routingTable:this.routingTable}),this.peerRouting=new nf(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:h}),this.contentFetching=new ef(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:h}),this.contentRouting=new tf(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:h}),this.routingTableRefresh=new pf(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:h}),this.rpc=new Ef(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:h,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new vf(e,{protocol:this.protocol,logPrefix:h}),this.querySelf=new cf(e,{peerRouting:this.peerRouting,interval:a,initialInterval:t.initialQuerySelfInterval,logPrefix:h,initialQuerySelfHasRun:p,routingTable:this.routingTable}),this.network.addEventListener("peer",m=>{let g=m.detail;this.onPeerConnect(g).catch(y=>{this.log.error("could not add %p to routing table",g.id,y)}),this.dispatchEvent(new CustomEvent("peer",{detail:g}))}),this.topologyListener.addEventListener("peer",m=>{let g=m.detail;Promise.resolve().then(async()=>{let y=await this.components.peerStore.get(g),b={id:g,multiaddrs:y.addresses.map(({multiaddr:w})=>w),protocols:y.protocols};await this.onPeerConnect(b)}).catch(y=>{this.log.error("could not add %p to routing table",g,y)})}),this.dhtPeerRouting=new t3(this),this.dhtContentRouting=new e3(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",m=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let g=m.detail.peer.addresses.some(({multiaddr:b})=>ry(b)),y=this.getMode();g&&y==="client"?await this.setMode("server"):y==="server"&&!g&&await this.setMode("client")}).catch(g=>{this.log.error("error setting dht server mode",g)})})}[Symbol.toStringTag]="@libp2p/kad-dht";[Se]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[$r]=["@libp2p/identify"];get[ln](){return this.dhtContentRouting}get[un](){return this.dhtPeerRouting}get[zo](){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}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),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 bt(this.routingTable,this.providers,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh),await bt(this.querySelf)}async stop(){this.running=!1,await Ct(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 ff;(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"})(ff||(ff={}));function my(r={}){return e=>new Sf(e,r)}var Ay=kt(Sy(),1),Qi=Ay.default;var My=kt(Ly(),1);var Xi={};Qe(Xi,{create:()=>Ak,derivedEmptyPasswordKey:()=>_f});var _f={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Ak(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",_f,{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",_f,{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",_f,{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 n3(r,e){let n=await Xi.create().encrypt(r,e);return st.encode(n)}async function o3(r,e,t){if(r.type==="RSA")return Tk(r,e,t);if(r.type==="Ed25519")return Ik(r,e,t);if(r.type==="secp256k1")return _k(r,e,t);throw new Fr}async function Ik(r,e,t="libp2p-key"){if(t==="libp2p-key")return n3(ci(r),e);throw new C(`export format '${t}' is not supported`)}async function _k(r,e,t="libp2p-key"){if(t==="libp2p-key")return n3(ci(r),e);throw new C("Export format is not supported")}async function Tk(r,e,t="pkcs-8"){if(t==="pkcs-8")return kk(r,e);if(t==="libp2p-key")return n3(ci(r),e);throw new C("Export format is not supported")}async function kk(r,e){let t=tr.get(),o=new ht({value:[new et({value:0}),new ht({value:[new Tr({value:"1.2.840.113549.1.1.1"}),new Vn]}),new Kn({valueHex:r.raw})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=pt(16),a=await Uu(go,e,i,{c:1e4,dkLen:32}),c=pt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,s),u=new ht({value:[new Kn({valueHex:i}),new et({value:1e4}),new et({value:32}),new ht({value:[new Tr({value:"1.2.840.113549.2.11"}),new Vn]})]}),f=new ht({value:[new Tr({value:"1.2.840.113549.1.5.13"}),new ht({value:[new ht({value:[new Tr({value:"1.2.840.113549.1.5.12"}),u]}),new ht({value:[new Tr({value:"2.16.840.1.101.3.4.1.42"}),new Kn({valueHex:c})]})]})]}),p=new ht({value:[f,new Kn({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 s3(r,e){try{let t=await Ck(r,e);return m8(t)}catch{}if(!r.includes("BEGIN"))throw new C("Encrypted key was not a libp2p-key or a PEM file");return Pk(r,e)}async function Ck(r,e){let t=st.decode(r);return Xi.create().decrypt(t,e)}async function Pk(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}=cs(s),{iv:a,salt:c,iterations:l,keySize:d,cipherText:u}=Rk(i),f=await Uu(go,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}=cs(p);n=Oy(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}=cs(s);n=Oy(i)}else throw new C("Could not parse private key from PEM data");let o=g8(n);if(o.type!=="RSA")throw new C("Could not parse RSA private key from PEM data");return o}function Rk(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 Oy(r){return Uc(r.valueBlock.value[2].getValue())}function Uc(r){return new Uint8Array(r,0,r.byteLength)}var Dk="/pkcs8/",a3="/info/",Fc=new WeakMap,Is={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},i3={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function ji(r){return r==null||typeof r!="string"?!1:r===(0,My.default)(r.trim())&&r.length>0}async function _t(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function _s(r){return new De(Dk+r)}function Zi(r){return new De(a3+r)}async function Lk(r){let e=ci(r),t=await dt.digest(e);return Ee.encode(t.bytes).substring(1)}var Tf=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=Qi(i3,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<Is.minKeyLength)throw new Error(`dek.keyLength must be least ${Is.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Is.minSaltLength)throw new Error(`dek.saltLength must be least ${Is.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Is.minIterationCount)throw new Error(`dek.iterationCount must be least ${Is.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Wa(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({},i3),t=Math.ceil(Is.minSaltLength/3)*3;return e.dek.salt=F(pt(t),"base64"),e}static get options(){return i3}async findKeyByName(e){if(!ji(e))throw await _t(),new C(`Invalid key name '${e}'`);let t=Zi(e);try{let n=await this.components.datastore.get(t);return JSON.parse(F(n))}catch(n){throw await _t(),this.log.error(n),new Be(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:a3};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 _t(),t}}async importKey(e,t){if(!ji(e))throw await _t(),new C(`Invalid key name '${e}'`);if(t==null)throw await _t(),new C("Key is required");let n=_s(e);if(await this.components.datastore.has(n))throw await _t(),new C(`Key '${e}' already exists`);let s,i;try{s=await Lk(t);let l=Fc.get(this);if(l==null)throw new C("dek missing");let d=l.dek;i=await o3(t,d,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await _t(),l}let a={name:e,id:s},c=this.components.datastore.batch();return c.put(n,O(i)),c.put(Zi(e),O(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!ji(e))throw await _t(),new C(`Invalid key name '${e}'`);let t=_s(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 s3(o,i)}catch(n){throw await _t(),n}}async removeKey(e){if(!ji(e)||e==="self")throw await _t(),new C(`Invalid key name '${e}'`);let t=_s(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Zi(e)),await o.commit(),n}async listKeys(){let e={prefix:a3},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(!ji(e)||e==="self")throw await _t(),new C(`Invalid old key name '${e}'`);if(!ji(t)||t==="self")throw await _t(),new C(`Invalid new key name '${t}'`);let n=_s(e),o=_s(t),s=Zi(e),i=Zi(t);if(await this.components.datastore.has(o))throw await _t(),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 _t(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await _t(),new C(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await _t(),new C(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await _t(),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?Wa(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(_s(a.name)),l=F(c),d=await s3(l,o),u=s.toString(),f=await o3(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(_s(a.name),O(f)),h.put(Zi(a.name),O(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function kf(r={}){return e=>new Tf(e,r)}var Ji=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 c3}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 ul("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)}},c3=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 $c=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),l3=Object.freeze({NEW_STREAM:ge.NEW_STREAM,MESSAGE:ge.MESSAGE_INITIATOR,CLOSE:ge.CLOSE_INITIATOR,RESET:ge.RESET_INITIATOR}),Uy=Object.freeze({MESSAGE:ge.MESSAGE_RECEIVER,CLOSE:ge.CLOSE_RECEIVER,RESET:ge.RESET_RECEIVER});var u3=1<<20,Nk=4<<20,Cf=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=u3,t=Nk){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 de("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}=$y(e),{value:o,offset:s}=$y(e,n),i=t&7;if($c[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw new de("Message size too large");return{id:t>>3,type:i,offset:n+s,length:o}}},Bk=128,Fy=127;function $y(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&Fy)<<n:(s&Fy)*Math.pow(2,n),n+=7}while(s>=Bk);return e=o-e,{value:t,offset:e}}var d3=10*1024,f3=class{_pool;_poolOffset;constructor(){this._pool=We(d3),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ve(e.id<<3|e.type,n,o),o+=pe(e.id<<3|e.type),(e.type===ge.NEW_STREAM||e.type===ge.MESSAGE_INITIATOR||e.type===ge.MESSAGE_RECEIVER)&&e.data!=null?(Ve(e.data.length,n,o),o+=pe(e.data.length)):(Ve(0,n,o),o+=pe(0));let s=n.subarray(this._poolOffset,o);d3-o<100?(this._pool=We(d3),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)}},Ok=new f3;async function*Vy(r){for await(let e of r){let t=new ce;Ok.write(e,t),yield t}}var Pf=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var h3=class extends _n{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?l3:Uy,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:l3.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 Ky(r){let{id:e,name:t,send:n,onEnd:o,type:s="initiator",maxMsgSize:i=u3}=r;return new h3({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 Mk=1024,Uk=1024,Fk=1024*1024*4,$k=5,Vk=500;function Hy(r){let e={...r,type:`${$c[r.type]} (${r.type})`};return r.type===ge.NEW_STREAM&&(e.data=F(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===ge.MESSAGE_INITIATOR||r.type===ge.MESSAGE_RECEIVER)&&(e.data=F(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var Rf=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??Vk,this.sink=this._createSink(),this._source=Pt({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=Ze(this._source,n=>Vy(n)),this.closeController=new AbortController,this.rateLimiter=new Ji({points:t.disconnectThreshold??$k,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 fn("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??Uk))throw new ao("Too many outbound streams open");if(s.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=Ky({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,Hy(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=()=>{kd(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new Cf(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",Hy(e)),e.type===ge.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??Mk)){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: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??Fk;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 Pf("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 p3=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 Rf(this.components,{...e,...this._init})}};function qy(r={}){return e=>new p3(e,r)}var Wy="1.0.0",zy="ping",Gy="ipfs";var Df=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??Gy}/${zy}/${Wy}`,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=xs(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=pt(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=xs(i),[,c]=await Promise.all([a.write(o,t),a.read(32,t)]),l=Date.now()-n;if(!J(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 Yy(r={}){return e=>new Df(e,r)}var Qy=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))},Wk=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var zk=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var Gk=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 Yk=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var Qk=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var Xk=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,jk=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,Xy=3,Zk=[["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",Xk]],jy=[["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 Jy(r){return r?Zy(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new Qk:typeof navigator<"u"?Zy(navigator.userAgent):tC()}function Jk(r){return r!==""&&Zk.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 Zy(r){var e=Jk(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new Yk;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<Xy&&(o=Qy(Qy([],o,!0),rC(Xy-o.length),!0)):o=[];var s=o.join("."),i=eC(r),a=jk.exec(r);return a&&a[1]?new Gk(t,s,i,a[1]):new Wk(t,s,i)}function eC(r){for(var e=0,t=jy.length;e<t;e++){var n=jy[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function tC(){var r=typeof process<"u"&&process.version;return r?new zk(process.version.slice(1)):null}function rC(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var ew=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"];var tw=Jy(),Vc=tw!=null&&tw.name==="firefox",Lf=async function*(){},Nf=async r=>{},nC=30*1e3;function rw(r,e,t=nC,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=ee(),s=!1;r.bufferedAmountLowThreshold=0;let i=()=>{s||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",i,{once:!0}),r.addEventListener("bufferedamountlow",()=>{s=!0,r.removeEventListener("close",i),o.resolve()}),await 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??ew.map(e=>({urls:[e]})),r}var Ts=class{log;peerConnection;remoteAddr;timeline;metrics;source=Lf();sink=Nf;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 Wt;(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)})(Wt||(Wt={}));var oC=2*1024*1024,sC=30*1e3,Bf=16*1024;function iC(r=Bf){let e=pe(r-pe(r)),t=1+pe(Object.keys(Wt.Flag).length-1),n=1,o=r-e-t-n,s=pe(o);return e+t+n+s}var aC=iC(),cC=5e3,lC=5e3,g3=class extends _n{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=Pt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??sC,this.maxBufferedAmount=e.maxBufferedAmount??oC,this.maxMessageSize=(e.maxMessageSize??Bf)-aC,this.receiveFinAck=ee(),this.finAckTimeout=e.closeTimeout??cC,this.openTimeout=e.openTimeout??lC,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 Go("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 Oc(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 Go(`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 Oc(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=Wt.encode({message:n}),s=Yt.single(o);await this._sendMessage(s),e.consume(t)}}async sendReset(){await this._sendFlag(Wt.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag(Wt.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(Wt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Wt.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===Wt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Wt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Wt.Flag.RESET&&this.reset(),t.flag===Wt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Wt.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=Wt.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 ea(r){let{channel:e,direction:t}=r;return new g3({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var nw="/webrtc",Ho=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??nw,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=ea({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 y3(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},y3=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??nw,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=ea({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),rw(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=Lf();sink=Nf;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=ea({channel:e,direction:"outbound",onEnd:()=>{this.log("outgoing channel %s ended with state %s",e.id,e.readyState),this.#e(t,e)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(t),this.metrics?.increment({outgoing_stream:!0}),t}};var ks=globalThis.RTCPeerConnection,Of=globalThis.RTCSessionDescription,ow=globalThis.RTCIceCandidate;var qo=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Br=class extends qo{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var Hc=class extends qo{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`),this.name="WebRTC/DataChannelError"}},Mf=class extends qo{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`),this.name="WebRTC/InappropriateMultiaddrError"}};var qc=class extends qo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var Uf=class extends qo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},Ff=class extends qo{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 ur;(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)})(ur||(ur={}));var $f=async(r,e,t)=>{try{let n=ee();for(uC(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!==ur.Type.ICE_CANDIDATE)throw new de("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 ow(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&&Vf(r)!=="connected")throw n}};function Vf(r){return Vc?r.iceConnectionState:r.connectionState}function uC(r,e){r[Vc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(Vf(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new Ms("RTCPeerConnection was closed"));break;default:break}}}async function sw({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:s,transportManager:i,log:a,logger:c,onProgress:l}){let{baseAddr:d}=iw(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=ot(m).pb(ur),y=new ks(r),b=new Ho({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:ur.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:ur.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!==ur.Type.SDP_ANSWER)throw new Br("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",T.data);let k=new Of({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 $f(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 Hf=class extends xe{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=>an.matches(t)).map(t=>t.encapsulate(`/webrtc/p2p/${this.peerId}`))).flat()}async close(){this.shutdownController.abort(),this.safeDispatchEvent("close",{})}};async function aw({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let s=ot(e).pb(ur);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),s.write({type:ur.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!==ur.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 Of({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:ur.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 $f(r,s,{direction:"recipient",signal:t,log:o})}catch(a){if(Vf(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 dC="/webrtc",fC="/p2p-circuit",Kf="/webrtc-signaling/0.0.1",hC=30*1e3,qf=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"})})}[dn]=!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(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 Hf(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(pc.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 sw({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 Ts(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??hC),o=new ks(await Kc(this.init.rtcConfiguration)),s=new Ho(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i}=await aw({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new Ts(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 iw(r){let e=r.toString().split(dC+"/");if(e.length!==2)throw new C("webrtc protocol was not present in multiaddr");if(!e[0].includes(fC))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 w3=Object.values(Ln).map(r=>r.decoder).reduce((r,e)=>r.or(e));function cw(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:mC(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 pC=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function mC(r){return r.match(pC)?.groups?.fingerprint}function gC(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function Wf(r){let t=r.stringTuples().filter(n=>n[0]===dw).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 b3(r){return ze.decode(w3.decode(r))}function yC(r){let e=b3(Wf(r)),t=x3(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 x3(r){switch(r){case 17:return"SHA-1";case 18:return"SHA-256";case 19:return"SHA-512";default:throw new Ff(r)}}function wC(r,e){let{host:t,port:n}=r.toOptions(),o=gC(r),[s]=yC(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:${
|
|
32
|
+
a=max-message-size:${Bf}
|
|
33
33
|
a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host\r
|
|
34
|
-
`}function
|
|
34
|
+
`}function lw(r,e){return{type:"answer",sdp:wC(r,e)}}function uw(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 iw=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),aw=r=>[...Array(r)].map(()=>iw.at(Math.floor(Math.random()*iw.length))).join("");var sC=1e4,Kie=ee("webrtc-direct").code,sw=ee("certhash").code,Vf=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 Df("WebRTCTransport.createListener")}listenFilter(e){return e.filter(Bg.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 Lf("we need to have the remote's PeerId");let i=Re(s),a=um($f(e)),c=await Is.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:dm(a.code)}),l=new Is({...await Mc(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 Uc("data",N))},sC);_.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 Uc("data",B))}}),u="libp2p+webrtc+v1/"+aw(32),f=await l.createOffer(),h=ow(f,u);await l.setLocalDescription(h);let p=nw(e,u);await l.setRemoteDescription(p);let m=await d,g=this.generateNoisePrologue(l,a.code,e),y=_i({prologueBytes:g})(this.components),b=Qi({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 As(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),k=Oc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(k,()=>{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 T=new $o(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=rw(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=lm.decode($f(n)),l=O("libp2p-webrtc-noise:");return Pe([l,a.bytes,c])}};function cw(r){return e=>new Vf(e,r)}function lw(r){return e=>new Ff(e,r)}var uw=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 dw=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await uw(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 mw=kt(hw(),1);function pw(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var gw=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 mw.EventIterator(({push:i,stop:a,fail:c})=>{let l=u=>{let f=null;typeof u.data=="string"&&(f=O(u.data)),pw(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 pw(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 yw=(r,e)=>{e=e??{};let t=gw(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:dw(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 ww=WebSocket;var aC={"http:":"ws:","https:":"wss:"},bw="ws:",xw=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??bw}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??bw,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(aC))t.protocol===n&&(t.protocol=o);return t};function Ew(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=xw(r,t),o=new ww(n.toString(),e.websocket);return yw(o,e)}function vw(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Ri.matches(t)||bs.matches(t)})}function Sw(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return bs.matches(t)})}function Aw(){throw new Error("WebSocket Servers can not be created in the browser!")}function Iw(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 ht("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 pm=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=Iw(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=Ew(F1(e),this.init);s.socket.addEventListener("error",()=>{let i=new Rs(`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 Aw({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):$d||Vd?Sw(e):vw(e)}dialFilter(e){return this.listenFilter(e)}};function _w(r={}){return e=>new pm(e,r)}function mm(r){throw new Error("Not implemented")}var gm=class extends kn{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 ym(r,e,t,n,o,s){let i=s.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=new gm({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 qf(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function kw(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 ym(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 ym(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)}},...qf()};return c}}}function Tw(r,e){return e.filter(n=>!!r.find(o=>te(n,o))).length===e.length}var dC=Object.values(Dn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function fC(r){return ze.decode(dC.decode(r))}function wm(r){if(!U1.matches(r))throw new no("Invalid multiaddr, was not a WebTransport address");let e=r.stringTuples(),t=e.filter(([i,a])=>i===ee("certhash").code).map(([i,a])=>fC(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 Cw=globalThis.WebTransport;var bm=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}=wm(e),i,a,c=()=>{},l=!1,d=!1,u=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let f=new Cw(`${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 Jc("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"),...qf()},await t.upgrader.upgradeOutbound(a,{skipEncryption:!0,muxerFactory:kw(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=_i()(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}`)}),!Tw(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 mm(this.components,{...e,certificates:this.config.certificates,maxInboundStreams:this.config.maxInboundStreams})}listenFilter(){return[]}dialFilter(e){return globalThis.WebTransport==null?[]:e.filter(t=>{if(!U1.exactMatch(t))return!1;let{url:n,certhashes:o}=wm(t);return n!=null&&o.length>0})}};function Pw(r={}){return e=>new bm(e,r)}var xm=kt(z1(),1);function Rw(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===or.ValidityType.EOL&&o.record.validityType===or.ValidityType.EOL){let a=xm.default.fromString(n.record.validity).toDate(),c=xm.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 Wf="2.0.2",zf="libp2p";var Dw="4.2.6-5ff6998",Nw="helia";var Bw={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 Gf(r={}){let e=`${Nw}/${Dw} ${zf}/${Wf} UserAgent=${globalThis.navigator.userAgent}`;return{privateKey:r.privateKey,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[O3({discoverRelays:1}),lw(),cw(),Pw(),_w()],connectionEncrypters:[_i()],streamMuxers:[G7(),My()],peerDiscovery:[l9(Bw)],services:{autoNAT:j7(),dcutr:v9(),delegatedRouting:()=>Zg("https://delegated-ipfs.dev"),dht:cy({clientMode:!0,validators:{ipns:J1},selectors:{ipns:Rw}}),identify:O9({agentVersion:e}),identifyPush:M9({agentVersion:e}),keychain:vf(r.keychain),ping:Ky()}}}function Em(r){try{let{address:e}=r.nodeAddress();return!!rr(e)}catch{return!0}}function hC(r,e){let t=Em(r.multiaddr),n=Em(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function pC(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function mC(r,e){let t=An.exactMatch(r.multiaddr),n=An.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Xi(r,e){let t=hC(r,e);if(t!==0)return t;let n=mC(r,e);return n!==0?n:pC(r,e)}var gC=32,{code:yC}=ee("dnsaddr"),vm=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},_s=async function(e,t={}){let n=t.maxRecursiveDepth??gC;if(n===0)throw new vm("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===yC)??[],i=await(t?.dns??Xu()).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 wC={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:_s},addressSorter:Xi},transportManager:{faultTolerance:ro.FATAL_ALL}};async function Ow(r){let e=qi(wC,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 ji;(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),Qf.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=Qf.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),Yf.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(Yf.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 ha('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 ha('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)})(ji||(ji={}));var Yf;(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)})(Yf||(Yf={}));var Qf;(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)})(Qf||(Qf={}));function Zi(r,e){let t=ji.decode(e);if(t.publicKey!=null&&r.publicKey==null){let s=et(t.publicKey);r=xn(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 Sm="/peers/";function Ji(r){if(!jc(r)||r.type==null)throw new C("Invalid PeerId");let e=r.toCID().toString();return new Le(`${Sm}${e}`)}async function Mw(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)),!Po(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=Xf(f,{validate:Uw})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Xf(f,{validate:Fw,map:$w})}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=Xf([...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=Xf([...h.entries()],{validate:Fw,map:$w})}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 Mw(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 Xf(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 Fw(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 $w(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 Zf(r,e,t){let n=r.toString().split("/")[2],o=Z.parse(n,at),s=En(o),i=t.get(s);if(i!=null)return i;let a=Zi(s,e);return t.set(s,a),a}function bC(r,e){return r==null?{}:{prefix:Sm,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(Zf(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(Zf(n.key,n.value,e),Zf(o.key,o.value,e)))}}var Jf=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=sc({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(Ji(e))}async delete(e){if(this.peerId.equals(e))throw new C("Cannot delete self peer");await this.datastore.delete(Ji(e))}async load(e){let t=await this.datastore.get(Ji(e));return Zi(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 gt;for await(let{key:n,value:o}of this.datastore.query(bC(e??{},t))){let s=Zf(n,o,t);s.id.equals(this.peerId)||(yield s)}}async#e(e){try{let t=await this.datastore.get(Ji(e)),n=Zi(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.name!=="NotFoundError")throw t}return{}}async#t(e,t,n,o){let s=ji.encode(t);return n!=null&&te(s,n)?{peer:Zi(e,s),previous:o,updated:!1}:(await this.datastore.put(Ji(e),s),{peer:Zi(e,s),previous:o,updated:!0})}};var eh=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 Jf(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 mc(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=En(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 Vw(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var xC=r=>r;function Am(r,e){let t=r.getPeerId();return t!=null&&Re(t).equals(e)&&(r=r.decapsulate(X(`/p2p/${e.toString()}`))),r}var th=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??xC,this._updatePeerStoreAddresses=Vw(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=Am(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=Am(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=Am(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 Kw;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Kw||(Kw={}));var rh=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},nh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},Vc=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},Kc=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},oh=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},sh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},ih=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},Hc=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"}},qc=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},ah=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Ts=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Wc=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},ch=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var Im=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=Ao())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>al(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")}},vC=["metrics","connectionProtector","dns"],SC=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function Hw(r={}){let e=new Im(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!SC.includes(o)){let i=e.components[o];if(i==null&&!vC.includes(o))throw new rh(`${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 qw(r){let e={};for(let t of Object.values(r.components))for(let n of AC(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of IC(t))if(e[n]!==!0)throw new nh(`Service "${_C(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function AC(r){return Array.isArray(r?.[Se])?r[Se]:[]}function IC(r){return Array.isArray(r?.[$r])?r[$r]:[]}function _C(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function Ww(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!rr(`${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 lh(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(!Po(n))throw new no("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 zw(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 Gw="last-dial-failure",Yw="last-dial-success";var uh=100,dh=50;var Qw={maxConnections:uh,allow:[]},fh=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??Qw.maxConnections,this.allow=t.allow??Qw.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 gt;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 zw(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 hh=class extends ur{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};async function Xw(r,e){let t=!1;for(let o of wi.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 zc={addressSorter:Xi,maxParallelDials:dh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:_s}},ph=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter??zc.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??zc.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??zc.maxDialQueueLength,this.dialTimeout=t.dialTimeout??zc.dialTimeout,this.connections=t.connections??new gt,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??{}))wi.set(n,o);this.queue=new hh({concurrency:t.maxParallelDials??zc.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}=lh(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 Rn("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 Rn("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:{[Yw]: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:{[Gw]: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 cr(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??Cm,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 Rn("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new Hc("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 Xw(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=l.sort(this.addressSorter);if(d.length===0)throw new Hc("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 nb=kt(tb(),1);var CC=Object.prototype.toString,PC=r=>CC.call(r)==="[object Error]",RC=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 Pm(r){return r&&PC(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:RC.has(r.message):!1}var Rm=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}},rb=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function Lm(r,e){return new Promise((t,n)=>{e={onFailedAttempt(){},retries:10,shouldRetry:()=>!0,...e};let o=nb.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 Rm)throw c.originalError;if(c instanceof TypeError&&!Pm(c))throw c;if(rb(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){rb(l,a,e),i(),n(l)}}})})}var mh=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(_h)||this.queue.has(e)||this.queue.add(async n=>{await Lm(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(_h)]});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 Cm=50,Dm={maxConnections:uh,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},gh=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;constructor(e,t={}){if(this.maxConnections=t.maxConnections??Dm.maxConnections,this.maxConnections<1)throw new C("Connection Manager maxConnections must be greater than 0");this.connections=new gt,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??Dm.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new Yi({points:t.inboundConnectionThreshold??Dm.inboundConnectionThreshold,duration:1}),this.connectionPruner=new fh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new ph(e,{addressSorter:t.addressSorter??Xi,maxParallelDials:t.maxParallelDials??dh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:_s},connections:this.connections}),this.reconnectQueue=new mh({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 Ur("Not started");t.signal?.throwIfAborted();let{peerId:n}=lh(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??Cm}),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 NC=1e4,BC="1.0.0",OC="ping",MC="ipfs",ob=32,UC=!0,yh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??MC}/${OC}/${BC}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??NC,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??UC,this.timeout=new Fi({...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=ad(o);t=Date.now(),await Promise.all([s.write(dt(ob),{signal:n}),s.read(ob,{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 wh=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 Vc("No content routers available");let n=this,o=new tr;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 Vc("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 bh=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 Kc("No peer routers available");if(e.toString()===this.peerId.toString())throw new oh("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 Kc("No peer routers available");let n=this,o=za(1024);for await(let s of an(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 xh=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=J(),yield(await lr(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=dt(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 Nm=32,Bm=64,Eh=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 sh(`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 ih(`Handler already registered for protocol ${e}`);let o=qi.bind({ignoreUndefined:!0})({maxInboundStreams:Nm,maxOutboundStreams:Bm},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 vh=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=I1({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ro.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new 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 ch(`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!==ro.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===ro.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 FC=O(`
|
|
39
|
-
`);async function
|
|
38
|
+
`),r}var fw=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),hw=r=>[...Array(r)].map(()=>fw.at(Math.floor(Math.random()*fw.length))).join("");var xC=1e4,hae=te("webrtc-direct").code,dw=te("certhash").code,zf=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"})})}[dn]=!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 Uf("WebRTCTransport.createListener")}listenFilter(e){return e.filter(hc.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 Mf("we need to have the remote's PeerId");let i=Re(s),a=b3(Wf(e)),c=await ks.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:x3(a.code)}),l=new ks({...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))},xC);_.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/"+hw(32),f=await l.createOffer(),h=uw(f,u);await l.setLocalDescription(h);let p=lw(e,u);await l.setRemoteDescription(p);let m=await d,g=this.generateNoisePrologue(l,a.code,e),y=Li({prologueBytes:g})(this.components),b=ea({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 Ts(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 Ho(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=cw(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=w3.decode(Wf(n)),l=O("libp2p-webrtc-noise:");return Pe([l,a.bytes,c])}};function pw(r){return e=>new zf(e,r)}function mw(r){return e=>new qf(e,r)}var gw=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 yw=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await gw(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 Ew=kt(bw(),1);function xw(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var vw=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 Ew.EventIterator(({push:i,stop:a,fail:c})=>{let l=u=>{let f=null;typeof u.data=="string"&&(f=O(u.data)),xw(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 xw(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 Sw=(r,e)=>{e=e??{};let t=vw(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:yw(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 Aw=WebSocket;var vC={"http:":"ws:","https:":"wss:"},Iw="ws:",_w=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Iw}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Iw,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(vC))t.protocol===n&&(t.protocol=o);return t};function Tw(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=_w(r,t),o=new Aw(n.toString(),e.websocket);return Sw(o,e)}function kw(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Ui.matches(t)||vs.matches(t)})}function Cw(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return vs.matches(t)})}function Pw(){throw new Error("WebSocket Servers can not be created in the browser!")}function Rw(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 mt("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 S3=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"})})}[dn]=!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=Rw(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let s=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),s}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=ee(),s=Tw(q1(e),this.init);s.socket.addEventListener("error",()=>{let i=new Ms(`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 Pw({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):qd||Wd?Cw(e):kw(e)}dialFilter(e){return this.listenFilter(e)}};function Dw(r={}){return e=>new S3(e,r)}function A3(r){throw new Error("Not implemented")}var I3=class extends _n{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 _3(r,e,t,n,o,s){let i=s.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=new I3({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 Qf(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function Lw(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 _3(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 _3(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)}},...Qf()};return c}}}function Nw(r,e){return e.filter(n=>!!r.find(o=>J(n,o))).length===e.length}var _C=Object.values(Ln).map(r=>r.decoder).reduce((r,e)=>r.or(e));function TC(r){return ze.decode(_C.decode(r))}function T3(r){if(!ys.matches(r))throw new hn("Invalid multiaddr, was not a WebTransport address");let e=r.stringTuples(),t=e.filter(([i,a])=>i===te("certhash").code).map(([i,a])=>TC(a??"")),n=e.filter(([i,a])=>i===te("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 Bw=globalThis.WebTransport;var k3=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";[dn]=!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}=T3(e),i,a,c=()=>{},l=!1,d=!1,u=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let f=new Bw(`${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"),...Qf()},await t.upgrader.upgradeOutbound(a,{skipEncryption:!0,muxerFactory:Lw(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=Li()(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}`)}),!Nw(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 A3(this.components,{...e,certificates:this.config.certificates,maxInboundStreams:this.config.maxInboundStreams})}listenFilter(){return[]}dialFilter(e){return globalThis.WebTransport==null?[]:e.filter(t=>{if(!ys.exactMatch(t))return!1;let{url:n,certhashes:o}=T3(t);return n!=null&&o.length>0})}};function Ow(r={}){return e=>new k3(e,r)}var C3=kt(j1(),1);function Mw(r,e){let t=e.map((n,o)=>({record:An(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=C3.default.fromString(n.record.validity).toDate(),c=C3.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 Xf="2.1.6",jf="libp2p";var Fw="4.2.6-60d8c8a",$w="helia";var Vw={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 Zf(r={}){let e=`${$w}/${Fw} ${jf}/${Xf} UserAgent=${globalThis.navigator.userAgent}`;return{privateKey:r.privateKey,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[Hm({discoverRelays:1}),mw(),pw(),Ow(),Dw()],connectionEncrypters:[Li()],streamMuxers:[J7(),qy()],peerDiscovery:[m9(Vw)],services:{autoNAT:n9(),dcutr:k9(),delegatedRouting:()=>o7("https://delegated-ipfs.dev"),dht:my({clientMode:!0,validators:{ipns:od},selectors:{ipns:Mw}}),identify:K9({agentVersion:e}),identifyPush:H9({agentVersion:e}),keychain:kf(r.keychain),ping:Yy()}}}var kC=32,{code:CC}=te("dnsaddr"),P3=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},Cs=async function(e,t={}){let n=t.maxRecursiveDepth??kC;if(n===0)throw new P3("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===CC)??[],i=await(t?.dns??Ju()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[mr.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 PC={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Cs}},transportManager:{faultTolerance:so.FATAL_ALL}};async function Kw(r){let e=Qi(PC,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 ta;(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),eh.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=eh.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),Jf.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(Jf.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 ga('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 ga('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)})(ta||(ta={}));var Jf;(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)})(Jf||(Jf={}));var eh;(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)})(eh||(eh={}));function ra(r,e){let t=ta.decode(e);if(t.publicKey!=null&&r.publicKey==null){let s=tt(t.publicKey);r=xn(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 R3="/peers/";function na(r){if(!Jc(r)||r.type==null)throw new C("Invalid PeerId");let e=r.toCID().toString();return new De(`${R3}${e}`)}async function Hw(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)),!Do(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 rh(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=th(f,{validate:qw})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=th(f,{validate:Ww,map:zw})}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=th([...a.entries()],{validate:qw})}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=th([...h.entries()],{validate:Ww,map:zw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d;o?.id.publicKey!=null?d=Lt(o.id.publicKey):e.publicKey!=null?d=Lt(e.publicKey):r.publicKey!=null&&(d=Lt(r.publicKey));let u={addresses:await Hw(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 th(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 qw(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 Ww(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 zw(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 nh(r,e,t){let n=r.toString().split("/")[2],o=Z.parse(n,ut),s=En(o),i=t.get(s);if(i!=null)return i;let a=ra(s,e);return t.set(s,a),a}function RC(r,e){return r==null?{}:{prefix:R3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(nh(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(nh(n.key,n.value,e),nh(o.key,o.value,e)))}}var oh=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=cc({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(na(e))}async delete(e){if(this.peerId.equals(e))throw new C("Cannot delete self peer");await this.datastore.delete(na(e))}async load(e){let t=await this.datastore.get(na(e));return ra(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await rh(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 rh(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 rh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async*all(e){let t=new it;for await(let{key:n,value:o}of this.datastore.query(RC(e??{},t))){let s=nh(n,o,t);s.id.equals(this.peerId)||(yield s)}}async#e(e){try{let t=await this.datastore.get(na(e)),n=ra(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.name!=="NotFoundError")throw t}return{}}async#t(e,t,n,o){let s=ta.encode(t);return n!=null&&J(s,n)?{peer:ra(e,s),previous:o,updated:!1}:(await this.datastore.put(na(e),s),{peer:ra(e,s),previous:o,updated:!0})}};var D3=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 oh(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 Ec(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 Er.openAndCertify(e,qt.DOMAIN),o=En(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=qt.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 Er.createFromProtobuf(i.peerRecordEnvelope),c=qt.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 Gw(r,e={}){return new D3(r,e)}function Yw(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var DC=r=>r;function L3(r,e){let t=r.getPeerId();return t!=null&&Re(t).equals(e)&&(r=r.decapsulate(X(`/p2p/${e.toString()}`))),r}var sh=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??DC,this._updatePeerStoreAddresses=Yw(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=L3(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=L3(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=L3(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 Qw;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Qw||(Qw={}));var ih=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},ah=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"}},ch=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},lh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},uh=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"}},Ps=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},dh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},fh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Rs=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Ds=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},hh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var N3=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=_o())}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")}},NC=["metrics","connectionProtector","dns"],BC=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function Xw(r={}){let e=new N3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!BC.includes(o)){let i=e.components[o];if(i==null&&!NC.includes(o))throw new ih(`${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 jw(r){let e={};for(let t of Object.values(r.components))for(let n of OC(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of MC(t))if(e[n]!==!0)throw new ah(`Service "${UC(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function OC(r){return Array.isArray(r?.[Se])?r[Se]:[]}function MC(r){return Array.isArray(r?.[$r])?r[$r]:[]}function UC(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function Zw(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!Ot(`${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 ph(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(!Do(n))throw new hn("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 FC=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function Jw(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??FC;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var eb="last-dial-failure",tb="last-dial-success";var mh=100,gh=50;var rb={maxConnections:mh,allow:[]},yh=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??rb.maxConnections,this.allow=t.allow??rb.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 it;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 Jw(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 wh=class extends fr{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function B3(r){try{let{address:e}=r.nodeAddress();return!!Ot(e)}catch{return!0}}function $C(r,e){let t=$p.exactMatch(r.multiaddr),n=$p.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Hp.exactMatch(r.multiaddr),s=Hp.exactMatch(e.multiaddr);if(o&&!s)return-1;if(!o&&s)return 1;let i=Kp.exactMatch(r.multiaddr),a=Kp.exactMatch(e.multiaddr);if(i&&!a)return-1;if(!i&&a)return 1;let c=pc.exactMatch(r.multiaddr),l=pc.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let d=hc.exactMatch(r.multiaddr),u=hc.exactMatch(e.multiaddr);if(d&&!u)return-1;if(!d&&u)return 1;let f=ys.exactMatch(r.multiaddr),h=ys.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function VC(r,e){let t=B3(r.multiaddr),n=B3(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function KC(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function HC(r,e){let t=Sn.exactMatch(r.multiaddr),n=Sn.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function nb(r){return r.sort($C).sort(KC).sort(HC).sort(VC)}async function ob(r,e){let t=!1;for(let o of Ii.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 bh={maxParallelDials:gh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:Cs}},xh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??bh.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??bh.maxDialQueueLength,this.dialTimeout=t.dialTimeout??bh.dialTimeout,this.connections=t.connections??new it,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??{}))Ii.set(n,o);this.queue=new wh({concurrency:t.maxParallelDials??bh.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail.name!==mt.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}=ph(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 Rn("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 Rn("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:{[tb]: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:{[eb]: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??F3,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal,onProgress:t.onProgress})}createDialAbortController(e){let t=he([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 Rn("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 ob(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 Ps("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?nb(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=>!Sn.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var db=kt(lb(),1);var WC=Object.prototype.toString,zC=r=>WC.call(r)==="[object Error]",GC=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 $3(r){return r&&zC(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:GC.has(r.message):!1}var V3=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}},ub=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function K3(r,e){return new Promise((t,n)=>{e={onFailedAttempt(){},retries:10,shouldRetry:()=>!0,...e};let o=db.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 V3)throw c.originalError;if(c instanceof TypeError&&!$3(c))throw c;if(ub(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){ub(l,a,e),i(),n(l)}}})})}var Eh=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 Ut({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(Bs)||this.queue.has(e)||this.queue.add(async n=>{await K3(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(Bs)]});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 F3=50,H3={maxConnections:mh,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},vh=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??H3.maxConnections,this.maxConnections<1)throw new C("Connection Manager maxConnections must be greater than 0");this.connections=new it,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??H3.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new Ji({points:t.inboundConnectionThreshold??H3.inboundConnectionThreshold,duration:1}),this.connectionPruner=new yh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new xh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??gh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:Cs},connections:this.connections}),this.reconnectQueue=new Eh({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 bt(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 Ct(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}=ph(e);if(this.peerId.equals(n))throw new Us("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??F3});if(o.status!=="open")throw new Os("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 hn("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 XC=1e4,jC="1.0.0",ZC="ping",JC="ipfs",fb=32,eP=!0,Sh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??JC}/${ZC}/${jC}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??XC,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??eP,this.timeout=new oo({...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=xs(o);t=Date.now(),await Promise.all([s.write(pt(fb),{signal:n}),s.read(fb,{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 Ah=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 $t(...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 Ih=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 ch("Should not try to find self");let n=this,o=$t(...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=Qa(1024);for await(let s of xr(async function*(){let i=$t(...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 _h=class extends xe{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=he([this.shutdownController.signal,e?.signal]);V(1/0,t);try{for(;;)this.needNext?.resolve(),this.needNext=ee(),yield(await dr(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=he([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=pt(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 q3=32,W3=64,Th=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 lh(`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 uh(`Handler already registered for protocol ${e}`);let o=Qi.bind({ignoreUndefined:!0})({maxInboundStreams:q3,maxOutboundStreams:W3},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 kh=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=k1({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??so.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 hh(`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!==so.NO_FATAL)throw new Ps(`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===so.FATAL_ALL)throw new Ps(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 Tt="/multistream/1.0.0";var tP=O(`
|
|
39
|
+
`);async function Ns(r,e,t){await r.write(e,t)}async function hb(r,e,t){await r.writeV(e,t)}async function rP(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==tP[0])throw e.log.error("Invalid mss message - missing newline",t),new de("Missing newline");return t.sublist(0,-1)}async function Wo(r,e){let t=await rP(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 nP(r,e[0],t);let n=In(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"]',Tt,o);let s=O(`${Tt}
|
|
40
40
|
`),i=O(`${o}
|
|
41
|
-
`);await
|
|
42
|
-
`),t),t.log.trace("select: reading protocol response");let l=await
|
|
43
|
-
`;yield new ce(Uint8Array.from([19]),O(`${
|
|
44
|
-
`)
|
|
41
|
+
`);await hb(n,[s,i],t),t.log.trace("select: reading multistream-select header");let a=await Wo(n,t);if(t.log.trace('select: read "%s"',a),a===Tt&&(t.log.trace("select: reading protocol response"),a=await Wo(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 Ns(n,O(`${c}
|
|
42
|
+
`),t),t.log.trace("select: reading protocol response");let l=await Wo(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new Pn("protocol selection failed")}function nP(r,e,t){let n=r.sink.bind(r),o=r.source,s=!1,i=!1,a=ee(),c=!1,l=!1,d=ee(),u=!1,f=!1,h=ee(),p=In({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',Tt,e,T.byteLength);let k=`${e}
|
|
43
|
+
`;yield new ce(Uint8Array.from([19]),O(`${Tt}
|
|
44
|
+
`),Ve(k.length),O(k),T).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',Tt,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',Tt,e),await p.writeV([O(`${Tt}
|
|
45
45
|
`),O(`${e}
|
|
46
|
-
`)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',
|
|
47
|
-
`),t),t.log.trace('handle: responded with "%s" for "%s"',
|
|
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=>
|
|
46
|
+
`)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Tt,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 Wo(p,t);if(t.log.trace('optimistic: read multistream select header "%s"',b),b===Tt&&(b=await Wo(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',b,e),b!==e)throw new Pn("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=In(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Wo(n,t);if(t.log.trace('handle: read "%s"',o),o===Tt){t.log.trace('handle: respond with "%s" for "%s"',Tt,o),await Ns(n,O(`${Tt}
|
|
47
|
+
`),t),t.log.trace('handle: responded with "%s" for "%s"',Tt,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Ns(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
|
|
51
|
-
`),t),t.log('handle: responded with "na" for "%s"',o)}}var HC=500,Mm=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";[zm]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new el("the connection is being closed");if(this.status==="closed")throw new tl("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new Ls("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(HC);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 ab(r){return new Mm(r)}var qC=3e4;function WC(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return Nm}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??Bm}function cb(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var Sh=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 qc(`The multiaddr connection is blocked by gater.${n}`)}async upgradeInbound(e,t){if(!await this.components.connectionManager.acceptIncomingConnection(e))throw new ah("connection denied");let o,s,i,a,c,l=AbortSignal.timeout(this.inboundUpgradeTimeout),d=()=>{e.abort(new cr("inbound upgrade timeout"))};l.addEventListener("abort",d,{once:!0}),V(1/0,l);try{if(await this.components.connectionGater.denyInboundConnection?.(e)===!0)throw new qc("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 no("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 nl("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 Yc(p,m,{log:p.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",y);let b=WC(y,this.components.registrar);if(cb(y,"inbound",u)===b){let x=new il(`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 Ts("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(qC);V(1/0,k),m={...m,signal:k}}g.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:b}=await Gc(g,p,{...m,log:g.log,yieldBytes:!0});g.log("selected protocol %s",b);let w=zC(b,this.components.registrar,m),x=cb(b,"outbound",u);if(x>=w){let k=new so(`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 Ts("Connection is not multiplexed")};return u=ab({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 Ls("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 Yc(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 Wc(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 Gc(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 Wc(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 Gc(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 Ts(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 Yc(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 Ts(String(o))}}};var Ah=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??Ao(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=Hw({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:zf,version:Wf},logger:this.logger,events:t,datastore:e.datastore??new ys,connectionGater:Ww(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",new eh(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 Sh(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 vh(this.components,e.transportManager)),this.configureComponent("connectionManager",new gh(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new yh(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Eh(this.components)),this.configureComponent("addressManager",new th(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 bh(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 wh(this.components,{routers:i})),this.configureComponent("randomWalk",new xh(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[Ho]!=null&&(this.log("registering service %s for peer discovery",a),l[Ho].addEventListener?.("peer",d=>{this.#e(d)}))}qw(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 tr;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={}){Po(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=et(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 lb(r={}){r.privateKey??=await Lu("Ed25519");let e=new Ah({...await Ow(r),peerId:l8(r.privateKey)});return r.start!==!1&&await e.start(),e}async function ub(r){let e=r.libp2p?.privateKey,t=r.logger??Ao(),n=new Le("/pkcs8/self"),o;if(e==null&&r.datastore!=null)if(o=vf(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=Gf(r);return s.datastore=s.datastore??r.datastore,r=r??{},await lb({...s,...r.libp2p,start:!1})}async function GC(r={}){let e=r.datastore??new ys,t=r.blockstore??new pc,n;YC(r.libp2p)?n=r.libp2p:n=await ub({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new sd({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Up(),pp()],routers:[Xp(n),Yp()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function YC(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return Ab(QC);})();
|
|
50
|
+
`));t.log.trace('handle: respond with "%s" for %s',e,o),await Ns(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 Ns(n,O(`na
|
|
51
|
+
`),t),t.log('handle: responded with "na" for "%s"',o)}}var sP=500,G3=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";[r4]=!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 Os("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new Fs("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(sP);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 mb(r){return new G3(r)}function cP(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return q3}function lP(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??W3}function gb(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var Ch=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 dh(`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 fh("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=he([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 hn(`${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 Us("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=cP(b,this.components.registrar);if(gb(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 Rs("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=lP(b,this.components.registrar,m),x=gb(b,"outbound",u);if(x>=w){let T=new ao(`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 Rs("Connection is not multiplexed")};return u=mb({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 Fs("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 Ds(`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 Ds(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 Ds(`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 Ds(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 Rs(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 Rs(String(s))}}};var Ph=class extends xe{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new xe,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??_o(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=Xw({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:jf,version:Xf},logger:this.logger,events:t,datastore:e.datastore??new bs,connectionGater:Zw(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",Gw(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 Ch(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 kh(this.components,e.transportManager)),this.configureComponent("connectionManager",new vh(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new Sh(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Th(this.components)),this.configureComponent("addressManager",new sh(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 Ih(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 Ah(this.components,{routers:i})),this.configureComponent("randomWalk",new _h(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[ln]!=null&&(this.log("registering service %s for content routing",a),i.push(l[ln])),l[un]!=null&&(this.log("registering service %s for peer routing",a),s.push(l[un])),l[zo]!=null&&(this.log("registering service %s for peer discovery",a),l[zo].addEventListener?.("peer",d=>{this.#e(d)}))}jw(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={}){Do(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=tt(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 yb(r={}){r.privateKey??=await Bu("Ed25519");let e=new Ph({...await Kw(r),peerId:b8(r.privateKey)});return r.start!==!1&&await e.start(),e}async function wb(r){let e=r.libp2p?.privateKey,t=r.logger??_o(),n=new De("/pkcs8/self"),o;if(e==null&&r.datastore!=null)if(o=kf(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 Bu("Ed25519");r.libp2p.privateKey=a,await o.importKey("self",a)}let s=Zf(r);return s.datastore=s.datastore??r.datastore,r=r??{},await yb({...s,...r.libp2p,start:!1})}async function uP(r={}){let e=r.datastore??new bs,t=r.blockstore??new xc,n;dP(r.libp2p)?n=r.libp2p:n=await wb({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new ud({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Wp(),bp()],routers:[nm(n),tm()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function dP(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return Db(fP);})();
|
|
52
52
|
/*! Bundled license information:
|
|
53
53
|
|
|
54
54
|
pvtsutils/build/index.js:
|