helia 6.0.21 → 6.0.22-11802dd6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -1,68 +1,68 @@
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 iS=Object.create;var xu=Object.defineProperty;var aS=Object.getOwnPropertyDescriptor;var cS=Object.getOwnPropertyNames;var lS=Object.getPrototypeOf,uS=Object.prototype.hasOwnProperty;var an=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),et=(r,e)=>{for(var t in e)xu(r,t,{get:e[t],enumerable:!0})},A6=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of cS(e))!uS.call(r,o)&&o!==t&&xu(r,o,{get:()=>e[o],enumerable:!(n=aS(e,o))||n.enumerable});return r};var Ln=(r,e,t)=>(t=r!=null?iS(lS(r)):{},A6(e||!r||!r.__esModule?xu(t,"default",{value:r,enumerable:!0}):t,r)),dS=r=>A6(xu({},"__esModule",{value:!0}),r);var _6=an((ZN,q0)=>{"use strict";var fS=Object.prototype.hasOwnProperty,Ht="~";function Qa(){}Object.create&&(Qa.prototype=Object.create(null),new Qa().__proto__||(Ht=!1));function hS(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function T6(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new hS(t,n||r,o),i=Ht?Ht+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 Lu(r,e){--r._eventsCount===0?r._events=new Qa:delete r._events[e]}function Lt(){this._events=new Qa,this._eventsCount=0}Lt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)fS.call(t,n)&&e.push(Ht?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Lt.prototype.listeners=function(e){var t=Ht?Ht+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,s=n.length,i=new Array(s);o<s;o++)i[o]=n[o].fn;return i};Lt.prototype.listenerCount=function(e){var t=Ht?Ht+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Lt.prototype.emit=function(e,t,n,o,s,i){var a=Ht?Ht+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,s),!0;case 6:return c.fn.call(c.context,t,n,o,s,i),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,h;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(h=1,d=new Array(l-1);h<l;h++)d[h-1]=arguments[h];c[u].fn.apply(c[u].context,d)}}return!0};Lt.prototype.on=function(e,t,n){return T6(this,e,t,n,!1)};Lt.prototype.once=function(e,t,n){return T6(this,e,t,n,!0)};Lt.prototype.removeListener=function(e,t,n,o){var s=Ht?Ht+e:e;if(!this._events[s])return this;if(!t)return Lu(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&Lu(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:Lu(this,s)}return this};Lt.prototype.removeAllListeners=function(e){var t;return e?(t=Ht?Ht+e:e,this._events[t]&&Lu(this,t)):(this._events=new Qa,this._eventsCount=0),this};Lt.prototype.off=Lt.prototype.removeListener;Lt.prototype.addListener=Lt.prototype.on;Lt.prefixed=Ht;Lt.EventEmitter=Lt;typeof q0<"u"&&(q0.exports=Lt)});var X6=an((fM,j6)=>{j6.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 i7=an(Mc=>{(function(){var r,e,t,n,o,s,i,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},i=function(c){var l,d,u,f,h,p;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],d=p[1],c=c.substring(d),l.push(h)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),s=t("a"),o=t("A"),e=function(c){var l,d,u,f,h;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),h=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-s)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===h)throw new Error("empty octet");return[f,u]},r=(function(){function c(l,d){var u,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(p=l.split("/",2),l=p[0],d=p[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=i(d)}catch(g){throw u=g,new Error("Invalid mask: "+d)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(i(l)&this.maskLong)>>>0}catch(g){throw u=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(i(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var d,u,f;for(f=i(this.first),u=i(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c})(),Mc.ip2long=i,Mc.long2ip=a,Mc.Netmask=r}).call(Mc)});var th=an((QX,m3)=>{var XX=(function(){typeof m3<"u"&&(m3.exports=g);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,s=864e13,i=4294967296,a=1e6,c="000000000",l=Math.trunc||function(S){var x=S-S%1;return x==0&&(S<0||S===0&&1/S!=1/0)?-0:x},d=g.prototype,u=(g.fromDate=function(S){return new g(+S)},g.fromInt64BE=D(0,1,2,3,0,4),g.fromInt64LE=D(3,2,1,0,4,0),g.fromString=function(B){var x,L=new g,B=(B+="").replace(/^\s*[+\-]?\d+/,function(v){var v=+v,E=1970+(v-1970)%400;return L.year=v-E,E}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(P,v,E){return v<0&&(E*=-1),x=6e4*(60*+v+ +E),""}).replace(/\.\d+$/,function(P){return L.nano=+(P+c).substr(1,9),""}).split(/\D+/);if(1<B.length?B[1]--:B[1]=0,L.time=x=Date.UTC.apply(Date,B)-(x||0),isNaN(x))throw new TypeError("Invalid Date");return m(L)},g.fromTimeT=function(S){return T(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=m(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},d.getTimeT=function(){var x=m(this),S=Math.floor(x.time/1e3),x=x.year;return x&&(S+=x*t*r/e),S},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return w(m(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(S){var x=this,L=x.toDate(),B={H:function(){return $(L.getUTCHours())},L:function(){return z(L.getUTCMilliseconds(),3)},M:function(){return $(L.getUTCMinutes())},N:function(){return z(x.getNano(),9)},S:function(){return $(L.getUTCSeconds())},Y:function(){var P=x.getYear();return 999999<P?"+"+P:9999<P?"+"+z(P,6):0<=P?z(P,4):-999999<=P?"-"+z(-P,6):P},a:function(){return h[L.getUTCDay()]},b:function(){return f[L.getUTCMonth()]},d:function(){return $(L.getUTCDate())},e:function(){return(function(P){return(9<P?"":" ")+(0|P)})(L.getUTCDate())},m:function(){return $(L.getUTCMonth()+1)}};return(function P(v){return v.replace(/%./g,function(E){var _=E[1],b=p[_],_=B[_];return b?P(b):_?_():E})})(S||u)},d.writeInt64BE=I(0,1,2,3,0,4),d.writeInt64LE=I(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],p={"%":"%",F:"%Y-%m-%d",n:`
3
- `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return g;function g(S,x,L){var B=this;if(!(B instanceof g))return new g(S,x,L);B.time=+S||0,B.nano=+x||0,B.year=+L||0,m(B)}function m(S){var x,L,B,P=S.year,v=S.time,E=S.nano,b=((E<0||a<=E)&&(E-=(L=Math.floor(E/a))*a,v+=L,L=1),P%e);return(v<-s||s<v||b)&&((x=l(v/o))&&(P+=x*e,v-=x*o),(B=w(v)).setUTCFullYear(b+B.getUTCFullYear()),B=(v=+B)+(x=l((P-=b)/e))*o,x&&-s<=B&&B<=s&&(P-=x*e,v=B),L=1),L&&(S.year=P,S.time=v,S.nano=E),S}function w(S){var x=new Date(0);return x.setTime(S),x}function T(P,B){P=+P||0;var L=l((B=(B|0)*i)/n)+l(P/n),B=B%n+P%n,P=l(B/n);return P&&(L+=P,B-=P*n),new g(1e3*B,0,L*e)}function I(S,x,L,B,P,v){return function(b,_){var O=m(this);b=b||new Array(8),F(b,_|=0);var k=Math.floor(O.time/1e3),O=O.year*(t*r/e),M=l(O/i)+l(k/i),O=O%i+k%i,k=Math.floor(O/i);return k&&(M+=k,O-=k*i),E(b,_+P,M),E(b,_+v,O),b};function E(b,_,M){b[_+S]=M>>24&255,b[_+x]=M>>16&255,b[_+L]=M>>8&255,b[_+B]=255&M}}function D(S,x,L,B,P,v){return function(b,_){F(b,_|=0);var M=E(b,_+P);return T(E(b,_+v),M)};function E(b,_){return 16777216*b[_+S]+(b[_+x]<<16|b[_+L]<<8|b[_+B])}}function F(S,x){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<x+8)throw new RangeError("Out of range")}function $(S){return(9<S?"":"0")+(0|S)}function z(S,x){return(c+(0|S)).substr(-x)}})()});var Yw=an((gse,Gw)=>{"use strict";function lR(r){return r>=55296&&r<=56319}function uR(r){return r>=56320&&r<=57343}Gw.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],lR(i)&&uR(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 Xw=an((yse,jw)=>{"use strict";function dR(r){return r>=55296&&r<=56319}function fR(r){return r>=56320&&r<=57343}jw.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),fR(o)?s!=null&&dR(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 Zw=an((wse,Qw)=>{"use strict";var hR=Yw(),pR=Xw();Qw.exports=hR.bind(null,pR)});var tb=an((bse,eb)=>{"use strict";var mR=Zw(),gR=/[\/\?<>\\:\*\|"]/g,yR=/[\x00-\x1f\x80-\x9f]/g,wR=/^\.+$/,bR=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,ER=/[\. ]+$/;function Jw(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(gR,e).replace(yR,e).replace(wR,e).replace(bR,e).replace(ER,e);return mR(t,255)}eb.exports=function(r,e){var t=e&&e.replacement||"",n=Jw(r,t);return t===""?n:Jw(n,"")}});var rb=an(Aa=>{"use strict";var vR="[object ArrayBuffer]",ao=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===vR}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}},j3="string",SR=/^[0-9a-f\s]+$/i,AR=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,IR=/^[a-zA-Z0-9-_]+$/,i1=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=ao.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},Or=class{static toString(e,t=!1){let n=ao.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}},a1=class r{static isHex(e){return typeof e===j3&&SR.test(e)}static isBase64(e){return typeof e===j3&&AR.test(e)}static isBase64Url(e){return typeof e===j3&&IR.test(e)}static ToString(e,t="utf8"){let n=ao.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 Or.toString(n,!0);case"utf16":case"utf16be":return Or.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 Or.fromString(e,!0);case"utf16":case"utf16be":return Or.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=ao.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 i1.fromString(e);case"utf16":case"utf16be":return Or.fromString(e);case"utf16le":case"usc2":return Or.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 i1.toString(e);case"utf16":case"utf16be":return Or.toString(e);case"utf16le":case"usc2":return Or.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=ao.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=ao.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 Or.toString(e,t)}static FromUtf16String(e,t=!1){return Or.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,"")||""}};a1.DEFAULT_UTF8_ENCODING="utf8";function TR(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 _R(...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 CR(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}Aa.BufferSourceConverter=ao;Aa.Convert=a1;Aa.assign=TR;Aa.combine=_R;Aa.isEqual=CR});var wx=an(Rn=>{"use strict";Object.defineProperty(Rn,"__esModule",{value:!0});Rn.parseCookie=gx;Rn.parse=gx;Rn.stringifyCookie=jL;Rn.stringifySetCookie=Fp;Rn.serialize=Fp;Rn.parseSetCookie=XL;Rn.stringifySetCookie=Fp;Rn.serialize=Fp;var px=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,mx=/^[\u0021-\u003A\u003C-\u007E]*$/,qL=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,WL=/^[\u0020-\u003A\u003D-\u007E]*$/,zL=/^-?\d+$/,GL=Object.prototype.toString,YL=(()=>{let r=function(){};return r.prototype=Object.create(null),r})();function gx(r,e){let t=new YL,n=r.length;if(n<2)return t;let o=e?.decode||yx,s=0;do{let i=q4(r,s,n);if(i===-1)break;let a=H4(r,s,n);if(i>a){s=r.lastIndexOf(";",i-1)+1;continue}let c=Xo(r,s,i);t[c]===void 0&&(t[c]=o(Xo(r,i+1,a))),s=a+1}while(s<n);return t}function jL(r,e){let t=e?.encode||encodeURIComponent,n=[];for(let o of Object.keys(r)){let s=r[o];if(s===void 0)continue;if(!px.test(o))throw new TypeError(`cookie name is invalid: ${o}`);let i=t(s);if(!mx.test(i))throw new TypeError(`cookie val is invalid: ${s}`);n.push(`${o}=${i}`)}return n.join("; ")}function Fp(r,e,t){let n=typeof r=="object"?r:{...t,name:r,value:String(e)},s=(typeof e=="object"?e:t)?.encode||encodeURIComponent;if(!px.test(n.name))throw new TypeError(`argument name is invalid: ${n.name}`);let i=n.value?s(n.value):"";if(!mx.test(i))throw new TypeError(`argument val is invalid: ${n.value}`);let a=n.name+"="+i;if(n.maxAge!==void 0){if(!Number.isInteger(n.maxAge))throw new TypeError(`option maxAge is invalid: ${n.maxAge}`);a+="; Max-Age="+n.maxAge}if(n.domain){if(!qL.test(n.domain))throw new TypeError(`option domain is invalid: ${n.domain}`);a+="; Domain="+n.domain}if(n.path){if(!WL.test(n.path))throw new TypeError(`option path is invalid: ${n.path}`);a+="; Path="+n.path}if(n.expires){if(!QL(n.expires)||!Number.isFinite(n.expires.valueOf()))throw new TypeError(`option expires is invalid: ${n.expires}`);a+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(a+="; HttpOnly"),n.secure&&(a+="; Secure"),n.partitioned&&(a+="; Partitioned"),n.priority)switch(typeof n.priority=="string"?n.priority.toLowerCase():void 0){case"low":a+="; Priority=Low";break;case"medium":a+="; Priority=Medium";break;case"high":a+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${n.priority}`)}if(n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:case"strict":a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"none":a+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${n.sameSite}`)}return a}function XL(r,e){let t=e?.decode||yx,n=r.length,o=H4(r,0,n),s=q4(r,0,o),i=s===-1?{name:"",value:t(Xo(r,0,o))}:{name:Xo(r,0,s),value:t(Xo(r,s+1,o))},a=o+1;for(;a<n;){let c=H4(r,a,n),l=q4(r,a,c),d=l===-1?Xo(r,a,c):Xo(r,a,l),u=l===-1?void 0:Xo(r,l+1,c);switch(d.toLowerCase()){case"httponly":i.httpOnly=!0;break;case"secure":i.secure=!0;break;case"partitioned":i.partitioned=!0;break;case"domain":i.domain=u;break;case"path":i.path=u;break;case"max-age":u&&zL.test(u)&&(i.maxAge=Number(u));break;case"expires":if(!u)break;let f=new Date(u);Number.isFinite(f.valueOf())&&(i.expires=f);break;case"priority":if(!u)break;let h=u.toLowerCase();(h==="low"||h==="medium"||h==="high")&&(i.priority=h);break;case"samesite":if(!u)break;let p=u.toLowerCase();(p==="lax"||p==="strict"||p==="none")&&(i.sameSite=p);break}a=c+1}return i}function H4(r,e,t){let n=r.indexOf(";",e);return n===-1?t:n}function q4(r,e,t){let n=r.indexOf("=",e);return n<t?n:-1}function Xo(r,e,t){let n=e,o=t;do{let s=r.charCodeAt(n);if(s!==32&&s!==9)break}while(++n<o);for(;o>n;){let s=r.charCodeAt(o-1);if(s!==32&&s!==9)break;o--}return r.slice(n,o)}function yx(r){if(r.indexOf("%")===-1)return r;try{return decodeURIComponent(r)}catch{return r}}function QL(r){return GL.call(r)==="[object Date]"}});var fN={};et(fN,{DEFAULT_CID_PEER_FILTER_SIZE:()=>Sg,DEFAULT_SESSION_MAX_PROVIDERS:()=>vg,DEFAULT_SESSION_MIN_PROVIDERS:()=>xg,InsufficientProvidersError:()=>rl,InvalidCodecError:()=>Ag,NoRoutersAvailableError:()=>Vo,UnknownCodecError:()=>ol,UnknownHashAlgorithmError:()=>nl,createHelia:()=>dN,heliaDefaults:()=>E6,libp2pDefaults:()=>H0});var I6=Symbol.for("@libp2p/connection");var Dn=Symbol.for("@libp2p/content-routing");var Vt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},vu=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},Su=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},A=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},Nn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},za=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}},Ga=class extends Error{static name="UnsupportedOperationError";constructor(e="Unsupported operation"){super(e),this.name="UnsupportedOperationError"}};var is=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},di=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},Br=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},fi=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}};var cn=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Ya=class extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}},Le=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},hi=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},ln=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Au=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},bo=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},pi=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"}},as=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},un=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 Eo=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},cs=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},ja=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Iu=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},mi=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 Tu=class extends Event{data;constructor(e,t){super("message",t),this.data=e}},xo=class extends Event{error;local;constructor(e,t,n){super("close",n),this.error=t,this.local=e}},_u=class extends xo{constructor(e,t){super(!0,e,t)}},Cu=class extends xo{constructor(e,t){super(!1,e,t)}};var ls=Symbol.for("@libp2p/peer-discovery");var ku=Symbol.for("@libp2p/peer-id");function Rt(r){return!!r?.[ku]}var On=Symbol.for("@libp2p/peer-routing");var us="keep-alive";function Pu(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function at(...r){let e=[];for(let t of r)Pu(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 lt(...r){let e=[];for(let t of r)Pu(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 vo=Symbol.for("@libp2p/transport");var Xa;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Xa||(Xa={}));var ie=class extends EventTarget{#e=new Map;constructor(){super()}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))}};var me=Symbol.for("@libp2p/service-capabilities"),ur=Symbol.for("@libp2p/service-dependencies");var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var Ru=class extends AggregateError{static name="DNSQueryFailedError";name="DNSQueryFailedError"};var W0=Ln(_6(),1);var z0=class r extends Error{name="TimeoutError";constructor(e,t){super(e,t),Error.captureStackTrace?.(this,r)}},C6=r=>r.reason??new DOMException("This operation was aborted.","AbortError");function qt(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:s={setTimeout,clearTimeout},signal:i}=e,a,c,d=new Promise((u,f)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(i?.aborted){f(C6(i));return}if(i&&(c=()=>{f(C6(i))},i.addEventListener("abort",c,{once:!0})),r.then(u,f),t===Number.POSITIVE_INFINITY)return;let h=new z0;a=s.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(p){f(p)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?f(o):(h.message=o??`Promise timed out after ${t} milliseconds`,f(h))},t)}).finally(()=>{d.clear(),c&&i&&i.removeEventListener("abort",c)});return d.clear=()=>{s.clearTimeout.call(void 0,a),a=void 0},d}function G0(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){let{priority:n=0,id:o}=t??{},s={priority:n,id:o,run:e};if(this.size===0||this.#e[this.size-1].priority>=n){this.#e.push(s);return}let i=G0(this.#e,s,(a,c)=>c.priority-a.priority);this.#e.splice(i,0,s)}setPriority(e,t){let n=this.#e.findIndex(s=>s.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}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 ds=class extends W0.default{#e;#t;#r=0;#a;#c=!1;#m=!1;#u;#T=0;#b=0;#d;#f;#l;#i=[];#s=0;#n;#_;#o=0;#y;#h;#L=1n;#w=new Map;timeout;constructor(e){if(super(),e={carryoverIntervalCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Za,strict:!1,...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})`);if(e.strict&&e.interval===0)throw new TypeError("The `strict` option requires a non-zero `interval`");if(e.strict&&e.intervalCap===Number.POSITIVE_INFINITY)throw new TypeError("The `strict` option requires a finite `intervalCap`");if(this.#e=e.carryoverIntervalCount??e.carryoverConcurrencyCount??!1,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#a=e.intervalCap,this.#u=e.interval,this.#l=e.strict,this.#n=new e.queueClass,this.#_=e.queueClass,this.concurrency=e.concurrency,e.timeout!==void 0&&!(Number.isFinite(e.timeout)&&e.timeout>0))throw new TypeError(`Expected \`timeout\` to be a positive finite number, got \`${e.timeout}\` (${typeof e.timeout})`);this.timeout=e.timeout,this.#h=e.autoStart===!1,this.#$()}#E(e){for(;this.#s<this.#i.length;){let n=this.#i[this.#s];if(n!==void 0&&e-n>=this.#u)this.#s++;else break}(this.#s>100&&this.#s>this.#i.length/2||this.#s===this.#i.length)&&(this.#i=this.#i.slice(this.#s),this.#s=0)}#D(e){this.#l?this.#i.push(e):this.#r++}#N(){this.#l?this.#i.length>this.#s&&this.#i.pop():this.#r>0&&this.#r--}#x(){return this.#i.length-this.#s}get#O(){return this.#t?!0:this.#l?this.#x()<this.#a:this.#r<this.#a}get#M(){return this.#o<this.#y}#B(){this.#o--,this.#o===0&&this.emit("pendingZero"),this.#A(),this.emit("next")}#U(){this.#f=void 0,this.#P(),this.#k()}#F(e){if(this.#l){if(this.#E(e),this.#x()>=this.#a){let n=this.#i[this.#s],o=this.#u-(e-n);return this.#v(o),!0}return!1}if(this.#d===void 0){let t=this.#T-e;if(t<0){if(this.#b>0){let n=e-this.#b;if(n<this.#u)return this.#v(this.#u-n),!0}this.#r=this.#e?this.#o:0}else return this.#v(t),!0}return!1}#v(e){this.#f===void 0&&(this.#f=setTimeout(()=>{this.#U()},e))}#S(){this.#d&&(clearInterval(this.#d),this.#d=void 0)}#C(){this.#f&&(clearTimeout(this.#f),this.#f=void 0)}#A(){if(this.#n.size===0){if(this.#S(),this.emit("empty"),this.#o===0){if(this.#C(),this.#l&&this.#s>0){let t=Date.now();this.#E(t)}this.emit("idle")}return!1}let e=!1;if(!this.#h){let t=Date.now(),n=!this.#F(t);if(this.#O&&this.#M){let o=this.#n.dequeue();this.#t||(this.#D(t),this.#g()),this.emit("active"),o(),n&&this.#k(),e=!0}}return e}#k(){this.#t||this.#d!==void 0||this.#l||(this.#d=setInterval(()=>{this.#P()},this.#u),this.#T=Date.now()+this.#u)}#P(){this.#l||(this.#r===0&&this.#o===0&&this.#d&&this.#S(),this.#r=this.#e?this.#o:0),this.#I(),this.#g()}#I(){for(;this.#A(););}get concurrency(){return this.#y}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.#y=e,this.#I()}setPriority(e,t){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`Expected \`priority\` to be a finite number, got \`${t}\` (${typeof t})`);this.#n.setPriority(e,t)}async add(e,t={}){return t={timeout:this.timeout,...t,id:t.id??(this.#L++).toString()},new Promise((n,o)=>{let s=Symbol(`task-${t.id}`);this.#n.enqueue(async()=>{this.#o++,this.#w.set(s,{id:t.id,priority:t.priority??0,startTime:Date.now(),timeout:t.timeout});let i;try{try{t.signal?.throwIfAborted()}catch(l){throw this.#K(),this.#w.delete(s),l}this.#b=Date.now();let a=e({signal:t.signal});if(t.timeout&&(a=qt(Promise.resolve(a),{milliseconds:t.timeout,message:`Task timed out after ${t.timeout}ms (queue has ${this.#o} running, ${this.#n.size} waiting)`})),t.signal){let{signal:l}=t;a=Promise.race([a,new Promise((d,u)=>{i=()=>{u(l.reason)},l.addEventListener("abort",i,{once:!0})})])}let c=await a;n(c),this.emit("completed",c)}catch(a){o(a),this.emit("error",a)}finally{i&&t.signal?.removeEventListener("abort",i),this.#w.delete(s),queueMicrotask(()=>{this.#B()})}},t),this.emit("add"),this.#A()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#h?(this.#h=!1,this.#I(),this):this}pause(){this.#h=!0}clear(){this.#n=new this.#_,this.#S(),this.#R(),this.emit("empty"),this.#o===0&&(this.#C(),this.emit("idle")),this.emit("next")}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.#o===0&&this.#n.size===0||await this.#p("idle")}async onPendingZero(){this.#o!==0&&await this.#p("pendingZero")}async onRateLimit(){this.isRateLimited||await this.#p("rateLimit")}async onRateLimitCleared(){this.isRateLimited&&await this.#p("rateLimitCleared")}onError(){return new Promise((e,t)=>{let n=o=>{this.off("error",n),t(o)};this.on("error",n)})}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.#o}get isPaused(){return this.#h}#$(){this.#t||(this.on("add",()=>{this.#n.size>0&&this.#g()}),this.on("next",()=>{this.#g()}))}#g(){this.#t||this.#m||(this.#m=!0,queueMicrotask(()=>{this.#m=!1,this.#R()}))}#K(){this.#t||(this.#N(),this.#g())}#R(){let e=this.#c;if(this.#t||this.#n.size===0){e&&(this.#c=!1,this.emit("rateLimitCleared"));return}let t;if(this.#l){let o=Date.now();this.#E(o),t=this.#x()}else t=this.#r;let n=t>=this.#a;n!==e&&(this.#c=n,this.emit(n?"rateLimit":"rateLimitCleared"))}get isRateLimited(){return this.#c}get isSaturated(){return this.#o===this.#y&&this.#n.size>0||this.isRateLimited&&this.#n.size>0}get runningTasks(){return[...this.#w.values()].map(e=>({...e}))}};function Du(r){let e=[dr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var J0={};et(J0,{base10:()=>ES});var uO=new Uint8Array(0);function k6(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 $r(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 P6(r){return new TextEncoder().encode(r)}function R6(r){return new TextDecoder().decode(r)}function pS(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(p){if(p instanceof Uint8Array||(ArrayBuffer.isView(p)?p=new Uint8Array(p.buffer,p.byteOffset,p.byteLength):Array.isArray(p)&&(p=Uint8Array.from(p))),!(p instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(p.length===0)return"";for(var g=0,m=0,w=0,T=p.length;w!==T&&p[w]===0;)w++,g++;for(var I=(T-w)*d+1>>>0,D=new Uint8Array(I);w!==T;){for(var F=p[w],$=0,z=I-1;(F!==0||$<m)&&z!==-1;z--,$++)F+=256*D[z]>>>0,D[z]=F%a>>>0,F=F/a>>>0;if(F!==0)throw new Error("Non-zero carry");m=$,w++}for(var S=I-m;S!==I&&D[S]===0;)S++;for(var x=c.repeat(g);S<I;++S)x+=r.charAt(D[S]);return x}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var g=0;if(p[g]!==" "){for(var m=0,w=0;p[g]===c;)m++,g++;for(var T=(p.length-g)*l+1>>>0,I=new Uint8Array(T);p[g];){var D=t[p.charCodeAt(g)];if(D===255)return;for(var F=0,$=T-1;(D!==0||F<w)&&$!==-1;$--,F++)D+=a*I[$]>>>0,I[$]=D%256>>>0,D=D/256>>>0;if(D!==0)throw new Error("Non-zero carry");w=F,g++}if(p[g]!==" "){for(var z=T-w;z!==T&&I[z]===0;)z++;for(var S=new Uint8Array(m+(T-z)),x=m;z!==T;)S[x++]=I[z++];return S}}}function h(p){var g=f(p);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var mS=pS,gS=mS,L6=gS;var j0=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")}},X0=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 D6(this,e)}},Q0=class{decoders;constructor(e){this.decoders=e}or(e){return D6(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 D6(r,e){return new Q0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Z0=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 j0(e,t,n),this.decoder=new X0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function gi({name:r,prefix:e,encode:t,decode:n}){return new Z0(r,e,t,n)}function So({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=L6(t,r);return gi({prefix:e,name:r,encode:n,decode:s=>$r(o(s))})}function yS(r,e,t,n){let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*t/8|0),i=0,a=0,c=0;for(let l=0;l<o;++l){let d=e[r[l]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<t|d,i+=t,i>=8&&(i-=8,s[c++]=255&a>>i)}if(i>=t||(255&a<<8-i)!==0)throw new SyntaxError("Unexpected end of data");return s}function wS(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)!==0;)s+="=";return s}function bS(r){let e={};for(let t=0;t<r.length;++t)e[r[t]]=t;return e}function Xe({name:r,prefix:e,bitsPerChar:t,alphabet:n}){let o=bS(n);return gi({prefix:e,name:r,encode(s){return wS(s,n,t)},decode(s){return yS(s,o,t,r)}})}var ES=So({prefix:"9",name:"base10",alphabet:"0123456789"});var e2={};et(e2,{base16:()=>xS,base16upper:()=>vS});var xS=Xe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),vS=Xe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var t2={};et(t2,{base2:()=>SS});var SS=Xe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var r2={};et(r2,{base256emoji:()=>CS});var N6=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}"),AS=N6.reduce((r,e,t)=>(r[t]=e,r),[]),IS=N6.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function TS(r){return r.reduce((e,t)=>(e+=AS[t],e),"")}function _S(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=IS[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var CS=gi({prefix:"\u{1F680}",name:"base256emoji",encode:TS,decode:_S});var n2={};et(n2,{base32:()=>ut,base32hex:()=>LS,base32hexpad:()=>NS,base32hexpadupper:()=>OS,base32hexupper:()=>DS,base32pad:()=>PS,base32padupper:()=>RS,base32upper:()=>kS,base32z:()=>MS});var ut=Xe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),kS=Xe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),PS=Xe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),RS=Xe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),LS=Xe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),DS=Xe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),NS=Xe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),OS=Xe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),MS=Xe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var o2={};et(o2,{base36:()=>Ar,base36upper:()=>BS});var Ar=So({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),BS=So({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var s2={};et(s2,{base58btc:()=>De,base58flickr:()=>US});var De=So({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),US=So({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var i2={};et(i2,{base64:()=>rt,base64pad:()=>Ja,base64url:()=>ec,base64urlpad:()=>FS});var rt=Xe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Ja=Xe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),ec=Xe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),FS=Xe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var a2={};et(a2,{base8:()=>$S});var $S=Xe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var c2={};et(c2,{identity:()=>KS});var KS=gi({prefix:"\0",name:"identity",encode:r=>R6(r),decode:r=>P6(r)});var Nu={};et(Nu,{code:()=>l2,decode:()=>zS,encode:()=>WS,name:()=>qS});var VS=new TextEncoder,HS=new TextDecoder,qS="json",l2=512;function WS(r){return VS.encode(JSON.stringify(r))}function zS(r){return JSON.parse(HS.decode(r))}var fs={};et(fs,{code:()=>Mn,decode:()=>jS,encode:()=>YS,name:()=>GS});var GS="raw",Mn=85;function YS(r){return $r(r)}function jS(r){return $r(r)}var f2={};et(f2,{identity:()=>dt});var He={};et(He,{Digest:()=>hs,create:()=>Wt,decode:()=>ke,equals:()=>d2,hasCode:()=>pA});var XS=B6,O6=128,QS=127,ZS=~QS,JS=Math.pow(2,31);function B6(r,e,t){e=e||[],t=t||0;for(var n=t;r>=JS;)e[t++]=r&255|O6,r/=128;for(;r&ZS;)e[t++]=r&255|O6,r>>>=7;return e[t]=r|0,B6.bytes=t-n+1,e}var eA=u2,tA=128,M6=127;function u2(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw u2.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&M6)<<o:(i&M6)*Math.pow(2,o),o+=7}while(i>=tA);return u2.bytes=s-n,t}var rA=Math.pow(2,7),nA=Math.pow(2,14),oA=Math.pow(2,21),sA=Math.pow(2,28),iA=Math.pow(2,35),aA=Math.pow(2,42),cA=Math.pow(2,49),lA=Math.pow(2,56),uA=Math.pow(2,63),dA=function(r){return r<rA?1:r<nA?2:r<oA?3:r<sA?4:r<iA?5:r<aA?6:r<cA?7:r<lA?8:r<uA?9:10},fA={encode:XS,decode:eA,encodingLength:dA},hA=fA,tc=hA;function rc(r,e=0){return[tc.decode(r,e),tc.decode.bytes]}function yi(r,e,t=0){return tc.encode(r,e,t),e}function wi(r){return tc.encodingLength(r)}function Wt(r,e){let t=e.byteLength,n=wi(r),o=n+wi(t),s=new Uint8Array(o+t);return yi(r,s,0),yi(t,s,n),s.set(e,o),new hs(r,t,e,s)}function ke(r){let e=$r(r),[t,n]=rc(e),[o,s]=rc(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new hs(t,o,i,e)}function d2(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&k6(r.bytes,t.bytes)}}var hs=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function pA(r,e){return r.code===e}var U6=0,mA="identity",F6=$r;function gA(r,e){if(e?.truncate!=null&&e.truncate!==r.byteLength){if(e.truncate<0||e.truncate>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,e.truncate)}return Wt(U6,F6(r))}var dt={code:U6,name:mA,encode:F6,digest:gA};var p2={};et(p2,{sha256:()=>ze,sha512:()=>Mu});var yA=20;function nc({name:r,code:e,encode:t,minDigestLength:n,maxDigestLength:o}){return new h2(r,e,t,n,o)}var h2=class{name;code;encode;minDigestLength;maxDigestLength;constructor(e,t,n,o,s){this.name=e,this.code=t,this.encode=n,this.minDigestLength=o??yA,this.maxDigestLength=s}digest(e,t){if(t?.truncate!=null){if(t.truncate<this.minDigestLength)throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`);if(this.maxDigestLength!=null&&t.truncate>this.maxDigestLength)throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)}if(e instanceof Uint8Array){let n=this.encode(e);return n instanceof Uint8Array?$6(n,this.code,t?.truncate):n.then(o=>$6(o,this.code,t?.truncate))}else throw Error("Unknown type, must be binary type")}};function $6(r,e,t){if(t!=null&&t!==r.byteLength){if(t>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,t)}return Wt(e,r)}function V6(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var ze=nc({name:"sha2-256",code:18,encode:V6("SHA-256")}),Mu=nc({name:"sha2-512",code:19,encode:V6("SHA-512")});function H6(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return bA(t,m2(r),e??De.encoder);default:return EA(t,m2(r),e??ut.encoder)}}var q6=new WeakMap;function m2(r){let e=q6.get(r);if(e==null){let t=new Map;return q6.set(r,t),t}return e}var G=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!==oc)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==xA)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=Wt(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&&d2(e.multihash,n.multihash)}toString(e){return H6(this,e)}toJSON(){return{"/":H6(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??W6(n,o,s.bytes))}else if(t[vA]===!0){let{version:n,multihash:o,code:s}=t,i=ke(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!==oc)throw new Error(`Version 0 CID must use dag-pb (code: ${oc}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=W6(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,oc,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=$r(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 hs(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]=rc(e.subarray(t));return t+=f,u},o=n(),s=oc;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]=wA(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 m2(s).set(n,e),s}};function wA(r,e){switch(r[0]){case"Q":{let t=e??De;return[De.prefix,t.decode(`${De.prefix}${r}`)]}case De.prefix:{let t=e??De;return[De.prefix,t.decode(r)]}case ut.prefix:{let t=e??ut;return[ut.prefix,t.decode(r)]}case Ar.prefix:{let t=e??Ar;return[Ar.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 bA(r,e,t){let{prefix:n}=t;if(n!==De.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 EA(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 oc=112,xA=18;function W6(r,e,t){let n=wi(r),o=n+wi(e),s=new Uint8Array(o+t.byteLength);return yi(r,s,0),yi(e,s,n),s.set(t,o),s}var vA=Symbol.for("@ipld/js-cid/CID");var ps={...c2,...t2,...a2,...J0,...e2,...n2,...o2,...s2,...i2,...r2},GO={...p2,...f2};function ae(r=0){return new Uint8Array(r)}function Ge(r=0){return new Uint8Array(r)}function G6(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var z6=G6("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),g2=G6("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Ge(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),SA={utf8:z6,"utf-8":z6,hex:ps.base16,latin1:g2,ascii:g2,binary:g2,...ps},Bu=SA;function R(r,e="utf8"){let t=Bu[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var y2=60;function Uu(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:dr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:dr[e.type],TTL:e.TTL??e.ttl??y2,data:e.data instanceof Uint8Array?R(e.data):e.data}))}}var AA=4;function w2(r,e={}){let t=new ds({concurrency:e.queryConcurrency??AA});return async(n,o={})=>{let s=o?.logger?.forComponent("dns:dns-json-over-https"),i=new URLSearchParams;i.set("name",n),Du(o.types).forEach(c=>{i.append("type",dr[c])}),o.onProgress?.(new H("dns:query",n)),s?.("GET %s",`${r}?${i}`);let a=await t.add(async()=>{let c=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(s?.("GET %s %d",c.url,c.status),c.status!==200)throw new Error(`Unexpected HTTP status: ${c.status} - ${c.statusText}`);let l=Uu(await c.json());return o.onProgress?.(new H("dns:response",l)),l},{signal:o.signal});if(a==null)throw new Error("No DNS response received");return a}}function Y6(){return[w2("https://cloudflare-dns.com/dns-query"),w2("https://dns.google/resolve")]}var Q6=Ln(X6(),1);var b2=class{lru;constructor(e){this.lru=(0,Q6.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 Uu({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:dr[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??y2)*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 Z6(r){return new b2(r)}var IA=1e3,Fu=class{resolvers;cache;logger;constructor(e){this.resolvers={},this.cache=Z6(e.cacheSize??IA),this.logger=e.logger,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["."]=Y6())}async query(e,t={}){let n=Du(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new H("dns:cache",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,logger:this.logger,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",l))}}throw new Ru(a,`DNS lookup of ${e} ${n} failed`)}};var dr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(dr||(dr={}));function $u(r={}){return new Fu(r)}function TA(r){return r[Symbol.asyncIterator]!=null}function _A(r){if(TA(r))return(async()=>{for await(let e of r);})();for(let e of r);}var er=_A;var sc=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},ic=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Ku=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var J6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Ku("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 nt=J6;function ee(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function Oe(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=Ge(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var t5=Symbol.for("@achingbrain/uint8arraylist");function e5(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 bi(r){return!!r?.[t5]}var X=class r{bufs;length;[t5]=!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(bi(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(bi(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=e5(this.bufs,e);return t.buf[t.index]}set(e,t){let n=e5(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(bi(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 Oe(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Oe(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(!bi(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[n[u]]=u;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let h=this.get(u+f);if(n[f]!==h){d=Math.max(1,f-a[h]);break}}if(d===0)return u}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=Ge(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=ae(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=ae(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=ae(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=Ge(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=ae(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=ae(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=ae(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=ae(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=ae(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!ee(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,s)=>o+s.byteLength,0)),n.length=t,n}};function C(r,e="utf8"){let t=Bu[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var kA=parseInt("11111",2),E2=parseInt("10000000",2),PA=parseInt("01111111",2),r5={0:ac,1:ac,2:RA,3:NA,4:OA,5:DA,6:LA,16:ac,22:ac,48:ac};function Ir(r,e={offset:0}){let t=r[e.offset]&kA;if(e.offset++,r5[t]!=null)return r5[t](r,e);throw new Error("No decoder for tag "+t)}function cc(r,e){let t=0;if((r[e.offset]&E2)===E2){let n=r[e.offset]&PA,o="0x";e.offset++;for(let s=0;s<n;s++,e.offset++)o+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(o,16)}else t=r[e.offset],e.offset++;return t}function ac(r,e){cc(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Ir(r,e);if(n===null)break;t.push(n)}return t}function RA(r,e){let t=cc(r,e),n=e.offset,o=e.offset+t,s=[];for(let i=n;i<o;i++)i===n&&r[i]===0||s.push(r[i]);return e.offset+=t,Uint8Array.from(s)}function LA(r,e){let t=cc(r,e),n=e.offset+t,o=r[e.offset];e.offset++;let s=0,i=0;o<40?(s=0,i=o):o<80?(s=1,i=o-40):(s=2,i=o-80);let a=`${s}.${i}`,c=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let d=0;for(let u=0;u<c.length;u++)d+=c[u]<<u*7;a+=`.${d}`,c=[]}}return a}function DA(r,e){return e.offset++,null}function NA(r,e){let t=cc(r,e),n=r[e.offset];e.offset++;let o=r.subarray(e.offset,e.offset+t-1);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return o}function OA(r,e){let t=cc(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function MA(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new X;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function Vu(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=MA(r.byteLength);return new X(Uint8Array.from([e.byteLength|E2]),e)}function zt(r){let e=new X,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new X(Uint8Array.from([2]),Vu(e),e)}function lc(r){let e=Uint8Array.from([0]),t=new X(e,r);return new X(Uint8Array.from([3]),Vu(t),t)}function n5(r){return new X(Uint8Array.from([4]),Vu(r),r)}function Kr(r,e=48){let t=new X;for(let n of r)t.append(n);return new X(Uint8Array.from([e]),Vu(t),t)}var o5="1.2.840.10045.3.1.7",s5="1.3.132.0.34",i5="1.3.132.0.35";async function a5(r="P-256"){let e=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:r},!0,["sign","verify"]);return{publicKey:await crypto.subtle.exportKey("jwk",e.publicKey),privateKey:await crypto.subtle.exportKey("jwk",e.privateKey)}}async function c5(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["sign"]);t?.signal?.throwIfAborted();let o=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},n,e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function l5(r,e,t,n){let o=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);n?.signal?.throwIfAborted();let s=await crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},o,e,t.subarray());return n?.signal?.throwIfAborted(),s}var BA=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),UA=Uint8Array.from([6,5,43,129,4,0,34]),FA=Uint8Array.from([6,5,43,129,4,0,35]),u5={ext:!0,kty:"EC",crv:"P-256"},d5={ext:!0,kty:"EC",crv:"P-384"},f5={ext:!0,kty:"EC",crv:"P-521"},Ei=32,xi=48,vi=66;function h5(r){let e=Ir(r);return x2(e)}function x2(r){let e=r[1],t=R(e,"base64url"),n=r[2][1][0],o=1,s,i;if(e.byteLength===Ei)return s=R(n.subarray(o,o+Ei),"base64url"),i=R(n.subarray(o+Ei),"base64url"),new gs({...u5,key_ops:["sign"],d:t,x:s,y:i});if(e.byteLength===xi)return s=R(n.subarray(o,o+xi),"base64url"),i=R(n.subarray(o+xi),"base64url"),new gs({...d5,key_ops:["sign"],d:t,x:s,y:i});if(e.byteLength===vi)return s=R(n.subarray(o,o+vi),"base64url"),i=R(n.subarray(o+vi),"base64url"),new gs({...f5,key_ops:["sign"],d:t,x:s,y:i});throw new A(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function v2(r){let e=Ir(r);return p5(e)}function p5(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===Ei*2+1)return n=R(e.subarray(t,t+Ei),"base64url"),o=R(e.subarray(t+Ei),"base64url"),new ms({...u5,key_ops:["verify"],x:n,y:o});if(e.byteLength===xi*2+1)return n=R(e.subarray(t,t+xi),"base64url"),o=R(e.subarray(t+xi),"base64url"),new ms({...d5,key_ops:["verify"],x:n,y:o});if(e.byteLength===vi*2+1)return n=R(e.subarray(t,t+vi),"base64url"),o=R(e.subarray(t+vi),"base64url"),new ms({...f5,key_ops:["verify"],x:n,y:o});throw new A(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function m5(r){return Kr([zt(Uint8Array.from([1])),n5(C(r.d??"","base64url")),Kr([y5(r.crv)],160),Kr([lc(new X(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function g5(r){return Kr([zt(Uint8Array.from([1])),Kr([y5(r.crv)],160),Kr([lc(new X(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function y5(r){if(r==="P-256")return BA;if(r==="P-384")return UA;if(r==="P-521")return FA;throw new A(`Invalid curve ${r}`)}async function w5(r="P-256"){let e=await a5(r);return new gs(e.privateKey)}var ms=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=g5(this.jwk)),this._raw}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}async verify(e,t,n){return l5(this.jwk,t,e,n)}},gs=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new ms({crv:e.crv,ext:e.ext,key_ops:["verify"],kty:"EC",x:e.x,y:e.y})}get raw(){return this._raw==null&&(this._raw=m5(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}async sign(e,t){return c5(this.jwk,e,t)}};function ys(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Dt(r,e=""){if(!Number.isSafeInteger(r)||r<0){let t=e&&`"${e}" `;throw new Error(`${t}expected integer >= 0, got ${r}`)}}function ce(r,e,t=""){let n=ys(r),o=r?.length,s=e!==void 0;if(!n||s&&o!==e){let i=t&&`"${t}" `,a=s?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return r}function Un(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash must wrapped by utils.createHasher");Dt(r.outputLen),Dt(r.blockLen)}function Si(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 E5(r,e){ce(r,void 0,"digestInto() output");let t=e.outputLen;if(r.length<t)throw new Error('"digestInto() output" expected to be of length >='+t)}function Nt(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function ws(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function Vr(r,e){return r<<32-e|r>>>e}function Hu(r,e){return r<<e|r>>>32-e>>>0}var x5=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",$A=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Fn(r){if(ce(r),x5)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=$A[r[t]];return e}var Bn={_0:48,_9:57,A:65,F:70,a:97,f:102};function b5(r){if(r>=Bn._0&&r<=Bn._9)return r-Bn._0;if(r>=Bn.A&&r<=Bn.F)return r-(Bn.A-10);if(r>=Bn.a&&r<=Bn.f)return r-(Bn.a-10)}function $n(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(x5)return Uint8Array.fromHex(r);let e=r.length,t=e/2;if(e%2)throw new Error("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=b5(r.charCodeAt(s)),a=b5(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}var KA=async()=>{};async function v5(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 KA(),n+=s)}}function VA(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function S2(r,e=""){return typeof r=="string"?VA(r):ce(r,void 0,e)}function tr(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ce(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 S5(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("options must be object or undefined");return Object.assign(r,e)}function uc(r,e={}){let t=(o,s)=>r(s).update(o).digest(),n=r(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=o=>r(o),Object.assign(t,e),Object.freeze(t)}function dn(r=32){let e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");return e.getRandomValues(new Uint8Array(r))}var A2=r=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,r])});function qu(r,e,t){return r&e^~r&t}function Wu(r,e,t){return r&e^r&t^e&t}var bs=class{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,n,o){this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=ws(this.buffer)}update(e){Si(this),ce(e);let{view:t,buffer:n,blockLen:o}=this,s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=ws(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){Si(this),E5(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,Nt(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(n,0),i=0);for(let u=i;u<o;u++)t[u]=0;n.setBigUint64(o-8,BigInt(this.length*8),s),this.process(n,0);let a=ws(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen must 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||=new this.constructor,e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=o,e.pos=a,o%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},Kn=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var bt=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var zu=BigInt(4294967295),A5=BigInt(32);function HA(r,e=!1){return e?{h:Number(r&zu),l:Number(r>>A5&zu)}:{h:Number(r>>A5&zu)|0,l:Number(r&zu)|0}}function I5(r,e=!1){let t=r.length,n=new Uint32Array(t),o=new Uint32Array(t);for(let s=0;s<t;s++){let{h:i,l:a}=HA(r[s],e);[n[s],o[s]]=[i,a]}return[n,o]}var I2=(r,e,t)=>r>>>t,T2=(r,e,t)=>r<<32-t|e>>>t,Es=(r,e,t)=>r>>>t|e<<32-t,xs=(r,e,t)=>r<<32-t|e>>>t,dc=(r,e,t)=>r<<64-t|e>>>t-32,fc=(r,e,t)=>r>>>t-32|e<<64-t;function fn(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var T5=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),_5=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,C5=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),k5=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,P5=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),R5=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var WA=Uint32Array.from([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]),Ao=new Uint32Array(64),_2=class extends bs{constructor(e){super(64,e,8,!1)}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)Ao[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=Ao[u-15],h=Ao[u-2],p=Vr(f,7)^Vr(f,18)^f>>>3,g=Vr(h,17)^Vr(h,19)^h>>>10;Ao[u]=g+Ao[u-7]+p+Ao[u-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=Vr(a,6)^Vr(a,11)^Vr(a,25),h=d+f+qu(a,c,l)+WA[u]+Ao[u]|0,g=(Vr(n,2)^Vr(n,13)^Vr(n,22))+Wu(n,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=n,n=h+g|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,s,i,a,c,l,d)}roundClean(){Nt(Ao)}destroy(){this.set(0,0,0,0,0,0,0,0),Nt(this.buffer)}},C2=class extends _2{A=Kn[0]|0;B=Kn[1]|0;C=Kn[2]|0;D=Kn[3]|0;E=Kn[4]|0;F=Kn[5]|0;G=Kn[6]|0;H=Kn[7]|0;constructor(){super(32)}};var L5=I5(["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))),zA=L5[0],GA=L5[1],Io=new Uint32Array(80),To=new Uint32Array(80),k2=class extends bs{constructor(e){super(128,e,16,!1)}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:h,Gl:p,Hh:g,Hl:m}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,h,p,g,m]}set(e,t,n,o,s,i,a,c,l,d,u,f,h,p,g,m){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=g|0,this.Hl=m|0}process(e,t){for(let I=0;I<16;I++,t+=4)Io[I]=e.getUint32(t),To[I]=e.getUint32(t+=4);for(let I=16;I<80;I++){let D=Io[I-15]|0,F=To[I-15]|0,$=Es(D,F,1)^Es(D,F,8)^I2(D,F,7),z=xs(D,F,1)^xs(D,F,8)^T2(D,F,7),S=Io[I-2]|0,x=To[I-2]|0,L=Es(S,x,19)^dc(S,x,61)^I2(S,x,6),B=xs(S,x,19)^fc(S,x,61)^T2(S,x,6),P=C5(z,B,To[I-7],To[I-16]),v=k5(P,$,L,Io[I-7],Io[I-16]);Io[I]=v|0,To[I]=P|0}let{Ah:n,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:h,Fl:p,Gh:g,Gl:m,Hh:w,Hl:T}=this;for(let I=0;I<80;I++){let D=Es(u,f,14)^Es(u,f,18)^dc(u,f,41),F=xs(u,f,14)^xs(u,f,18)^fc(u,f,41),$=u&h^~u&g,z=f&p^~f&m,S=P5(T,F,z,GA[I],To[I]),x=R5(S,w,D,$,zA[I],Io[I]),L=S|0,B=Es(n,o,28)^dc(n,o,34)^dc(n,o,39),P=xs(n,o,28)^fc(n,o,34)^fc(n,o,39),v=n&s^n&a^s&a,E=o&i^o&c^i&c;w=g|0,T=m|0,g=h|0,m=p|0,h=u|0,p=f|0,{h:u,l:f}=fn(l|0,d|0,x|0,L|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let b=T5(L,P,E);n=_5(b,x,B,v),o=b|0}({h:n,l:o}=fn(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=fn(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=fn(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=fn(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=fn(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=fn(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:m}=fn(this.Gh|0,this.Gl|0,g|0,m|0),{h:w,l:T}=fn(this.Hh|0,this.Hl|0,w|0,T|0),this.set(n,o,s,i,a,c,l,d,u,f,h,p,g,m,w,T)}roundClean(){Nt(Io,To)}destroy(){Nt(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},P2=class extends k2{Ah=bt[0]|0;Al=bt[1]|0;Bh=bt[2]|0;Bl=bt[3]|0;Ch=bt[4]|0;Cl=bt[5]|0;Dh=bt[6]|0;Dl=bt[7]|0;Eh=bt[8]|0;El=bt[9]|0;Fh=bt[10]|0;Fl=bt[11]|0;Gh=bt[12]|0;Gl=bt[13]|0;Hh=bt[14]|0;Hl=bt[15]|0;constructor(){super(64)}};var Tr=uc(()=>new C2,A2(1));var _o=uc(()=>new P2,A2(3));var L2=BigInt(0),R2=BigInt(1);function Vn(r,e=""){if(typeof r!="boolean"){let t=e&&`"${e}" `;throw new Error(t+"expected boolean, got type="+typeof r)}return r}function D5(r){if(typeof r=="bigint"){if(!Gu(r))throw new Error("positive bigint expected, got "+r)}else Dt(r);return r}function hc(r){let e=D5(r).toString(16);return e.length&1?"0"+e:e}function N5(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?L2:BigInt("0x"+r)}function Ai(r){return N5(Fn(r))}function hn(r){return N5(Fn(vs(ce(r)).reverse()))}function Yu(r,e){Dt(e),r=D5(r);let t=$n(r.toString(16).padStart(e*2,"0"));if(t.length!==e)throw new Error("number too large");return t}function pc(r,e){return Yu(r,e).reverse()}function vs(r){return Uint8Array.from(r)}var Gu=r=>typeof r=="bigint"&&L2<=r;function YA(r,e,t){return Gu(r)&&Gu(e)&&Gu(t)&&e<=r&&r<t}function Co(r,e,t,n){if(!YA(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function D2(r){let e;for(e=0;r>L2;r>>=R2,e+=1);return e}var mc=r=>(R2<<BigInt(r))-R2;function O5(r,e,t){if(Dt(r,"hashLen"),Dt(e,"qByteLen"),typeof t!="function")throw new Error("hmacFn must be a function");let n=m=>new Uint8Array(m),o=Uint8Array.of(),s=Uint8Array.of(0),i=Uint8Array.of(1),a=1e3,c=n(r),l=n(r),d=0,u=()=>{c.fill(1),l.fill(0),d=0},f=(...m)=>t(l,tr(c,...m)),h=(m=o)=>{l=f(s,m),c=f(),m.length!==0&&(l=f(i,m),c=f())},p=()=>{if(d++>=a)throw new Error("drbg: tried max amount of iterations");let m=0,w=[];for(;m<e;){c=f();let T=c.slice();w.push(T),m+=c.length}return tr(...w)};return(m,w)=>{u(),h(m);let T;for(;!(T=w(p()));)h();return u(),T}}function pn(r,e={},t={}){if(!r||typeof r!="object")throw new Error("expected valid options object");function n(s,i,a){let c=r[s];if(a&&c===void 0)return;let l=typeof c;if(l!==i||c===null)throw new Error(`param "${s}" is invalid: expected ${i}, got ${l}`)}let o=(s,i)=>Object.entries(s).forEach(([a,c])=>n(a,c,i));o(e,!1),o(t,!0)}function Ii(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 Gt=BigInt(0),ht=BigInt(1),Ss=BigInt(2),U5=BigInt(3),F5=BigInt(4),$5=BigInt(5),jA=BigInt(7),K5=BigInt(8),XA=BigInt(9),V5=BigInt(16);function qe(r,e){let t=r%e;return t>=Gt?t:e+t}function $e(r,e,t){let n=r;for(;e-- >Gt;)n*=n,n%=t;return n}function M5(r,e){if(r===Gt)throw new Error("invert: expected non-zero number");if(e<=Gt)throw new Error("invert: expected positive modulus, got "+e);let t=qe(r,e),n=e,o=Gt,s=ht,i=ht,a=Gt;for(;t!==Gt;){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!==ht)throw new Error("invert: does not exist");return qe(o,e)}function O2(r,e,t){if(!r.eql(r.sqr(e),t))throw new Error("Cannot find square root")}function H5(r,e){let t=(r.ORDER+ht)/F5,n=r.pow(e,t);return O2(r,n,e),n}function QA(r,e){let t=(r.ORDER-$5)/K5,n=r.mul(e,Ss),o=r.pow(n,t),s=r.mul(e,o),i=r.mul(r.mul(s,Ss),o),a=r.mul(s,r.sub(i,r.ONE));return O2(r,a,e),a}function ZA(r){let e=Ti(r),t=q5(r),n=t(e,e.neg(e.ONE)),o=t(e,n),s=t(e,e.neg(n)),i=(r+jA)/V5;return(a,c)=>{let l=a.pow(c,i),d=a.mul(l,n),u=a.mul(l,o),f=a.mul(l,s),h=a.eql(a.sqr(d),c),p=a.eql(a.sqr(u),c);l=a.cmov(l,d,h),d=a.cmov(f,u,p);let g=a.eql(a.sqr(d),c),m=a.cmov(l,d,g);return O2(a,m,c),m}}function q5(r){if(r<U5)throw new Error("sqrt is not defined for small field");let e=r-ht,t=0;for(;e%Ss===Gt;)e/=Ss,t++;let n=Ss,o=Ti(r);for(;B5(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1)return H5;let s=o.pow(n,e),i=(e+ht)/Ss;return function(c,l){if(c.is0(l))return l;if(B5(c,l)!==1)throw new Error("Cannot find square root");let d=t,u=c.mul(c.ONE,s),f=c.pow(l,e),h=c.pow(l,i);for(;!c.eql(f,c.ONE);){if(c.is0(f))return c.ZERO;let p=1,g=c.sqr(f);for(;!c.eql(g,c.ONE);)if(p++,g=c.sqr(g),p===d)throw new Error("Cannot find square root");let m=ht<<BigInt(d-p-1),w=c.pow(u,m);d=p,u=c.sqr(w),f=c.mul(f,u),h=c.mul(h,w)}return h}}function JA(r){return r%F5===U5?H5:r%K5===$5?QA:r%V5===XA?ZA(r):q5(r)}var W5=(r,e)=>(qe(r,e)&ht)===ht,eI=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function M2(r){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},t=eI.reduce((n,o)=>(n[o]="function",n),e);return pn(r,t),r}function tI(r,e,t){if(t<Gt)throw new Error("invalid exponent, negatives unsupported");if(t===Gt)return r.ONE;if(t===ht)return e;let n=r.ONE,o=e;for(;t>Gt;)t&ht&&(n=r.mul(n,o)),o=r.sqr(o),t>>=ht;return n}function gc(r,e,t=!1){let n=new Array(e.length).fill(t?r.ZERO:void 0),o=e.reduce((i,a,c)=>r.is0(a)?i:(n[c]=i,r.mul(i,a)),r.ONE),s=r.inv(o);return e.reduceRight((i,a,c)=>r.is0(a)?i:(n[c]=r.mul(i,n[c]),r.mul(i,a)),s),n}function B5(r,e){let t=(r.ORDER-ht)/Ss,n=r.pow(e,t),o=r.eql(n,r.ONE),s=r.eql(n,r.ZERO),i=r.eql(n,r.neg(r.ONE));if(!o&&!s&&!i)throw new Error("invalid Legendre symbol result");return o?1:s?0:-1}function rI(r,e){e!==void 0&&Dt(e);let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}var N2=class{ORDER;BITS;BYTES;isLE;ZERO=Gt;ONE=ht;_lengths;_sqrt;_mod;constructor(e,t={}){if(e<=Gt)throw new Error("invalid field: expected ORDER > 0, got "+e);let n;this.isLE=!1,t!=null&&typeof t=="object"&&(typeof t.BITS=="number"&&(n=t.BITS),typeof t.sqrt=="function"&&(this.sqrt=t.sqrt),typeof t.isLE=="boolean"&&(this.isLE=t.isLE),t.allowedLengths&&(this._lengths=t.allowedLengths?.slice()),typeof t.modFromBytes=="boolean"&&(this._mod=t.modFromBytes));let{nBitLength:o,nByteLength:s}=rI(e,n);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=s,this._sqrt=void 0,Object.preventExtensions(this)}create(e){return qe(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof e);return Gt<=e&&e<this.ORDER}is0(e){return e===Gt}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&ht)===ht}neg(e){return qe(-e,this.ORDER)}eql(e,t){return e===t}sqr(e){return qe(e*e,this.ORDER)}add(e,t){return qe(e+t,this.ORDER)}sub(e,t){return qe(e-t,this.ORDER)}mul(e,t){return qe(e*t,this.ORDER)}pow(e,t){return tI(this,e,t)}div(e,t){return qe(e*M5(t,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,t){return e+t}subN(e,t){return e-t}mulN(e,t){return e*t}inv(e){return M5(e,this.ORDER)}sqrt(e){return this._sqrt||(this._sqrt=JA(this.ORDER)),this._sqrt(this,e)}toBytes(e){return this.isLE?pc(e,this.BYTES):Yu(e,this.BYTES)}fromBytes(e,t=!1){ce(e);let{_lengths:n,BYTES:o,isLE:s,ORDER:i,_mod:a}=this;if(n){if(!n.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+n+" bytes, got "+e.length);let l=new Uint8Array(o);l.set(e,s?0:l.length-e.length),e=l}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let c=s?hn(e):Ai(e);if(a&&(c=qe(c,i)),!t&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return gc(this,e)}cmov(e,t,n){return n?t:e}};function Ti(r,e={}){return new N2(r,e)}function z5(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 B2(r){let e=z5(r);return e+Math.ceil(e/2)}function U2(r,e,t=!1){ce(r);let n=r.length,o=z5(e),s=B2(e);if(n<16||n<s||n>1024)throw new Error("expected "+s+"-1024 bytes of input, got "+n);let i=t?hn(r):Ai(r),a=qe(i,e-ht)+ht;return t?pc(a,o):Yu(a,o)}var _i=BigInt(0),As=BigInt(1);function yc(r,e){let t=e.negate();return r?t:e}function Is(r,e){let t=gc(r.Fp,e.map(n=>n.Z));return e.map((n,o)=>r.fromAffine(n.toAffine(t[o])))}function X5(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function F2(r,e){X5(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,s=mc(r),i=BigInt(r);return{windows:t,windowSize:n,mask:s,maxNumber:o,shiftBy:i}}function G5(r,e,t){let{windowSize:n,mask:o,maxNumber:s,shiftBy:i}=t,a=Number(r&o),c=r>>i;a>n&&(a-=s,c+=As);let l=e*n,d=l+Math.abs(a)-1,u=a===0,f=a<0,h=e%2!==0;return{nextN:c,offset:d,isZero:u,isNeg:f,isNegF:h,offsetF:l}}var $2=new WeakMap,Q5=new WeakMap;function K2(r){return Q5.get(r)||1}function Y5(r){if(r!==_i)throw new Error("invalid wNAF")}var Ci=class{BASE;ZERO;Fn;bits;constructor(e,t){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=t}_unsafeLadder(e,t,n=this.ZERO){let o=e;for(;t>_i;)t&As&&(n=n.add(o)),o=o.double(),t>>=As;return n}precomputeWindow(e,t){let{windows:n,windowSize:o}=F2(t,this.bits),s=[],i=e,a=i;for(let c=0;c<n;c++){a=i,s.push(a);for(let l=1;l<o;l++)a=a.add(i),s.push(a);i=a.double()}return s}wNAF(e,t,n){if(!this.Fn.isValid(n))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE,i=F2(e,this.bits);for(let a=0;a<i.windows;a++){let{nextN:c,offset:l,isZero:d,isNeg:u,isNegF:f,offsetF:h}=G5(n,a,i);n=c,d?s=s.add(yc(f,t[h])):o=o.add(yc(u,t[l]))}return Y5(n),{p:o,f:s}}wNAFUnsafe(e,t,n,o=this.ZERO){let s=F2(e,this.bits);for(let i=0;i<s.windows&&n!==_i;i++){let{nextN:a,offset:c,isZero:l,isNeg:d}=G5(n,i,s);if(n=a,!l){let u=t[c];o=o.add(d?u.negate():u)}}return Y5(n),o}getPrecomputes(e,t,n){let o=$2.get(t);return o||(o=this.precomputeWindow(t,e),e!==1&&(typeof n=="function"&&(o=n(o)),$2.set(t,o))),o}cached(e,t,n){let o=K2(e);return this.wNAF(o,this.getPrecomputes(o,e,n),t)}unsafe(e,t,n,o){let s=K2(e);return s===1?this._unsafeLadder(e,t,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,n),t,o)}createCache(e,t){X5(t,this.bits),Q5.set(e,t),$2.delete(e)}hasCache(e){return K2(e)!==1}};function Z5(r,e,t,n){let o=e,s=r.ZERO,i=r.ZERO;for(;t>_i||n>_i;)t&As&&(s=s.add(o)),n&As&&(i=i.add(o)),o=o.double(),t>>=As,n>>=As;return{p1:s,p2:i}}function j5(r,e,t){if(e){if(e.ORDER!==r)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return M2(e),e}else return Ti(r,{isLE:t})}function ju(r,e,t={},n){if(n===void 0&&(n=r==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${r} CURVE object`);for(let c of["p","n","h"]){let l=e[c];if(!(typeof l=="bigint"&&l>_i))throw new Error(`CURVE.${c} must be positive bigint`)}let o=j5(e.p,t.Fp,n),s=j5(e.n,t.Fn,n),a=["Gx","Gy","a",r==="weierstrass"?"b":"d"];for(let c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}function ki(r,e){return function(n){let o=r(n);return{secretKey:o,publicKey:e(o)}}}var ko=BigInt(0),pt=BigInt(1),V2=BigInt(2),nI=BigInt(8);function oI(r,e,t,n){let o=r.sqr(t),s=r.sqr(n),i=r.add(r.mul(e.a,o),s),a=r.add(r.ONE,r.mul(e.d,r.mul(o,s)));return r.eql(i,a)}function J5(r,e={}){let t=ju("edwards",r,e,e.FpFnLE),{Fp:n,Fn:o}=t,s=t.CURVE,{h:i}=s;pn(e,{},{uvRatio:"function"});let a=V2<<BigInt(o.BYTES*8)-pt,c=m=>n.create(m),l=e.uvRatio||((m,w)=>{try{return{isValid:!0,value:n.sqrt(n.div(m,w))}}catch{return{isValid:!1,value:ko}}});if(!oI(n,s,s.Gx,s.Gy))throw new Error("bad curve params: generator point");function d(m,w,T=!1){let I=T?pt:ko;return Co("coordinate "+m,w,I,a),w}function u(m){if(!(m instanceof p))throw new Error("EdwardsPoint expected")}let f=Ii((m,w)=>{let{X:T,Y:I,Z:D}=m,F=m.is0();w==null&&(w=F?nI:n.inv(D));let $=c(T*w),z=c(I*w),S=n.mul(D,w);if(F)return{x:ko,y:pt};if(S!==pt)throw new Error("invZ was invalid");return{x:$,y:z}}),h=Ii(m=>{let{a:w,d:T}=s;if(m.is0())throw new Error("bad point: ZERO");let{X:I,Y:D,Z:F,T:$}=m,z=c(I*I),S=c(D*D),x=c(F*F),L=c(x*x),B=c(z*w),P=c(x*c(B+S)),v=c(L+c(T*c(z*S)));if(P!==v)throw new Error("bad point: equation left != right (1)");let E=c(I*D),b=c(F*$);if(E!==b)throw new Error("bad point: equation left != right (2)");return!0});class p{static BASE=new p(s.Gx,s.Gy,pt,c(s.Gx*s.Gy));static ZERO=new p(ko,pt,pt,ko);static Fp=n;static Fn=o;X;Y;Z;T;constructor(w,T,I,D){this.X=d("x",w),this.Y=d("y",T),this.Z=d("z",I,!0),this.T=d("t",D),Object.freeze(this)}static CURVE(){return s}static fromAffine(w){if(w instanceof p)throw new Error("extended point not allowed");let{x:T,y:I}=w||{};return d("x",T),d("y",I),new p(T,I,pt,c(T*I))}static fromBytes(w,T=!1){let I=n.BYTES,{a:D,d:F}=s;w=vs(ce(w,I,"point")),Vn(T,"zip215");let $=vs(w),z=w[I-1];$[I-1]=z&-129;let S=hn($),x=T?a:n.ORDER;Co("point.y",S,ko,x);let L=c(S*S),B=c(L-pt),P=c(F*L-D),{isValid:v,value:E}=l(B,P);if(!v)throw new Error("bad point: invalid y coordinate");let b=(E&pt)===pt,_=(z&128)!==0;if(!T&&E===ko&&_)throw new Error("bad point: x=0 and x_0=1");return _!==b&&(E=c(-E)),p.fromAffine({x:E,y:S})}static fromHex(w,T=!1){return p.fromBytes($n(w),T)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(w=8,T=!0){return g.createCache(this,w),T||this.multiply(V2),this}assertValidity(){h(this)}equals(w){u(w);let{X:T,Y:I,Z:D}=this,{X:F,Y:$,Z:z}=w,S=c(T*z),x=c(F*D),L=c(I*z),B=c($*D);return S===x&&L===B}is0(){return this.equals(p.ZERO)}negate(){return new p(c(-this.X),this.Y,this.Z,c(-this.T))}double(){let{a:w}=s,{X:T,Y:I,Z:D}=this,F=c(T*T),$=c(I*I),z=c(V2*c(D*D)),S=c(w*F),x=T+I,L=c(c(x*x)-F-$),B=S+$,P=B-z,v=S-$,E=c(L*P),b=c(B*v),_=c(L*v),M=c(P*B);return new p(E,b,M,_)}add(w){u(w);let{a:T,d:I}=s,{X:D,Y:F,Z:$,T:z}=this,{X:S,Y:x,Z:L,T:B}=w,P=c(D*S),v=c(F*x),E=c(z*I*B),b=c($*L),_=c((D+F)*(S+x)-P-v),M=b-E,O=b+E,k=c(v-T*P),U=c(_*M),K=c(O*k),W=c(_*k),we=c(M*O);return new p(U,K,we,W)}subtract(w){return this.add(w.negate())}multiply(w){if(!o.isValidNot0(w))throw new Error("invalid scalar: expected 1 <= sc < curve.n");let{p:T,f:I}=g.cached(this,w,D=>Is(p,D));return Is(p,[T,I])[0]}multiplyUnsafe(w,T=p.ZERO){if(!o.isValid(w))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return w===ko?p.ZERO:this.is0()||w===pt?this:g.unsafe(this,w,I=>Is(p,I),T)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}isTorsionFree(){return g.unsafe(this,s.n).is0()}toAffine(w){return f(this,w)}clearCofactor(){return i===pt?this:this.multiplyUnsafe(i)}toBytes(){let{x:w,y:T}=this.toAffine(),I=n.toBytes(T);return I[I.length-1]|=w&pt?128:0,I}toHex(){return Fn(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let g=new Ci(p,o.BITS);return p.BASE.precompute(8),p}function e8(r,e,t={}){if(typeof e!="function")throw new Error('"hash" function param is required');pn(t,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});let{prehash:n}=t,{BASE:o,Fp:s,Fn:i}=r,a=t.randomBytes||dn,c=t.adjustScalarBytes||(S=>S),l=t.domain||((S,x,L)=>{if(Vn(L,"phflag"),x.length||L)throw new Error("Contexts/pre-hash are not supported");return S});function d(S){return i.create(hn(S))}function u(S){let x=I.secretKey;ce(S,I.secretKey,"secretKey");let L=ce(e(S),2*x,"hashedSecretKey"),B=c(L.slice(0,x)),P=L.slice(x,2*x),v=d(B);return{head:B,prefix:P,scalar:v}}function f(S){let{head:x,prefix:L,scalar:B}=u(S),P=o.multiply(B),v=P.toBytes();return{head:x,prefix:L,scalar:B,point:P,pointBytes:v}}function h(S){return f(S).pointBytes}function p(S=Uint8Array.of(),...x){let L=tr(...x);return d(e(l(L,ce(S,void 0,"context"),!!n)))}function g(S,x,L={}){S=ce(S,void 0,"message"),n&&(S=n(S));let{prefix:B,scalar:P,pointBytes:v}=f(x),E=p(L.context,B,S),b=o.multiply(E).toBytes(),_=p(L.context,b,v,S),M=i.create(E+_*P);if(!i.isValid(M))throw new Error("sign failed: invalid s");let O=tr(b,i.toBytes(M));return ce(O,I.signature,"result")}let m={zip215:!0};function w(S,x,L,B=m){let{context:P,zip215:v}=B,E=I.signature;S=ce(S,E,"signature"),x=ce(x,void 0,"message"),L=ce(L,I.publicKey,"publicKey"),v!==void 0&&Vn(v,"zip215"),n&&(x=n(x));let b=E/2,_=S.subarray(0,b),M=hn(S.subarray(b,E)),O,k,U;try{O=r.fromBytes(L,v),k=r.fromBytes(_,v),U=o.multiplyUnsafe(M)}catch{return!1}if(!v&&O.isSmallOrder())return!1;let K=p(P,k.toBytes(),O.toBytes(),x);return k.add(O.multiplyUnsafe(K)).subtract(U).clearCofactor().is0()}let T=s.BYTES,I={secretKey:T,publicKey:T,signature:2*T,seed:T};function D(S=a(I.seed)){return ce(S,I.seed,"seed")}function F(S){return ys(S)&&S.length===i.BYTES}function $(S,x){try{return!!r.fromBytes(S,x)}catch{return!1}}let z={getExtendedPublicKey:f,randomSecretKey:D,isValidSecretKey:F,isValidPublicKey:$,toMontgomery(S){let{y:x}=r.fromBytes(S),L=I.publicKey,B=L===32;if(!B&&L!==57)throw new Error("only defined for 25519 and 448");let P=B?s.div(pt+x,pt-x):s.div(x-pt,x+pt);return s.toBytes(P)},toMontgomerySecret(S){let x=I.secretKey;ce(S,x);let L=e(S.subarray(0,x));return c(L).subarray(0,x)}};return Object.freeze({keygen:ki(D,h),getPublicKey:h,sign:g,verify:w,utils:z,Point:r,lengths:I})}var wc=BigInt(0),Pi=BigInt(1),Xu=BigInt(2);function sI(r){return pn(r,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...r})}function t8(r){let e=sI(r),{P:t,type:n,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=e,a=n==="x25519";if(!a&&n!=="x448")throw new Error("invalid type");let c=i||dn,l=a?255:448,d=a?32:56,u=BigInt(a?9:5),f=BigInt(a?121665:39081),h=a?Xu**BigInt(254):Xu**BigInt(447),p=a?BigInt(8)*Xu**BigInt(251)-Pi:BigInt(4)*Xu**BigInt(445)-Pi,g=h+p+Pi,m=E=>qe(E,t),w=T(u);function T(E){return pc(m(E),d)}function I(E){let b=vs(ce(E,d,"uCoordinate"));return a&&(b[31]&=127),m(hn(b))}function D(E){return hn(o(vs(ce(E,d,"scalar"))))}function F(E,b){let _=L(I(b),D(E));if(_===wc)throw new Error("invalid private or public key received");return T(_)}function $(E){return F(E,w)}let z=$,S=F;function x(E,b,_){let M=m(E*(b-_));return b=m(b-M),_=m(_+M),{x_2:b,x_3:_}}function L(E,b){Co("u",E,wc,t),Co("scalar",b,h,g);let _=b,M=E,O=Pi,k=wc,U=E,K=Pi,W=wc;for(let pe=BigInt(l-1);pe>=wc;pe--){let ue=_>>pe&Pi;W^=ue,{x_2:O,x_3:U}=x(W,O,U),{x_2:k,x_3:K}=x(W,k,K),W=ue;let be=O+k,Re=m(be*be),Je=O-k,Ee=m(Je*Je),it=Re-Ee,ui=U+K,Eu=U-K,Wa=m(Eu*be),x6=m(ui*Je),v6=Wa+x6,S6=Wa-x6;U=m(v6*v6),K=m(M*m(S6*S6)),O=m(Re*Ee),k=m(it*(Re+m(f*it)))}({x_2:O,x_3:U}=x(W,O,U)),{x_2:k,x_3:K}=x(W,k,K);let we=s(k);return m(O*we)}let B={secretKey:d,publicKey:d,seed:d},P=(E=c(d))=>(ce(E,B.seed,"seed"),E),v={randomSecretKey:P};return Object.freeze({keygen:ki(P,z),getSharedSecret:S,getPublicKey:z,scalarMult:F,scalarMultBase:$,utils:v,GuBytes:w.slice(),lengths:B})}var iI=BigInt(1),r8=BigInt(2),aI=BigInt(3),cI=BigInt(5),lI=BigInt(8),Qu=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),uI={p:Qu,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:lI,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function o8(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=Qu,a=r*r%s*r%s,c=$e(a,r8,s)*a%s,l=$e(c,iI,s)*r%s,d=$e(l,cI,s)*l%s,u=$e(d,e,s)*d%s,f=$e(u,t,s)*u%s,h=$e(f,n,s)*f%s,p=$e(h,o,s)*h%s,g=$e(p,o,s)*h%s,m=$e(g,e,s)*d%s;return{pow_p_5_8:$e(m,r8,s)*r%s,b2:a}}function s8(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}var n8=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function dI(r,e){let t=Qu,n=qe(e*e*e,t),o=qe(n*n*e,t),s=o8(r*o).pow_p_5_8,i=qe(r*n*s,t),a=qe(e*i*i,t),c=i,l=qe(i*n8,t),d=a===r,u=a===qe(-r,t),f=a===qe(-r*n8,t);return d&&(i=c),(u||f)&&(i=l),W5(i,t)&&(i=qe(-i,t)),{isValid:d||u,value:i}}var fI=J5(uI,{uvRatio:dI});function hI(r){return e8(fI,_o,Object.assign({adjustScalarBytes:s8},r))}var bc=hI({});var Ec=(()=>{let r=Qu;return t8({P:r,type:"x25519",powPminus2:e=>{let{pow_p_5_8:t,b2:n}=o8(e);return qe($e(t,aI,r)*n,r)},adjustScalarBytes:s8})})();var Ts=32,fr=64,H2=32;var Ri,i8=(async()=>{try{return await nt.get().subtle.generateKey({name:"Ed25519"},!0,["sign","verify"]),!0}catch{return!1}})();function a8(){let r=bc.utils.randomSecretKey(),e=bc.getPublicKey(r);return{privateKey:wI(r,e),publicKey:e}}async function pI(r,e){let t;r.length===fr?t=r.subarray(0,32):t=r;let n={crv:"Ed25519",kty:"OKP",x:R(r.subarray(32),"base64url"),d:R(t,"base64url"),ext:!0,key_ops:["sign"]},o=await nt.get().subtle.importKey("jwk",n,{name:"Ed25519"},!0,["sign"]),s=await nt.get().subtle.sign({name:"Ed25519"},o,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(s,0,s.byteLength)}function mI(r,e){let t=r.subarray(0,H2);return bc.sign(e instanceof Uint8Array?e:e.subarray(),t)}async function c8(r,e){return Ri==null&&(Ri=await i8),Ri?pI(r,e):mI(r,e)}async function gI(r,e,t){if(r.buffer instanceof ArrayBuffer){let n=await nt.get().subtle.importKey("raw",r.buffer,{name:"Ed25519"},!1,["verify"]);return await nt.get().subtle.verify({name:"Ed25519"},n,e,t instanceof Uint8Array?t:t.subarray())}throw new TypeError("WebCrypto does not support SharedArrayBuffer for Ed25519 keys")}function yI(r,e,t){return bc.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}async function l8(r,e,t){return Ri==null&&(Ri=await i8),Ri?gI(r,e,t):yI(r,e,t)}function wI(r,e){let t=new Uint8Array(fr);for(let n=0;n<H2;n++)t[n]=r[n],t[H2+n]=e[n];return t}function Li(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var xc=class{type="Ed25519";raw;constructor(e){this.raw=Ni(e,Ts)}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){n?.signal?.throwIfAborted();let o=l8(this.raw,t,e);return Li(o)?o.then(s=>(n?.signal?.throwIfAborted(),s)):o}},Di=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Ni(e,fr),this.publicKey=new xc(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){t?.signal?.throwIfAborted();let n=c8(this.raw,e);return Li(n)?n.then(o=>(t?.signal?.throwIfAborted(),o)):(t?.signal?.throwIfAborted(),n)}};function q2(r){if(r.length>fr){r=Ni(r,fr+Ts);let n=r.subarray(0,fr),o=r.subarray(fr,r.length);return new Di(n,o)}r=Ni(r,fr);let e=r.subarray(0,fr),t=r.subarray(Ts);return new Di(e,t)}function W2(r){return r=Ni(r,Ts),new xc(r)}async function d8(){let{privateKey:r,publicKey:e}=a8();return new Di(r,e)}function Ni(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new A(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var bI=Math.pow(2,7),EI=Math.pow(2,14),xI=Math.pow(2,21),z2=Math.pow(2,28),G2=Math.pow(2,35),Y2=Math.pow(2,42),j2=Math.pow(2,49),Te=128,Ot=127;function he(r){if(r<bI)return 1;if(r<EI)return 2;if(r<xI)return 3;if(r<z2)return 4;if(r<G2)return 5;if(r<Y2)return 6;if(r<j2)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Oi(r,e,t=0){switch(he(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function vI(r,e,t=0){switch(he(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function X2(r,e){let t=r[e],n=0;if(n+=t&Ot,t<Te||(t=r[e+1],n+=(t&Ot)<<7,t<Te)||(t=r[e+2],n+=(t&Ot)<<14,t<Te)||(t=r[e+3],n+=(t&Ot)<<21,t<Te)||(t=r[e+4],n+=(t&Ot)*z2,t<Te)||(t=r[e+5],n+=(t&Ot)*G2,t<Te)||(t=r[e+6],n+=(t&Ot)*Y2,t<Te)||(t=r[e+7],n+=(t&Ot)*j2,t<Te))return n;throw new RangeError("Could not decode varint")}function SI(r,e){let t=r.get(e),n=0;if(n+=t&Ot,t<Te||(t=r.get(e+1),n+=(t&Ot)<<7,t<Te)||(t=r.get(e+2),n+=(t&Ot)<<14,t<Te)||(t=r.get(e+3),n+=(t&Ot)<<21,t<Te)||(t=r.get(e+4),n+=(t&Ot)*z2,t<Te)||(t=r.get(e+5),n+=(t&Ot)*G2,t<Te)||(t=r.get(e+6),n+=(t&Ot)*Y2,t<Te)||(t=r.get(e+7),n+=(t&Ot)*j2,t<Te))return n;throw new RangeError("Could not decode varint")}function Mt(r,e,t=0){return e==null&&(e=Ge(he(r))),e instanceof Uint8Array?Oi(r,e,t):vI(r,e,t)}function hr(r,e=0){return r instanceof Uint8Array?X2(r,e):SI(r,e)}var Q2=new Float32Array([-0]),Po=new Uint8Array(Q2.buffer);function f8(r,e,t){Q2[0]=r,e[t]=Po[0],e[t+1]=Po[1],e[t+2]=Po[2],e[t+3]=Po[3]}function h8(r,e){return Po[0]=r[e],Po[1]=r[e+1],Po[2]=r[e+2],Po[3]=r[e+3],Q2[0]}var Z2=new Float64Array([-0]),Bt=new Uint8Array(Z2.buffer);function p8(r,e,t){Z2[0]=r,e[t]=Bt[0],e[t+1]=Bt[1],e[t+2]=Bt[2],e[t+3]=Bt[3],e[t+4]=Bt[4],e[t+5]=Bt[5],e[t+6]=Bt[6],e[t+7]=Bt[7]}function m8(r,e){return Bt[0]=r[e],Bt[1]=r[e+1],Bt[2]=r[e+2],Bt[3]=r[e+3],Bt[4]=r[e+4],Bt[5]=r[e+5],Bt[6]=r[e+6],Bt[7]=r[e+7],Z2[0]}var AI=BigInt(Number.MAX_SAFE_INTEGER),II=BigInt(Number.MIN_SAFE_INTEGER),pr=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 _s;if(e<AI&&e>II)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>g8&&(o=0n,++n>g8&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return _s;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):_s}},_s=new pr(0,0);_s.toBigInt=function(){return 0n};_s.zzEncode=_s.zzDecode=function(){return this};_s.length=function(){return 1};var g8=4294967296n;function y8(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 w8(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 J2(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 Hr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Zu(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var em=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,Hr(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 Hr(this,4);return Zu(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Hr(this,4);return Zu(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Hr(this,4);let e=h8(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Hr(this,4);let e=m8(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 Hr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return w8(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Hr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Hr(this);while((this.buf[this.pos++]&128)!==0);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 pr(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 Hr(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 Hr(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 Hr(this,8);let e=Zu(this.buf,this.pos+=4),t=Zu(this.buf,this.pos+=4);return new pr(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=X2(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 tm(r){return new em(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=tm(r);return e.decode(n,void 0,t)}function rm(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return Ge(i);o+i>e&&(n=Ge(e),o=0);let a=n.subarray(o,o+=i);return(o&7)!==0&&(o=(o|7)+1),a}}var Cs=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function nm(){}var sm=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},TI=rm();function _I(r){return globalThis.Buffer!=null?Ge(r):TI(r)}var Sc=class{len;head;tail;states;constructor(){this.len=0,this.head=new Cs(nm,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Cs(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new im((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(Ju,10,pr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=pr.fromBigInt(e);return this._push(Ju,t.length(),t)}uint64Number(e){return this._push(Oi,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=pr.fromBigInt(e).zzEncode();return this._push(Ju,t.length(),t)}sint64Number(e){let t=pr.fromNumber(e).zzEncode();return this._push(Ju,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(om,1,e?1:0)}fixed32(e){return this._push(vc,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=pr.fromBigInt(e);return this._push(vc,4,t.lo)._push(vc,4,t.hi)}fixed64Number(e){let t=pr.fromNumber(e);return this._push(vc,4,t.lo)._push(vc,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(f8,4,e)}double(e){return this._push(p8,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(om,1,0):this.uint32(t)._push(kI,t,e)}string(e){let t=y8(e);return t!==0?this.uint32(t)._push(J2,t,e):this._push(om,1,0)}fork(){return this.states=new sm(this),this.head=this.tail=new Cs(nm,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 Cs(nm,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=_I(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function om(r,e,t){e[t]=r&255}function CI(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var im=class extends Cs{next;constructor(e,t){super(CI,e,t),this.next=void 0}};function Ju(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 vc(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 kI(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Sc.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(PI,e,r),this},Sc.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(RI,e,r),this});function PI(r,e,t){e.set(r,t)}function RI(r,e,t){r.length<40?J2(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function am(){return new Sc}function re(r,e){let t=am();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Mi;(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"})(Mi||(Mi={}));function ed(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function We(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 ed("enum",Mi.VARINT,t,n)}function ne(r,e){return ed("message",Mi.LENGTH_DELIMITED,r,e)}var Ne=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Ac=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Be;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(Be||(Be={}));var cm;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(cm||(cm={}));(function(r){r.codec=()=>We(cm)})(Be||(Be={}));var mn;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Be.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=Be.codec().decode(t);break}case 2:{s.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(mn||(mn={}));var Ic;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Be.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=Be.codec().decode(t);break}case 2:{s.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ic||(Ic={}));function Yt(r){if(isNaN(r)||r<=0)throw new A("random bytes length must be a Number bigger than 0");return dn(r)}var _c={};et(_c,{MAX_RSA_KEY_SIZE:()=>lm,generateRSAKeyPair:()=>wm,jwkToJWKKeyPair:()=>S8,jwkToPkcs1:()=>OI,jwkToPkix:()=>hm,jwkToRSAPrivateKey:()=>ym,pkcs1MessageToJwk:()=>dm,pkcs1MessageToRSAPrivateKey:()=>td,pkcs1ToJwk:()=>NI,pkcs1ToRSAPrivateKey:()=>pm,pkixMessageToJwk:()=>fm,pkixMessageToRSAPublicKey:()=>gm,pkixToJwk:()=>MI,pkixToRSAPublicKey:()=>mm});var Bi=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=_c.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return G.createV1(114,this._multihash)}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){return v8(this.jwk,t,e,n)}},Tc=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=_c.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){return x8(this.jwk,e,t)}};var lm=8192,um=18,LI=1062,DI=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function NI(r){let e=Ir(r);return dm(e)}function dm(r){return{n:R(r[1],"base64url"),e:R(r[2],"base64url"),d:R(r[3],"base64url"),p:R(r[4],"base64url"),q:R(r[5],"base64url"),dp:R(r[6],"base64url"),dq:R(r[7],"base64url"),qi:R(r[8],"base64url"),kty:"RSA"}}function OI(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 A("JWK was missing components");return Kr([zt(Uint8Array.from([0])),zt(C(r.n,"base64url")),zt(C(r.e,"base64url")),zt(C(r.d,"base64url")),zt(C(r.p,"base64url")),zt(C(r.q,"base64url")),zt(C(r.dp,"base64url")),zt(C(r.dq,"base64url")),zt(C(r.qi,"base64url"))]).subarray()}function MI(r){let e=Ir(r,{offset:0});return fm(e)}function fm(r){let e=Ir(r[1],{offset:0});return{kty:"RSA",n:R(e[0],"base64url"),e:R(e[1],"base64url")}}function hm(r){if(r.n==null||r.e==null)throw new A("JWK was missing components");return Kr([DI,lc(Kr([zt(C(r.n,"base64url")),zt(C(r.e,"base64url"))]))]).subarray()}function pm(r){let e=Ir(r);return td(e)}function td(r){let e=dm(r);return ym(e)}function mm(r,e){if(r.byteLength>=LI)throw new Nn("Key size is too large");let t=Ir(r,{offset:0});return gm(t,r,e)}function gm(r,e,t){let n=fm(r);if(t==null){let o=Tr(mn.encode({Type:Be.RSA,Data:e}));t=Wt(um,o)}return new Bi(n,t)}function ym(r){if(I8(r)>lm)throw new A("Key size is too large");let e=S8(r),t=Tr(mn.encode({Type:Be.RSA,Data:hm(e.publicKey)})),n=Wt(um,t);return new Tc(e.privateKey,new Bi(e.publicKey,n))}async function wm(r){if(r>lm)throw new A("Key size is too large");let e=await A8(r),t=Tr(mn.encode({Type:Be.RSA,Data:hm(e.publicKey)})),n=Wt(um,t);return new Tc(e.privateKey,new Bi(e.publicKey,n))}function S8(r){if(r==null)throw new A("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function A8(r,e){let t=await nt.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]);e?.signal?.throwIfAborted();let n=await BI(t,e);return{privateKey:n[0],publicKey:n[1]}}async function x8(r,e,t){let n=await nt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]);t?.signal?.throwIfAborted();let o=await nt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},n,e instanceof Uint8Array?e:e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function v8(r,e,t,n){let o=await nt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);n?.signal?.throwIfAborted();let s=await nt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},o,e,t instanceof Uint8Array?t:t.subarray());return n?.signal?.throwIfAborted(),s}async function BI(r,e){if(r.privateKey==null||r.publicKey==null)throw new A("Private and public key are required");let t=await Promise.all([nt.get().subtle.exportKey("jwk",r.privateKey),nt.get().subtle.exportKey("jwk",r.publicKey)]);return e?.signal?.throwIfAborted(),t}function I8(r){if(r.kty!=="RSA")throw new A("invalid key type");if(r.n==null)throw new A("invalid key modulus");return C(r.n,"base64url").length*8}var rd=class{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(e,t){if(Un(e),ce(t,void 0,"key"),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 n=this.blockLen,o=new Uint8Array(n);o.set(t.length>n?e.create().update(t).digest():t);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),Nt(o)}update(e){return Si(this),this.iHash.update(e),this}digestInto(e){Si(this),ce(e,this.outputLen,"output"),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||=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}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Ro=(r,e,t)=>new rd(r,e).update(t).digest();Ro.create=(r,e)=>new rd(r,e);var T8=(r,e)=>(r+(r>=0?e:-e)/_8)/e;function UI(r,e,t){let[[n,o],[s,i]]=e,a=T8(i*r,t),c=T8(-o*r,t),l=r-a*n-c*s,d=-a*o-c*i,u=l<qn,f=d<qn;u&&(l=-l),f&&(d=-d);let h=mc(Math.ceil(D2(t)/2))+Ui;if(l<qn||l>=h||d<qn||d>=h)throw new Error("splitScalar (endomorphism): failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}function Em(r){if(!["compact","recovered","der"].includes(r))throw new Error('Signature format must be "compact", "recovered", or "der"');return r}function bm(r,e){let t={};for(let n of Object.keys(e))t[n]=r[n]===void 0?e[n]:r[n];return Vn(t.lowS,"lowS"),Vn(t.prehash,"prehash"),t.format!==void 0&&Em(t.format),t}var xm=class extends Error{constructor(e=""){super(e)}},Lo={Err:xm,_tlv:{encode:(r,e)=>{let{Err:t}=Lo;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=hc(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let s=n>127?hc(o.length/2|128):"";return hc(r)+s+o+e},decode(r,e){let{Err:t}=Lo,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}=Lo;if(r<qn)throw new e("integer: negative integers are not allowed");let t=hc(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return t},decode(r){let{Err:e}=Lo;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 Ai(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Lo,o=ce(r,void 0,"signature"),{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}=Lo,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),s=n+o;return e.encode(48,s)}},qn=BigInt(0),Ui=BigInt(1),_8=BigInt(2),nd=BigInt(3),FI=BigInt(4);function C8(r,e={}){let t=ju("weierstrass",r,e),{Fp:n,Fn:o}=t,s=t.CURVE,{h:i,n:a}=s;pn(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object"});let{endo:c}=e;if(c&&(!n.is0(s.a)||typeof c.beta!="bigint"||!Array.isArray(c.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let l=P8(n,o);function d(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function u(P,v,E){let{x:b,y:_}=v.toAffine(),M=n.toBytes(b);if(Vn(E,"isCompressed"),E){d();let O=!n.isOdd(_);return tr(k8(O),M)}else return tr(Uint8Array.of(4),M,n.toBytes(_))}function f(P){ce(P,void 0,"Point");let{publicKey:v,publicKeyUncompressed:E}=l,b=P.length,_=P[0],M=P.subarray(1);if(b===v&&(_===2||_===3)){let O=n.fromBytes(M);if(!n.isValid(O))throw new Error("bad point: is not on curve, wrong x");let k=g(O),U;try{U=n.sqrt(k)}catch(we){let pe=we instanceof Error?": "+we.message:"";throw new Error("bad point: is not on curve, sqrt error"+pe)}d();let K=n.isOdd(U);return(_&1)===1!==K&&(U=n.neg(U)),{x:O,y:U}}else if(b===E&&_===4){let O=n.BYTES,k=n.fromBytes(M.subarray(0,O)),U=n.fromBytes(M.subarray(O,O*2));if(!m(k,U))throw new Error("bad point: is not on curve");return{x:k,y:U}}else throw new Error(`bad point: got length ${b}, expected compressed=${v} or uncompressed=${E}`)}let h=e.toBytes||u,p=e.fromBytes||f;function g(P){let v=n.sqr(P),E=n.mul(v,P);return n.add(n.add(E,n.mul(P,s.a)),s.b)}function m(P,v){let E=n.sqr(v),b=g(P);return n.eql(E,b)}if(!m(s.Gx,s.Gy))throw new Error("bad curve params: generator point");let w=n.mul(n.pow(s.a,nd),FI),T=n.mul(n.sqr(s.b),BigInt(27));if(n.is0(n.add(w,T)))throw new Error("bad curve params: a or b");function I(P,v,E=!1){if(!n.isValid(v)||E&&n.is0(v))throw new Error(`bad point coordinate ${P}`);return v}function D(P){if(!(P instanceof x))throw new Error("Weierstrass Point expected")}function F(P){if(!c||!c.basises)throw new Error("no endo");return UI(P,c.basises,o.ORDER)}let $=Ii((P,v)=>{let{X:E,Y:b,Z:_}=P;if(n.eql(_,n.ONE))return{x:E,y:b};let M=P.is0();v==null&&(v=M?n.ONE:n.inv(_));let O=n.mul(E,v),k=n.mul(b,v),U=n.mul(_,v);if(M)return{x:n.ZERO,y:n.ZERO};if(!n.eql(U,n.ONE))throw new Error("invZ was invalid");return{x:O,y:k}}),z=Ii(P=>{if(P.is0()){if(e.allowInfinityPoint&&!n.is0(P.Y))return;throw new Error("bad point: ZERO")}let{x:v,y:E}=P.toAffine();if(!n.isValid(v)||!n.isValid(E))throw new Error("bad point: x or y not field elements");if(!m(v,E))throw new Error("bad point: equation left != right");if(!P.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function S(P,v,E,b,_){return E=new x(n.mul(E.X,P),E.Y,E.Z),v=yc(b,v),E=yc(_,E),v.add(E)}class x{static BASE=new x(s.Gx,s.Gy,n.ONE);static ZERO=new x(n.ZERO,n.ONE,n.ZERO);static Fp=n;static Fn=o;X;Y;Z;constructor(v,E,b){this.X=I("x",v),this.Y=I("y",E,!0),this.Z=I("z",b),Object.freeze(this)}static CURVE(){return s}static fromAffine(v){let{x:E,y:b}=v||{};if(!v||!n.isValid(E)||!n.isValid(b))throw new Error("invalid affine point");if(v instanceof x)throw new Error("projective point not allowed");return n.is0(E)&&n.is0(b)?x.ZERO:new x(E,b,n.ONE)}static fromBytes(v){let E=x.fromAffine(p(ce(v,void 0,"point")));return E.assertValidity(),E}static fromHex(v){return x.fromBytes($n(v))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(v=8,E=!0){return B.createCache(this,v),E||this.multiply(nd),this}assertValidity(){z(this)}hasEvenY(){let{y:v}=this.toAffine();if(!n.isOdd)throw new Error("Field doesn't support isOdd");return!n.isOdd(v)}equals(v){D(v);let{X:E,Y:b,Z:_}=this,{X:M,Y:O,Z:k}=v,U=n.eql(n.mul(E,k),n.mul(M,_)),K=n.eql(n.mul(b,k),n.mul(O,_));return U&&K}negate(){return new x(this.X,n.neg(this.Y),this.Z)}double(){let{a:v,b:E}=s,b=n.mul(E,nd),{X:_,Y:M,Z:O}=this,k=n.ZERO,U=n.ZERO,K=n.ZERO,W=n.mul(_,_),we=n.mul(M,M),pe=n.mul(O,O),ue=n.mul(_,M);return ue=n.add(ue,ue),K=n.mul(_,O),K=n.add(K,K),k=n.mul(v,K),U=n.mul(b,pe),U=n.add(k,U),k=n.sub(we,U),U=n.add(we,U),U=n.mul(k,U),k=n.mul(ue,k),K=n.mul(b,K),pe=n.mul(v,pe),ue=n.sub(W,pe),ue=n.mul(v,ue),ue=n.add(ue,K),K=n.add(W,W),W=n.add(K,W),W=n.add(W,pe),W=n.mul(W,ue),U=n.add(U,W),pe=n.mul(M,O),pe=n.add(pe,pe),W=n.mul(pe,ue),k=n.sub(k,W),K=n.mul(pe,we),K=n.add(K,K),K=n.add(K,K),new x(k,U,K)}add(v){D(v);let{X:E,Y:b,Z:_}=this,{X:M,Y:O,Z:k}=v,U=n.ZERO,K=n.ZERO,W=n.ZERO,we=s.a,pe=n.mul(s.b,nd),ue=n.mul(E,M),be=n.mul(b,O),Re=n.mul(_,k),Je=n.add(E,b),Ee=n.add(M,O);Je=n.mul(Je,Ee),Ee=n.add(ue,be),Je=n.sub(Je,Ee),Ee=n.add(E,_);let it=n.add(M,k);return Ee=n.mul(Ee,it),it=n.add(ue,Re),Ee=n.sub(Ee,it),it=n.add(b,_),U=n.add(O,k),it=n.mul(it,U),U=n.add(be,Re),it=n.sub(it,U),W=n.mul(we,Ee),U=n.mul(pe,Re),W=n.add(U,W),U=n.sub(be,W),W=n.add(be,W),K=n.mul(U,W),be=n.add(ue,ue),be=n.add(be,ue),Re=n.mul(we,Re),Ee=n.mul(pe,Ee),be=n.add(be,Re),Re=n.sub(ue,Re),Re=n.mul(we,Re),Ee=n.add(Ee,Re),ue=n.mul(be,Ee),K=n.add(K,ue),ue=n.mul(it,Ee),U=n.mul(Je,U),U=n.sub(U,ue),ue=n.mul(Je,be),W=n.mul(it,W),W=n.add(W,ue),new x(U,K,W)}subtract(v){return this.add(v.negate())}is0(){return this.equals(x.ZERO)}multiply(v){let{endo:E}=e;if(!o.isValidNot0(v))throw new Error("invalid scalar: out of range");let b,_,M=O=>B.cached(this,O,k=>Is(x,k));if(E){let{k1neg:O,k1:k,k2neg:U,k2:K}=F(v),{p:W,f:we}=M(k),{p:pe,f:ue}=M(K);_=we.add(ue),b=S(E.beta,W,pe,O,U)}else{let{p:O,f:k}=M(v);b=O,_=k}return Is(x,[b,_])[0]}multiplyUnsafe(v){let{endo:E}=e,b=this;if(!o.isValid(v))throw new Error("invalid scalar: out of range");if(v===qn||b.is0())return x.ZERO;if(v===Ui)return b;if(B.hasCache(this))return this.multiply(v);if(E){let{k1neg:_,k1:M,k2neg:O,k2:k}=F(v),{p1:U,p2:K}=Z5(x,b,M,k);return S(E.beta,U,K,_,O)}else return B.unsafe(b,v)}toAffine(v){return $(this,v)}isTorsionFree(){let{isTorsionFree:v}=e;return i===Ui?!0:v?v(x,this):B.unsafe(this,a).is0()}clearCofactor(){let{clearCofactor:v}=e;return i===Ui?this:v?v(x,this):this.multiplyUnsafe(i)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}toBytes(v=!0){return Vn(v,"isCompressed"),this.assertValidity(),h(x,this,v)}toHex(v=!0){return Fn(this.toBytes(v))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let L=o.BITS,B=new Ci(x,e.endo?Math.ceil(L/2):L);return x.BASE.precompute(8),x}function k8(r){return Uint8Array.of(r?2:3)}function P8(r,e){return{secretKey:e.BYTES,publicKey:1+r.BYTES,publicKeyUncompressed:1+2*r.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function $I(r,e={}){let{Fn:t}=r,n=e.randomBytes||dn,o=Object.assign(P8(r.Fp,t),{seed:B2(t.ORDER)});function s(h){try{let p=t.fromBytes(h);return t.isValidNot0(p)}catch{return!1}}function i(h,p){let{publicKey:g,publicKeyUncompressed:m}=o;try{let w=h.length;return p===!0&&w!==g||p===!1&&w!==m?!1:!!r.fromBytes(h)}catch{return!1}}function a(h=n(o.seed)){return U2(ce(h,o.seed,"seed"),t.ORDER)}function c(h,p=!0){return r.BASE.multiply(t.fromBytes(h)).toBytes(p)}function l(h){let{secretKey:p,publicKey:g,publicKeyUncompressed:m}=o;if(!ys(h)||"_lengths"in t&&t._lengths||p===g)return;let w=ce(h,void 0,"key").length;return w===g||w===m}function d(h,p,g=!0){if(l(h)===!0)throw new Error("first arg must be private key");if(l(p)===!1)throw new Error("second arg must be public key");let m=t.fromBytes(h);return r.fromBytes(p).multiply(m).toBytes(g)}let u={isValidSecretKey:s,isValidPublicKey:i,randomSecretKey:a},f=ki(a,c);return Object.freeze({getPublicKey:c,getSharedSecret:d,keygen:f,Point:r,utils:u,lengths:o})}function R8(r,e,t={}){Un(e),pn(t,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"}),t=Object.assign({},t);let n=t.randomBytes||dn,o=t.hmac||((E,b)=>Ro(e,E,b)),{Fp:s,Fn:i}=r,{ORDER:a,BITS:c}=i,{keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h}=$I(r,t),p={prehash:!0,lowS:typeof t.lowS=="boolean"?t.lowS:!0,format:"compact",extraEntropy:!1},g=a*_8<s.ORDER;function m(E){let b=a>>Ui;return E>b}function w(E,b){if(!i.isValidNot0(b))throw new Error(`invalid signature ${E}: out of range 1..Point.Fn.ORDER`);return b}function T(){if(g)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function I(E,b){Em(b);let _=h.signature,M=b==="compact"?_:b==="recovered"?_+1:void 0;return ce(E,M)}class D{r;s;recovery;constructor(b,_,M){if(this.r=w("r",b),this.s=w("s",_),M!=null){if(T(),![0,1,2,3].includes(M))throw new Error("invalid recovery id");this.recovery=M}Object.freeze(this)}static fromBytes(b,_=p.format){I(b,_);let M;if(_==="der"){let{r:K,s:W}=Lo.toSig(ce(b));return new D(K,W)}_==="recovered"&&(M=b[0],_="compact",b=b.subarray(1));let O=h.signature/2,k=b.subarray(0,O),U=b.subarray(O,O*2);return new D(i.fromBytes(k),i.fromBytes(U),M)}static fromHex(b,_){return this.fromBytes($n(b),_)}assertRecovery(){let{recovery:b}=this;if(b==null)throw new Error("invalid recovery id: must be present");return b}addRecoveryBit(b){return new D(this.r,this.s,b)}recoverPublicKey(b){let{r:_,s:M}=this,O=this.assertRecovery(),k=O===2||O===3?_+a:_;if(!s.isValid(k))throw new Error("invalid recovery id: sig.r+curve.n != R.x");let U=s.toBytes(k),K=r.fromBytes(tr(k8((O&1)===0),U)),W=i.inv(k),we=$(ce(b,void 0,"msgHash")),pe=i.create(-we*W),ue=i.create(M*W),be=r.BASE.multiplyUnsafe(pe).add(K.multiplyUnsafe(ue));if(be.is0())throw new Error("invalid recovery: point at infinify");return be.assertValidity(),be}hasHighS(){return m(this.s)}toBytes(b=p.format){if(Em(b),b==="der")return $n(Lo.hexFromSig(this));let{r:_,s:M}=this,O=i.toBytes(_),k=i.toBytes(M);return b==="recovered"?(T(),tr(Uint8Array.of(this.assertRecovery()),O,k)):tr(O,k)}toHex(b){return Fn(this.toBytes(b))}}let F=t.bits2int||function(b){if(b.length>8192)throw new Error("input is too large");let _=Ai(b),M=b.length*8-c;return M>0?_>>BigInt(M):_},$=t.bits2int_modN||function(b){return i.create(F(b))},z=mc(c);function S(E){return Co("num < 2^"+c,E,qn,z),i.toBytes(E)}function x(E,b){return ce(E,void 0,"message"),b?ce(e(E),void 0,"prehashed message"):E}function L(E,b,_){let{lowS:M,prehash:O,extraEntropy:k}=bm(_,p);E=x(E,O);let U=$(E),K=i.fromBytes(b);if(!i.isValidNot0(K))throw new Error("invalid private key");let W=[S(K),S(U)];if(k!=null&&k!==!1){let be=k===!0?n(h.secretKey):k;W.push(ce(be,void 0,"extraEntropy"))}let we=tr(...W),pe=U;function ue(be){let Re=F(be);if(!i.isValidNot0(Re))return;let Je=i.inv(Re),Ee=r.BASE.multiply(Re).toAffine(),it=i.create(Ee.x);if(it===qn)return;let ui=i.create(Je*i.create(pe+it*K));if(ui===qn)return;let Eu=(Ee.x===it?0:2)|Number(Ee.y&Ui),Wa=ui;return M&&m(ui)&&(Wa=i.neg(ui),Eu^=1),new D(it,Wa,g?void 0:Eu)}return{seed:we,k2sig:ue}}function B(E,b,_={}){let{seed:M,k2sig:O}=L(E,b,_);return O5(e.outputLen,i.BYTES,o)(M,O).toBytes(_.format)}function P(E,b,_,M={}){let{lowS:O,prehash:k,format:U}=bm(M,p);if(_=ce(_,void 0,"publicKey"),b=x(b,k),!ys(E)){let K=E instanceof D?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+K)}I(E,U);try{let K=D.fromBytes(E,U),W=r.fromBytes(_);if(O&&K.hasHighS())return!1;let{r:we,s:pe}=K,ue=$(b),be=i.inv(pe),Re=i.create(ue*be),Je=i.create(we*be),Ee=r.BASE.multiplyUnsafe(Re).add(W.multiplyUnsafe(Je));return Ee.is0()?!1:i.create(Ee.x)===we}catch{return!1}}function v(E,b,_={}){let{prehash:M}=bm(_,p);return b=x(b,M),D.fromBytes(E,"recovered").recoverPublicKey(b).toBytes()}return Object.freeze({keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h,Point:r,sign:B,verify:P,recoverPublicKey:v,Signature:D,hash:e})}var Sm={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},KI={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};var L8=BigInt(2);function VI(r){let e=Sm.p,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=$e(d,t,e)*d%e,f=$e(u,t,e)*d%e,h=$e(f,L8,e)*l%e,p=$e(h,o,e)*h%e,g=$e(p,s,e)*p%e,m=$e(g,a,e)*g%e,w=$e(m,c,e)*m%e,T=$e(w,a,e)*g%e,I=$e(T,t,e)*d%e,D=$e(I,i,e)*p%e,F=$e(D,n,e)*l%e,$=$e(F,L8,e);if(!vm.eql(vm.sqr($),r))throw new Error("Cannot find square root");return $}var vm=Ti(Sm.p,{sqrt:VI}),HI=C8(Sm,{Fp:vm,endo:KI}),qr=R8(HI,Tr);var D8=32;function N8(r,e,t){let n=ze.digest(e instanceof Uint8Array?e:e.subarray());if(Li(n))return n.then(({digest:o})=>(t?.signal?.throwIfAborted(),qr.sign(o,r,{prehash:!1,format:"der"}))).catch(o=>{throw o.name==="AbortError"?o:new sc(String(o))});try{return qr.sign(n.digest,r,{prehash:!1,format:"der"})}catch(o){throw new sc(String(o))}}function O8(r,e,t,n){let o=ze.digest(t instanceof Uint8Array?t:t.subarray());if(Li(o))return o.then(({digest:s})=>(n?.signal?.throwIfAborted(),qr.verify(e,s,r,{prehash:!1,format:"der"}))).catch(s=>{throw s.name==="AbortError"?s:new ic(String(s))});try{return n?.signal?.throwIfAborted(),qr.verify(e,o.digest,r,{prehash:!1,format:"der"})}catch(s){throw new ic(String(s))}}var Cc=class{type="secp256k1";raw;_key;constructor(e){this._key=U8(e),this.raw=M8(this._key)}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){return O8(this._key,t,e,n)}},kc=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=B8(e),this.publicKey=new Cc(t??F8(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){return N8(this.raw,e,t)}};function Am(r){return new kc(r)}function Im(r){return new Cc(r)}async function $8(){let r=qI();return new kc(r)}function M8(r){return qr.Point.fromBytes(r).toBytes()}function B8(r){try{return qr.getPublicKey(r,!0),r}catch(e){throw new za(String(e))}}function U8(r){try{return qr.Point.fromBytes(r),r}catch(e){throw new Nn(String(e))}}function F8(r){try{return qr.getPublicKey(r,!0)}catch(e){throw new za(String(e))}}function qI(){return qr.utils.randomSecretKey()}async function od(r,e){if(r==="Ed25519")return d8();if(r==="secp256k1")return $8();if(r==="RSA")return wm(WI(e));if(r==="ECDSA")return w5(zI(e));throw new Fr}function tt(r,e){let{Type:t,Data:n}=mn.decode(r),o=n??new Uint8Array;switch(t){case Be.RSA:return mm(o,e);case Be.Ed25519:return W2(o);case Be.secp256k1:return Im(o);case Be.ECDSA:return v2(o);default:throw new Fr}}function sd(r){let{Type:e,Data:t}=mn.decode(r.digest),n=t??new Uint8Array;switch(e){case Be.Ed25519:return W2(n);case Be.secp256k1:return Im(n);case Be.ECDSA:return v2(n);default:throw new Fr}}function ft(r){return mn.encode({Type:Be[r.type],Data:r.raw})}function K8(r){let e=Ic.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Be.RSA:return pm(t);case Be.Ed25519:return q2(t);case Be.secp256k1:return Am(t);case Be.ECDSA:return h5(t);default:throw new Fr}}function V8(r){if(r.byteLength===fr)return q2(r);if(r.byteLength===D8)return Am(r);let e=Ir(r),t=e[2]?.[0];if(t===o5||t===s5||t===i5)return x2(e);if(e.length>8)return td(e);throw new A("Could not extract private key from raw bytes")}function ks(r){return Ic.encode({Type:Be[r.type],Data:r.raw})}function WI(r){return r==null?2048:parseInt(r,10)}function zI(r){if(r==="P-256"||r==null)return"P-256";if(r==="P-384")return"P-384";if(r==="P-521")return"P-521";throw new A("Unsupported curve, should be P-256, P-384 or P-521")}var Pc=Uint32Array.from([1732584193,4023233417,2562383102,271733878,3285377520]),Do=new Uint32Array(80),Tm=class extends bs{A=Pc[0]|0;B=Pc[1]|0;C=Pc[2]|0;D=Pc[3]|0;E=Pc[4]|0;constructor(){super(64,20,8,!1)}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)Do[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Do[c]=Hu(Do[c-3]^Do[c-8]^Do[c-14]^Do[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=qu(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=Wu(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=Hu(n,5)+l+a+d+Do[c]|0;a=i,i=s,s=Hu(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(){Nt(Do)}destroy(){this.set(0,0,0,0,0),Nt(this.buffer)}},H8=uc(()=>new Tm);function q8(r,e,t,n){Un(r);let o=S5({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(Dt(s,"c"),Dt(i,"dkLen"),Dt(a,"asyncTick"),s<1)throw new Error("iterations (c) must be >= 1");let c=S2(e,"password"),l=S2(t,"salt"),d=new Uint8Array(i),u=Ro.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function W8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),Nt(o),t}function z8(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=q8(r,e,t,n),l,d=new Uint8Array(4),u=ws(d),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<s;h++,p+=a.outputLen){let g=i.subarray(p,p+a.outputLen);u.setInt32(0,h,!1),(l=c._cloneInto(l)).update(d).digestInto(f),g.set(f.subarray(0,g.length));for(let m=1;m<o;m++){a._cloneInto(l).update(f).digestInto(f);for(let w=0;w<g.length;w++)g[w]^=f[w]}}return W8(a,c,i,l,f)}async function id(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=q8(r,e,t,n),d,u=new Uint8Array(4),f=ws(u),h=new Uint8Array(c.outputLen);for(let p=1,g=0;g<s;p++,g+=c.outputLen){let m=a.subarray(g,g+c.outputLen);f.setInt32(0,p,!1),(d=l._cloneInto(d)).update(u).digestInto(h),m.set(h.subarray(0,m.length)),await v5(o-1,i,()=>{c._cloneInto(d).update(h).digestInto(h);for(let w=0;w<m.length;w++)m[w]^=h[w]})}return W8(c,l,a,d,h)}var G8={sha1:H8,"sha2-256":Tr,"sha2-512":_o};function Rc(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(G8).join(" / ");throw new A(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let s=G8[o],i=z8(s,r,e,{c:t,dkLen:n});return rt.encode(i).substring(1)}var _m={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},j8=new globalThis.TextEncoder;function GI(r,e){let t=_m[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 YI(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=_m[e],o=Y8[e],s=r;for(;s.length>0;){let i=j8.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 Cm(r,{size:e=32,utf8Buffer:t}={}){if(!_m[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 YI(r,e,t);r=j8.encode(r)}return GI(r,e)}var Lc={hash:r=>Number(Cm(r,{size:32})),hashV:(r,e)=>jI(Lc.hash(r,e))};function jI(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),C(e,"base16")}var km=64,Wr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>km)throw new TypeError("Invalid Fingerprint Size");let s=t.hashV(e,n),i=ae(o);for(let a=0;a<i.length;a++)i[a]=s[a];i.length===0&&(i[0]=7),this.fp=i,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?ee(this.fp,e.fp):!1}};function Ps(r,e){return Math.floor(Math.random()*(e-r))+r}var Rs=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Wr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Wr))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 Wr))throw new TypeError("Invalid Fingerprint");let t=Ps(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Wr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var XI=500,Dc=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??Lc,this.seed=e.seed??Ps(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=C(e));let t=new Wr(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 Rs(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new Rs(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let s=[n,o],i=s[Ps(0,s.length-1)];this.buckets[i]==null&&(this.buckets[i]=new Rs(this.bucketSize));for(let a=0;a<XI;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 Rs(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=C(e));let t=new Wr(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=C(e));let t=new Wr(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}},QI={1:.5,2:.84,4:.95,8:.98};function ZI(r=.001){return r>.002?2:r>1e-5?4:8}function X8(r,e=.001){let t=ZI(e),n=QI[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),km);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var ad=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??Lc,this.seed=e.seed??Ps(0,Math.pow(2,10)),this.filterSeries=[new Dc({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=C(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 Dc({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=C(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=C(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 Et(r,e=.001,t){return new ad({...X8(r,e),...t??{}})}function oe(r){let e=r.getComponents(),t={},n=0;if(e[n]?.name==="ip6zone"&&(t.zone=`${e[n].value}`,n++),e[n].name==="ip4"||e[n].name==="ip6"||e[n].name==="dns"||e[n].name==="dns4"||e[n].name==="dns6"?(t.type=e[n].name,t.host=e[n].value,n++):e[n].name==="dnsaddr"&&(t.type=e[n].name,t.host=`_dnsaddr.${e[n].value}`,n++),(e[n]?.name==="tcp"||e[n]?.name==="udp")&&(t.protocol=e[n].name==="tcp"?"tcp":"udp",t.port=parseInt(`${e[n].value}`),n++),e[n]?.name==="ipcidr"&&(t.type==="ip4"?t.cidr=parseInt(`${e[n].value}`):t.type==="ip6"&&(t.cidr=`${e[n].value}`),n++),t.type==null||t.host==null)throw new A(`Multiaddr ${r} was not an IPv4, IPv6, DNS, DNS4, DNS6 or DNSADDR address`);return e[n]?.name==="tls"&&e[n+1]?.name==="sni"&&(t.sni=e[n+1].value,n+=2),t}var cd=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 Q8=45,JI=15,Fi=new cd;function ld(r){if(!(r.length>JI))return Fi.new(r).parseWith(()=>Fi.readIPv4Addr())}function ud(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>Q8))return Fi.new(r).parseWith(()=>Fi.readIPv6Addr())}function $i(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>Q8)return;let t=Fi.new(r).parseWith(()=>Fi.readIPAddr());if(t)return e&&t.length===4?Uint8Array.from([0,0,0,0,0,0,0,0,0,0,255,255,t[0],t[1],t[2],t[3]]):t}function Z8(r,e,t){let n=0;for(let o of r)if(!(n<e)){if(n>t)break;if(o!==255)return!1;n++}return!0}function J8(r,e,t,n){let o=0;for(let s of r)if(!(o<t)){if(o>n)break;if(s!==e[o])return!1;o++}return!0}function Pm(r){switch(r.length){case Ls:return r.join(".");case Ds:{let e=[];for(let t=0;t<r.length;t++)t%2===0&&e.push(r[t].toString(16).padStart(2,"0")+r[t+1].toString(16).padStart(2,"0"));return e.join(":")}default:throw new Error("Invalid ip length")}}function e7(r){let e=0;for(let[t,n]of r.entries()){if(n===255){e+=8;continue}for(;(n&128)!=0;)e++,n=n<<1;if((n&128)!=0)return-1;for(let o=t+1;o<r.length;o++)if(r[o]!=0)return-1;break}return e}function t7(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Ls=4,Ds=16,M$=parseInt("0xFFFF",16),eT=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Nc(r,e){e.length===Ds&&r.length===Ls&&Z8(e,0,11)&&(e=e.slice(12)),e.length===Ls&&r.length===Ds&&J8(r,eT,0,11)&&(r=r.slice(12));let t=r.length;if(t!=e.length)throw new Error("Failed to mask ip");let n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=r[o]&e[o];return n}function r7(r,e){if(typeof e=="string"&&(e=$i(e)),e==null)throw new Error("Invalid ip");if(e.length!==r.network.length)return!1;for(let t=0;t<e.length;t++)if((r.network[t]&r.mask[t])!==(e[t]&r.mask[t]))return!1;return!0}function Rm(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Ls,o=ld(e);if(o==null&&(n=Ds,o=ud(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let s=parseInt(t,10);if(Number.isNaN(s)||String(s).length!==t.length||s<0||s>n*8)throw new Error("Failed to parse given CIDR: "+r);let i=Lm(s,8*n);return{network:Nc(o,i),mask:i}}function Lm(r,e){if(e!==8*Ls&&e!==8*Ds)throw new Error("Invalid CIDR mask");if(r<0||r>e)throw new Error("Invalid CIDR mask");let t=e/8,n=new Uint8Array(t);for(let o=0;o<t;o++){if(r>=8){n[o]=255,r-=8;continue}n[o]=255-(255>>r),r=0}return n}var Ns=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=Rm(e));else{let n=$i(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n.length*8){let s=$i(t);if(s==null)throw new Error("Failed to parse mask");this.mask=s}else this.mask=Lm(o,8*n.length);this.network=Nc(n,this.mask)}}contains(e){return r7({network:this.network,mask:this.mask},e)}toString(){let e=e7(this.mask),t=e!==-1?String(e):t7(this.mask);return Pm(this.network)+"/"+t}};function n7(r,e){return new Ns(r).contains(e)}function dd(r){try{let e=oe(r);switch(e.type){case"ip6":return n7("2000::/3",e.host);default:return!1}}catch{return!1}}function o7(r){try{let e=oe(r);switch(e.type){case"ip4":return e.host.startsWith("169.254.");case"ip6":return e.host.toLowerCase().startsWith("fe80");default:return!1}}catch{return!1}}function s7(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function Oc(r){try{let e=oe(r);switch(e.type){case"ip4":case"ip6":return s7(e.host);default:return!1}}catch{return!1}}function xt(r){try{return oe(r),!0}catch{return!1}}function zr(r){return!!ld(r)}function fd(r){return!!ud(r)}var a7=Ln(i7(),1),tT=["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"],rT=tT.map(r=>new a7.Netmask(r));function Dm(r){for(let e of rT)if(e.contains(r))return!0;return!1}function nT(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function oT(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 Dm(o)}function sT(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function iT(r){let e=r.split(":"),t=e[e.length-1];return Dm(t)}function aT(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 Ki(r){if(zr(r))return Dm(r);if(nT(r))return oT(r);if(sT(r))return iT(r);if(fd(r))return aT(r)}function Qe(r){try{let e=oe(r);switch(e.type){case"ip4":case"ip6":return Ki(e.host)??!1;default:return e.host==="localhost"}}catch{return!1}}function fe(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var hd=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)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}},Vi=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new hd(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 hd(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 Nm=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function vt(r={}){return cT(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 cT(r,e){e=e??{};let t=e.onEnd,n=new Vi,o,s,i,a=fe(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((m,w)=>{s=T=>{s=null,n.push(T);try{m(r(n))}catch(I){w(I)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=fe()})}},l=m=>s!=null?s(m):(n.push(m),o),d=m=>(n=new Vi,s!=null?s({error:m}):(n.push({error:m}),o)),u=m=>{if(i)return o;if(e?.objectMode!==!0&&m?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:m})},f=m=>i?o:(i=!0,m!=null?d(m):l({done:!0})),h=()=>(n=new Vi,f(),{done:!0}),p=m=>(f(m),{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 m=>{let w=m?.signal;if(w?.throwIfAborted(),n.isEmpty())return;let T,I;w!=null&&(T=new Promise((D,F)=>{I=()=>{F(new Nm)},w.addEventListener("abort",I)}));try{await Promise.race([a.promise,T])}finally{I!=null&&w!=null&&w?.removeEventListener("abort",I)}}},t==null)return o;let g=o;return o={[Symbol.asyncIterator](){return this},next(){return g.next()},throw(m){return g.throw(m),t!=null&&(t(m),t=void 0),{done:!0}},return(){return g.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(m){return g.end(m),t!=null&&(t(m),t=void 0),o},get readableLength(){return g.readableLength},onEmpty:m=>g.onEmpty(m)},o}var lT=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 uT(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!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}=lT(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function _r(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=uT(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function Wn(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var pd=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}},md=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}},Os=class extends Error{static name="UnexpectedEOFError";name="UnexpectedEOFError"},gd=class extends Error{static name="MaxEarlyStreamsError";name="MaxEarlyStreamsError"},yd=class extends Error{static name="StreamClosedError";name="StreamClosedError"};function dT(r){return r.reason}async function Pe(r,e,t){if(e==null)return r;let n=t?.translateError??dT;if(e.aborted)return r.catch(()=>{}),Promise.reject(n(e));let o;try{return await Promise.race([r,new Promise((s,i)=>{o=()=>{i(n(e))},e.addEventListener("abort",o)})])}finally{o!=null&&e.removeEventListener("abort",o)}}var wd=class{deferred;signal;constructor(e){this.signal=e,this.deferred=fe(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Vt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function fT(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var bd=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=fT(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,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 Vt),this.cleanup())}async join(e={}){let t=new wd(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 Pe(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 St=class extends ie{concurrency;maxSize;queue;pending;sort;paused;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.paused=!1,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=[],this.emitEmpty=Wn(this.emitEmpty.bind(this),1),this.emitIdle=Wn(this.emitIdle.bind(this),1)}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}pause(){this.paused=!0}resume(){this.paused&&(this.paused=!1,this.tryToStartAnother())}tryToStartAnother(){if(this.paused)return!1;if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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 md;let n=new bd(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("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Vt)}),this.clear()}async onEmpty(e){this.size!==0&&await _r(this,"empty",e)}async onSizeLessThan(e,t){this.size<e||await _r(this,"next",{...t,filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await _r(this,"idle",e)}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=vt({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.error)},i=()=>{n()},a=()=>{n(new Vt("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("failure",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("failure",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var hT=Math.pow(2,20)*4,No=class extends ie{status;timeline;inactivityTimeout;maxReadBufferLength;maxWriteBufferLength;log;direction;maxMessageSize;readStatus;writeStatus;remoteReadStatus;remoteWriteStatus;writableNeedsDrain;readBuffer;writeBuffer;sendingData;onDrainPromise;constructor(e){super(),this.status="open",this.log=e.log,this.direction=e.direction??"outbound",this.inactivityTimeout=e.inactivityTimeout??12e4,this.maxReadBufferLength=e.maxReadBufferLength??hT,this.maxWriteBufferLength=e.maxWriteBufferLength,this.maxMessageSize=e.maxMessageSize,this.readBuffer=new X,this.writeBuffer=new X,this.readStatus="readable",this.remoteReadStatus="readable",this.writeStatus="writable",this.remoteWriteStatus="writable",this.sendingData=!1,this.writableNeedsDrain=!1,this.timeline={open:Date.now()},this.processSendQueue=this.processSendQueue.bind(this);let t=()=>{this.writableNeedsDrain&&(this.log.trace("drain event received, continue sending data"),this.writableNeedsDrain=!1,this.processSendQueue()),this.onDrainPromise?.resolve()};this.addEventListener("drain",t);let n=o=>{this.onDrainPromise?.reject(o.error??new yd)};this.addEventListener("close",n)}get readBufferLength(){return this.readBuffer.byteLength}get writeBufferLength(){return this.writeBuffer.byteLength}async onDrain(e){return this.writableNeedsDrain!==!0?Promise.resolve():(this.onDrainPromise==null&&(this.onDrainPromise=Promise.withResolvers()),Pe(this.onDrainPromise.promise,e?.signal))}async*[Symbol.asyncIterator](){if(this.readStatus!=="readable"&&this.readStatus!=="paused")return;let e=vt(),t=s=>{e.push(s.data)};this.addEventListener("message",t);let n=s=>{e.end(s.error)};this.addEventListener("close",n);let o=()=>{e.end()};this.addEventListener("remoteCloseWrite",o);try{yield*e}finally{this.removeEventListener("message",t),this.removeEventListener("close",n),this.removeEventListener("remoteCloseWrite",o)}}isReadable(){return this.status==="open"}send(e){if(this.writeStatus==="closed"||this.writeStatus==="closing")throw new cn(`Cannot write to a stream that is ${this.writeStatus}`);return this.log.trace("append %d bytes to write buffer",e.byteLength),this.writeBuffer.append(e),this.processSendQueue()}abort(e){if(!(this.status==="aborted"||this.status==="reset"||this.status==="closed")){this.log.error("abort with error - %e",e),this.status="aborted",this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle")),this.writeStatus="closed",this.remoteWriteStatus="closed",this.readStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now();try{this.sendReset(e)}catch(t){this.log("failed to send reset to remote - %e",t)}this.dispatchEvent(new _u(e))}}pause(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn("Cannot pause a stream that is closing/closed");this.readStatus!=="paused"&&(this.readStatus="paused",this.sendPause())}resume(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn("Cannot resume a stream that is closing/closed");this.readStatus!=="readable"&&(this.readStatus="readable",this.dispatchReadBuffer(),this.sendResume())}push(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.append(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}unshift(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.prepend(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}onData(e){if(e.byteLength!==0){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("ignoring data - read status %s",this.readStatus);return}this.readBuffer.append(e),this.dispatchReadBuffer()}}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="message"&&this.readBuffer.byteLength>0&&queueMicrotask(()=>{this.dispatchReadBuffer()})}onRemoteReset(){this.log("remote reset"),this.status="reset",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now(),this.readBuffer.byteLength===0&&(this.readStatus="closed");let e=new fi;this.dispatchEvent(new Cu(e))}onTransportClosed(e){this.log("transport closed"),this.readStatus==="readable"&&this.readBuffer.byteLength===0&&(this.log("close readable end after transport closed and read buffer is empty"),this.readStatus="closed"),this.remoteReadStatus!=="closed"&&(this.remoteReadStatus="closed"),this.remoteWriteStatus!=="closed"&&(this.remoteWriteStatus="closed"),this.writeStatus!=="closed"&&(this.writeStatus="closed"),e!=null?this.abort(e):(this.status==="open"||this.status==="closing")&&(this.timeline.close=Date.now(),this.status="closed",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.dispatchEvent(new xo))}onRemoteCloseWrite(){this.remoteWriteStatus!=="closed"&&(this.log.trace("on remote close write"),this.remoteWriteStatus="closed",this.safeDispatchEvent("remoteCloseWrite"),this.writeStatus==="closed"&&this.onTransportClosed())}onRemoteCloseRead(){this.log.trace("on remote close read"),this.remoteReadStatus="closed",this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle"))}processSendQueue(){if(this.writableNeedsDrain)return this.log.trace("not processing send queue as drain is required"),this.checkWriteBufferLength(),!1;if(this.writeBuffer.byteLength===0)return this.log.trace("not processing send queue as no bytes to send"),!0;if(this.sendingData)return this.log.trace("not processing send queue as already sending data"),!0;this.sendingData=!0,this.log.trace("processing send queue with %d queued bytes",this.writeBuffer.byteLength);try{let e=!0,t=this.writeBuffer.byteLength,n=0;for(;this.writeBuffer.byteLength>0;){let o=Math.min(this.maxMessageSize??this.writeBuffer.byteLength,this.writeBuffer.byteLength);if(o===0){e=!1;break}let s=this.writeBuffer.sublist(0,o),i=new X(s);this.writeBuffer.consume(s.byteLength);let a=this.sendData(s);if(e=a.canSendMore,n+=a.sentBytes,a.sentBytes!==i.byteLength&&(i.consume(a.sentBytes),this.writeBuffer.prepend(i)),!e)break}return e||(this.log.trace("sent %d/%d bytes, pausing sending because underlying stream is full, %d bytes left in the write buffer",n,t,this.writeBuffer.byteLength),this.writableNeedsDrain=!0,this.checkWriteBufferLength()),this.writeBuffer.byteLength===0&&this.safeDispatchEvent("idle"),e}finally{this.sendingData=!1}}dispatchReadBuffer(){try{if(this.listenerCount("message")===0){this.log.trace("not dispatching pause buffer as there are no listeners for the message event");return}if(this.readBuffer.byteLength===0){this.log.trace("not dispatching pause buffer as there is no data to dispatch");return}if(this.readStatus==="paused"){this.log.trace("not dispatching pause buffer we are paused");return}if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("dropping %d bytes because the readable end is %s",this.readBuffer.byteLength,this.readStatus),this.readBuffer.consume(this.readBuffer.byteLength);return}let e=this.readBuffer.sublist();this.readBuffer.consume(e.byteLength),this.dispatchEvent(new Tu(e))}finally{this.readBuffer.byteLength===0&&this.remoteWriteStatus==="closed"&&(this.log("close readable end after dispatching read buffer and remote writable end is closed"),this.readStatus="closed"),this.checkReadBufferLength()}}checkReadBufferLength(){this.readBuffer.byteLength>this.maxReadBufferLength&&this.abort(new Ya(`Read buffer length of ${this.readBuffer.byteLength} exceeded limit of ${this.maxReadBufferLength}, read status is ${this.readStatus}`))}checkWriteBufferLength(){this.maxWriteBufferLength!=null&&this.writeBuffer.byteLength>this.maxWriteBufferLength&&this.abort(new Ya(`Write buffer length of ${this.writeBuffer.byteLength} exceeded limit of ${this.maxWriteBufferLength}, write status is ${this.writeStatus}`))}onMuxerNeedsDrain(){this.writableNeedsDrain=!0}onMuxerDrain(){this.safeDispatchEvent("drain")}};var Oo=class extends No{remoteAddr;metricPrefix;metrics;constructor(e){super(e),this.metricPrefix=e.metricPrefix??"",this.metrics=e.metrics,this.remoteAddr=e.remoteAddr,this.addEventListener("close",t=>{this.metrics?.increment({[`${this.metricPrefix}end`]:!0}),t.error!=null?t.local?this.metrics?.increment({[`${this.metricPrefix}abort`]:!0}):this.metrics?.increment({[`${this.metricPrefix}reset`]:!0}):t.local?this.metrics?.increment({[`${this.metricPrefix}_local_close`]:!0}):this.metrics?.increment({[`${this.metricPrefix}_remote_close`]:!0})})}async close(e){this.status==="open"&&(this.status="closing",this.writeStatus="closing",this.remoteWriteStatus="closing",this.remoteReadStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await _r(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await _r(this,"drain",{...e,rejectionEvents:["close"]})),await this.sendClose(e),this.onTransportClosed())}};function Ed(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Mo=class extends ie{streams;protocol;status;log;maConn;streamOptions;earlyStreams;maxEarlyStreams;metrics;constructor(e,t){super(),this.maConn=e,this.protocol=t.protocol,this.streams=[],this.earlyStreams=[],this.status="open",this.log=e.log.newScope(t.name),this.streamOptions=t.streamOptions,this.maxEarlyStreams=t.maxEarlyStreams??10,this.metrics=t.metrics;let n=i=>{try{this.onData(i.data)}catch(a){this.abort(a),this.maConn.abort(a)}};this.maConn.addEventListener("message",n);let o=()=>{this.log("underlying stream drained, signal %d streams to continue writing",this.streams.length),this.streams.forEach(i=>{i.onMuxerDrain()})};this.maConn.addEventListener("drain",o);let s=()=>{this.log("underlying stream closed with status %s and %d streams",this.status,this.streams.length),this.onTransportClosed()};this.maConn.addEventListener("close",s)}send(e){let t=this.maConn.send(e);return t===!1&&(this.log("underlying stream saturated, signal %d streams to pause writing",this.streams.length),this.streams.forEach(n=>{n.onMuxerNeedsDrain()})),t}async close(e){this.status==="closed"||this.status==="closing"||(this.status="closing",await Pe(Promise.all([...this.streams].map(async t=>{await t.close(e)})),e?.signal),this.status="closed")}abort(e){this.status!=="closed"&&(this.status="closing",[...this.streams].forEach(t=>{t.abort(e)}),this.status="closed")}onTransportClosed(e){this.status="closing";try{[...this.streams].forEach(t=>{t.onTransportClosed(e)})}catch(t){this.abort(t)}this.status="closed"}async createStream(e){if(this.status!=="open")throw new Br;let t=this.onCreateStream({...this.streamOptions,...e});return Ed(t)&&(t=await t),this.streams.push(t),this.cleanUpStream(t),t}onRemoteStream(e){if(this.streams.push(e),this.cleanUpStream(e),this.listenerCount("stream")===0){this.earlyStreams.push(e),this.earlyStreams.length>this.maxEarlyStreams&&this.abort(new gd(`Too many early streams were opened - ${this.earlyStreams.length}/${this.maxEarlyStreams}`));return}this.safeDispatchEvent("stream",{detail:e})}cleanUpStream(e){let t=n=>{let o=this.streams.findIndex(s=>s===e);o!==-1&&this.streams.splice(o,1),n.error!=null?n.local?this.metrics?.increment({[`${e.direction}_stream_reset`]:!0}):this.metrics?.increment({[`${e.direction}_stream_abort`]:!0}):this.metrics?.increment({[`${e.direction}_stream_end`]:!0})};e.addEventListener("close",t),this.metrics?.increment({[`${e.direction}_stream`]:!0})}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="stream"&&this.earlyStreams.length>0&&queueMicrotask(()=>{this.earlyStreams.forEach(t=>{this.safeDispatchEvent("stream",{detail:t})}),this.earlyStreams=[]})}};var Bo=class extends No{id;protocol;constructor(e){super(e),this.id=e.id,this.protocol=e.protocol??""}async close(e){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.writeStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await _r(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData),await _r(this,"drain",{...e,rejectionEvents:["close"]}),this.log("write queue drained, closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData)),await this.sendCloseWrite(e),this.writeStatus="closed",this.log("closed writable end gracefully"),this.remoteWriteStatus==="closed"&&this.onTransportClosed())}async closeRead(e){this.readStatus==="closing"||this.readStatus==="closed"||(this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.readStatus="closing",await this.sendCloseRead(e),this.readStatus="closed",this.log("closed readable end gracefully"))}};function le(r){let e=new globalThis.AbortController;function t(){let s=r.filter(i=>i?.aborted===!0).map(i=>i?.reason).pop();e.abort(s);for(let i of r)i?.removeEventListener!=null&&i.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}var Hi=class{movingAverage;variance;deviation;forecast;timeSpan;previousTime;constructor(e){this.timeSpan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timeSpan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,s=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*s),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var pT=1.2,mT=2,gT=5e3,yT=6e4,wT=5e3,Gr=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;maxTimeout;constructor(e={}){let t=e.interval??wT;this.success=new Hi(t),this.failure=new Hi(t),this.next=new Hi(t),this.failureMultiplier=e.failureMultiplier??mT,this.timeoutMultiplier=e.timeoutMultiplier??pT,this.minTimeout=e.minTimeout??gT,this.maxTimeout=e.maxTimeout??yT,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier));t<this.minTimeout&&(t=this.minTimeout),t>this.maxTimeout&&(t=this.maxTimeout);let n=AbortSignal.timeout(t),o=le([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){e.clear();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 At=class extends Error{static name="InvalidMultiaddrError";name="InvalidMultiaddrError"},zn=class extends Error{static name="ValidationError";name="ValidationError"},xd=class extends Error{static name="InvalidParametersError";name="InvalidParametersError"},vd=class extends Error{static name="UnknownProtocolError";name="UnknownProtocolError"};function Mm(r){return e=>R(e,r)}function Bm(r){return e=>C(e,r)}function qi(r){return new DataView(r.buffer).getUint16(r.byteOffset).toString()}function Ms(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,typeof r=="string"?parseInt(r):r),new Uint8Array(e)}function c7(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=C(e[0],"base32"),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Ms(n);return Oe([t,o],t.length+o.length)}function l7(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=Ms(n);return Oe([t,o],t.length+o.length)}function Um(r){let e=r.subarray(0,r.length-2),t=r.subarray(r.length-2),n=R(e,"base32"),o=qi(t);return`${n}:${o}`}var Fm=function(r){r=r.toString().trim();let e=new Uint8Array(4);return r.split(/\./g).forEach((t,n)=>{let o=parseInt(t,10);if(isNaN(o)||o<0||o>255)throw new At("Invalid byte value in IP address");e[n]=o}),e},u7=function(r){let e=0;r=r.toString().trim();let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=zr(t[n]),i;s&&(i=Fm(t[n]),t[n]=R(i.subarray(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,R(i.subarray(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++){t[n]===""&&(t[n]="0");let s=parseInt(t[n],16);if(isNaN(s)||s<0||s>65535)throw new At("Invalid byte value in IP address");o[e++]=s>>8&255,o[e++]=s&255}return o},d7=function(r){if(r.byteLength!==4)throw new At("IPv4 address was incorrect length");let e=[];for(let t=0;t<r.byteLength;t++)e.push(r[t]);return e.join(".")},f7=function(r){if(r.byteLength!==16)throw new At("IPv6 address was incorrect length");let e=[];for(let n=0;n<r.byteLength;n+=2){let o=r[n],s=r[n+1],i=`${o.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}`;e.push(i)}let t=e.join(":");try{let n=new URL(`http://[${t}]`);return n.hostname.substring(1,n.hostname.length-1)}catch{throw new At(`Invalid IPv6 address "${t}"`)}};function h7(r){try{let e=new URL(`http://[${r}]`);return e.hostname.substring(1,e.hostname.length-1)}catch{throw new At(`Invalid IPv6 address "${r}"`)}}var Om=Object.values(ps).map(r=>r.decoder),bT=(function(){let r=Om[0].or(Om[1]);return Om.slice(2).forEach(e=>r=r.or(e)),r})();function p7(r){return bT.decode(r)}function m7(r){return e=>r.encoder.encode(e)}function ET(r){if(parseInt(r).toString()!==r)throw new zn("Value must be an integer")}function xT(r){if(r<0)throw new zn("Value must be a positive integer, or zero")}function vT(r){return e=>{if(e>r)throw new zn(`Value must be smaller than or equal to ${r}`)}}function ST(...r){return e=>{for(let t of r)t(e)}}var Bc=ST(ET,xT,vT(65535));var mt=-1,$m=class{protocolsByCode=new Map;protocolsByName=new Map;getProtocol(e){let t;if(typeof e=="string"?t=this.protocolsByName.get(e):t=this.protocolsByCode.get(e),t==null)throw new vd(`Protocol ${e} was unknown`);return t}addProtocol(e){this.protocolsByCode.set(e.code,e),this.protocolsByName.set(e.name,e),e.aliases?.forEach(t=>{this.protocolsByName.set(t,e)})}removeProtocol(e){let t=this.protocolsByCode.get(e);t!=null&&(this.protocolsByCode.delete(t.code),this.protocolsByName.delete(t.name),t.aliases?.forEach(n=>{this.protocolsByName.delete(n)}))}},jn=new $m,UT=[{code:4,name:"ip4",size:32,valueToBytes:Fm,bytesToValue:d7,validate:r=>{if(!zr(r))throw new zn(`Invalid IPv4 address "${r}"`)}},{code:6,name:"tcp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:273,name:"udp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:33,name:"dccp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:41,name:"ip6",size:128,valueToBytes:u7,bytesToValue:f7,stringToValue:h7,validate:r=>{if(!fd(r))throw new zn(`Invalid IPv6 address "${r}"`)}},{code:42,name:"ip6zone",size:mt},{code:43,name:"ipcidr",size:8,bytesToValue:Mm("base10"),valueToBytes:Bm("base10")},{code:53,name:"dns",size:mt},{code:54,name:"dns4",size:mt},{code:55,name:"dns6",size:mt},{code:56,name:"dnsaddr",size:mt},{code:132,name:"sctp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:301,name:"udt"},{code:302,name:"utp"},{code:400,name:"unix",size:mt,stringToValue:r=>decodeURIComponent(r),valueToString:r=>encodeURIComponent(r)},{code:421,name:"p2p",aliases:["ipfs"],size:mt,bytesToValue:Mm("base58btc"),valueToBytes:r=>r.startsWith("Q")||r.startsWith("1")?Bm("base58btc")(r):G.parse(r).multihash.bytes},{code:444,name:"onion",size:96,bytesToValue:Um,valueToBytes:c7},{code:445,name:"onion3",size:296,bytesToValue:Um,valueToBytes:l7},{code:446,name:"garlic64",size:mt},{code:447,name:"garlic32",size:mt},{code:448,name:"tls"},{code:449,name:"sni",size:mt},{code:454,name:"noise"},{code:460,name:"quic"},{code:461,name:"quic-v1"},{code:465,name:"webtransport"},{code:466,name:"certhash",size:mt,bytesToValue:m7(ec),valueToBytes:p7},{code:480,name:"http"},{code:481,name:"http-path",size:mt,stringToValue:r=>`/${decodeURIComponent(r)}`,valueToString:r=>encodeURIComponent(r.substring(1))},{code:443,name:"https"},{code:477,name:"ws"},{code:478,name:"wss"},{code:479,name:"p2p-websocket-star"},{code:277,name:"p2p-stardust"},{code:275,name:"p2p-webrtc-star"},{code:276,name:"p2p-webrtc-direct"},{code:280,name:"webrtc-direct"},{code:281,name:"webrtc"},{code:290,name:"p2p-circuit"},{code:777,name:"memory",size:mt}];UT.forEach(r=>{jn.addProtocol(r)});function g7(r){let e=[],t=0;for(;t<r.length;){let n=hr(r,t),o=jn.getProtocol(n),s=he(n),i=FT(o,r,t+s),a=0;i>0&&o.size===mt&&(a=he(i));let c=s+a+i,l={code:n,name:o.name,bytes:r.subarray(t,t+c)};if(i>0){let d=t+s+a,u=r.subarray(d,d+i);l.value=o.bytesToValue?.(u)??R(u)}e.push(l),t+=c}return e}function y7(r){let e=0,t=[];for(let n of r){if(n.bytes==null){let o=jn.getProtocol(n.code),s=he(n.code),i,a=0,c=0;n.value!=null&&(i=o.valueToBytes?.(n.value)??C(n.value),a=i.byteLength,o.size===mt&&(c=he(a)));let l=new Uint8Array(s+c+a),d=0;Oi(n.code,l,d),d+=s,i!=null&&(o.size===mt&&(Oi(a,l,d),d+=c),l.set(i,d)),n.bytes=l}t.push(n.bytes),e+=n.bytes.byteLength}return Oe(t,e)}function w7(r){if(r.charAt(0)!=="/")throw new At('String multiaddr must start with "/"');let e=[],t="protocol",n="",o="";for(let s=1;s<r.length;s++){let i=r.charAt(s);i!=="/"&&(t==="protocol"?o+=r.charAt(s):n+=r.charAt(s));let a=s===r.length-1;if(i==="/"||a){let c=jn.getProtocol(o);if(t==="protocol"){if(c.size==null||c.size===0){e.push({code:c.code,name:c.name}),n="",o="",t="protocol";continue}else if(a)throw new At(`Component ${o} was missing value`);t="value"}else if(t==="value"){let l={code:c.code,name:c.name};if(c.size!=null&&c.size!==0){if(n==="")throw new At(`Component ${o} was missing value`);l.value=c.stringToValue?.(n)??n}e.push(l),n="",o="",t="protocol"}}}if(o!==""&&n!=="")throw new At("Incomplete multiaddr");return e}function b7(r){return`/${r.flatMap(e=>{if(e.value==null)return e.name;let t=jn.getProtocol(e.code);if(t==null)throw new At(`Unknown protocol code ${e.code}`);return[e.name,t.valueToString?.(e.value)??e.value]}).join("/")}`}function FT(r,e,t){return r.size==null||r.size===0?0:r.size>0?r.size/8:hr(e,t)}var $T=Symbol.for("nodejs.util.inspect.custom"),jm=Symbol.for("@multiformats/multiaddr");function KT(r){if(r==null&&(r="/"),yn(r))return r.getComponents();if(r instanceof Uint8Array)return g7(r);if(typeof r=="string")return r=r.replace(/\/(\/)+/,"/").replace(/(\/)+$/,""),r===""&&(r="/"),w7(r);if(Array.isArray(r))return r;throw new At("Must be a string, Uint8Array, Component[], or another Multiaddr")}var Td=class r{[jm]=!0;#e;#t;#r;constructor(e="/",t={}){this.#e=KT(e),t.validate!==!1&&VT(this)}get bytes(){return this.#r==null&&(this.#r=y7(this.#e)),this.#r}toString(){return this.#t==null&&(this.#t=b7(this.#e)),this.#t}toJSON(){return this.toString()}getComponents(){return[...this.#e.map(e=>({...e}))]}encapsulate(e){let t=new r(e);return new r([...this.#e,...t.getComponents()],{validate:!1})}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new xd(`Address ${this.toString()} does not contain subaddress: ${t}`);return new r(n.slice(0,o),{validate:!1})}decapsulateCode(e){let t;for(let n=this.#e.length-1;n>-1;n--)if(this.#e[n].code===e){t=n;break}return new r(this.#e.slice(0,t),{validate:!1})}equals(e){return ee(this.bytes,e.bytes)}[$T](){return`Multiaddr(${this.toString()})`}};function VT(r){r.getComponents().forEach(e=>{let t=jn.getProtocol(e.code);e.value!=null&&t.validate?.(e.value)})}function yn(r){return!!r?.[jm]}function q(r){return new Td(r)}var Xm=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=fe(),this.haveNext=fe()}[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=fe(),e}async throw(e){return this.ended=!0,this.error=e,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 this.ended=!0,this.nextResult=e,this.haveNext.resolve(),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 this.error??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=fe(),await Pe(this.readNext.promise,t?.signal,t)}};function E7(){return new Xm}function HT(r){return r[Symbol.asyncIterator]!=null}async function qT(r,e,t){try{await Promise.all(r.map(async n=>{for await(let o of n)await e.push(o,{signal:t}),t.throwIfAborted()})),await e.end(void 0,{signal:t})}catch(n){await e.end(n,{signal:t}).catch(()=>{})}}async function*WT(r){let e=new AbortController,t=E7();qT(r,t,e.signal).catch(()=>{});try{yield*t}finally{e.abort()}}function*zT(r){for(let e of r)yield*e}function GT(...r){let e=[];for(let t of r)HT(t)||e.push(t);return e.length===r.length?zT(e):WT(r)}var jt=GT;function Yi(r,...e){if(r==null)throw new Error("Empty pipeline");if(Qm(r)){let n=r;r=()=>n.source}else if(v7(r)||x7(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Qm(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++)Qm(t[n])&&(t[n]=jT(t[n]));return YT(...t)}var YT=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},x7=r=>r?.[Symbol.asyncIterator]!=null,v7=r=>r?.[Symbol.iterator]!=null,Qm=r=>r==null?!1:r.sink!=null&&r.source!=null,jT=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=vt({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(x7(s))o=async function*(){yield*s,n.end()};else if(v7(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return jt(n,o())}return r.source};var XT=4194304,_d=class extends Error{static name="UnwrappedError";name="UnwrappedError"},Hc=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Jm=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},eg=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function QT(r){return typeof r?.closeRead=="function"}function ZT(r){return typeof r?.close=="function"}function Zm(r){return QT(r)?r.remoteWriteStatus!=="writable"&&r.readBufferLength===0:ZT(r)?r.status!=="open":!1}function JT(r){return r?.addEventListener!=null&&r?.removeEventListener!=null&&r?.send!=null&&r?.push!=null&&r?.log!=null}function Cd(r,e){let t=e?.maxBufferSize??XT,n=new X,o,s=!1;if(!JT(r))throw new A("Argument should be a Stream or a Multiaddr");let i=d=>{if(n.append(d.data),n.byteLength>t){let u=n.byteLength;n.consume(n.byteLength),o?.reject(new Error(`Read buffer overflow - ${u} > ${t}`))}o?.resolve()};r.addEventListener("message",i);let a=d=>{d.error!=null?o?.reject(d.error):o?.resolve()};r.addEventListener("close",a);let c=()=>{o?.resolve()};r.addEventListener("remoteCloseWrite",c);let l={readBuffer:n,async read(d){if(s===!0)throw new _d("Stream was unwrapped");if(Zm(r)){if(n.byteLength===0&&d?.bytes==null)return null;if(d?.bytes!=null&&n.byteLength<d.bytes)throw r.log.error("closed after reading %d/%d bytes",n.byteLength,d.bytes),new Os(`Unexpected EOF - stream closed after reading ${n.byteLength}/${d.bytes} bytes`)}let u=d?.bytes??1;for(o=Promise.withResolvers();;){if(n.byteLength>=u){o.resolve();break}if(await Pe(o.promise,d?.signal),Zm(r)){if(n.byteLength===0&&d?.bytes==null)return null;break}o=Promise.withResolvers()}let f=d?.bytes??n.byteLength;if(n.byteLength<f){if(Zm(r))throw r.log.error("closed while reading %d/%d bytes",n.byteLength,f),new Os(`Unexpected EOF - stream closed while reading ${n.byteLength}/${f} bytes`);return l.read(d)}let h=n.sublist(0,f);return n.consume(f),h},async write(d,u){if(s===!0)throw new _d("Stream was unwrapped");r.send(d)||await _r(r,"drain",{signal:u?.signal,rejectionEvents:["close"]})},unwrap(){return s||(s=!0,r.removeEventListener("message",i),r.removeEventListener("close",a),r.removeEventListener("remoteCloseWrite",c),n.byteLength>0&&(r.log("stream unwrapped with %d unread bytes",n.byteLength),r.push(n))),r}};return l}function Fo(r,e={}){let t=Cd(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=he(e.maxDataLength));let n=e?.lengthDecoder??hr,o=e?.lengthEncoder??Mt;return{async read(i){let a=-1,c=new X;for(;;){let d=await t.read({...i,bytes:1});if(d==null)break;c.append(d);try{a=n(c)}catch(u){if(u instanceof RangeError)continue;throw u}if(a<0)throw new Hc("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new eg(`Message length length too long - ${c.byteLength} > ${e.maxLengthLength}`);if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Jm(`Message length too long - ${a} > ${e.maxDataLength}`);let l=await t.read({...i,bytes:a});if(l==null)throw r.log.error("tried to read %d bytes but the stream closed",a),new Os(`Unexpected EOF - tried to read ${a} bytes but the stream closed`);if(l.byteLength!==a)throw r.log.error("read %d/%d bytes before the stream closed",l.byteLength,a),new Os(`Unexpected EOF - read ${l.byteLength}/${a} bytes before the stream closed`);return l},async write(i,a){await t.write(new X(o(i.byteLength),i),a)},async writeV(i,a){let c=new X(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap(){return t.unwrap()}}}function Ue(r,e){let t=Fo(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 e_=1024*1024*4,t_=1024*1024*4,kd=class{buffer;maxBufferSize;lengthDecoder;maxDataLength;encodingLength;constructor(e={}){this.buffer=new X,this.maxBufferSize=e.maxBufferSize??e_,this.maxDataLength=e.maxDataLength??t_,this.lengthDecoder=e.lengthDecoder??hr,this.encodingLength=e.encodingLength??he}*decode(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxBufferSize)throw new A(`Buffer length limit exceeded - ${this.buffer.byteLength}/${this.maxBufferSize}`);for(;;){let t;try{t=this.lengthDecoder(this.buffer)}catch(s){if(s instanceof RangeError)break;throw s}if(t<0||t>this.maxDataLength)throw new Hc("Invalid message length");let n=this.encodingLength(t),o=n+t;if(this.buffer.byteLength>=o){let s=this.buffer.sublist(n,o);this.buffer.consume(o),s.byteLength>0&&(yield s)}else break}}};var r_=["Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function tg(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(e==="string"||e==="number"||e==="bigint"||e==="symbol")return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(r instanceof Uint8Array)return"Uint8Array";if(r.constructor===Object)return"Object";let t=n_(r);return t||"Object"}function n_(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(r_.includes(e))return e}var y=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}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};y.uint=new y(0,"uint",!0);y.negint=new y(1,"negint",!0);y.bytes=new y(2,"bytes",!0);y.string=new y(3,"string",!0);y.array=new y(4,"array",!1);y.map=new y(5,"map",!1);y.tag=new y(6,"tag",!1);y.float=new y(7,"float",!0);y.false=new y(7,"false",!0);y.true=new y(7,"true",!0);y.null=new y(7,"null",!0);y.undefined=new y(7,"undefined",!0);y.break=new y(7,"break",!0);var N=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 qc=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",o_=new TextEncoder;function Pd(r){return qc&&globalThis.Buffer.isBuffer(r)}function Us(r){return r instanceof Uint8Array?Pd(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var s_=24,i_=200,ji=qc?r=>r.length>=s_?globalThis.Buffer.from(r):S7(r):r=>r.length>=i_?o_.encode(r):S7(r),wn=r=>Uint8Array.from(r),I7=qc?(r,e,t)=>Pd(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),T7=qc?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Us(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},_7=qc?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function Rd(r,e){if(Pd(r)&&Pd(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 S7(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):(o>=55296&&o<=57343&&(o=65533),e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}var A7=4096;function C7(r){let e=r.length;if(e<=A7)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=A7));return t}var a_=256,Wc=class{constructor(e=a_){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=_7(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=I7(n,0,this.cursor)}else t=T7(this.chunks,this.cursor);return e&&this.reset(),t}},Ld=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw new Error("write out of bounds, destination buffer is too small");this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};var J="CBOR decode error:",bn="CBOR encode error:",zc=[];zc[23]=1;zc[24]=2;zc[25]=3;zc[26]=5;zc[27]=9;function Xn(r,e,t){if(r.length-e<t)throw new Error(`${J} not enough data for type`)}var gt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){Xn(r,e,1);let n=r[e];if(t.strict===!0&&n<gt[0])throw new Error(`${J} 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<gt[1])throw new Error(`${J} 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<gt[2])throw new Error(`${J} 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<gt[3])throw new Error(`${J} 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(`${J} integers outside of the safe integer range are not supported`)}function k7(r,e,t,n){return new N(y.uint,mr(r,e+1,n),2)}function P7(r,e,t,n){return new N(y.uint,gr(r,e+1,n),3)}function R7(r,e,t,n){return new N(y.uint,yr(r,e+1,n),5)}function L7(r,e,t,n){return new N(y.uint,wr(r,e+1,n),9)}function Cr(r,e){return Ke(r,0,e.value)}function Ke(r,e,t){if(t<gt[0]){let n=Number(t);r.push([e|n])}else if(t<gt[1]){let n=Number(t);r.push([e|24,n])}else if(t<gt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<gt[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<gt[4]){let o=[e|27,0,0,0,0,0,0,0],s=Number(n&BigInt(4294967295)),i=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=s&255,s=s>>8,o[7]=s&255,s=s>>8,o[6]=s&255,s=s>>8,o[5]=s&255,o[4]=i&255,i=i>>8,o[3]=i&255,i=i>>8,o[2]=i&255,i=i>>8,o[1]=i&255,r.push(o)}else throw new Error(`${J} encountered BigInt larger than allowable range`)}}Cr.encodedSize=function(e){return Ke.encodedSize(e.value)};Ke.encodedSize=function(e){return e<gt[0]?1:e<gt[1]?2:e<gt[2]?3:e<gt[3]?5:9};Cr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function D7(r,e,t,n){return new N(y.negint,-1-mr(r,e+1,n),2)}function N7(r,e,t,n){return new N(y.negint,-1-gr(r,e+1,n),3)}function O7(r,e,t,n){return new N(y.negint,-1-yr(r,e+1,n),5)}var rg=BigInt(-1),M7=BigInt(1);function B7(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 N(y.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${J} integers outside of the safe integer range are not supported`);return new N(y.negint,rg-BigInt(o),9)}function Dd(r,e){let t=e.value,n=typeof t=="bigint"?t*rg-M7:t*-1-1;Ke(r,e.type.majorEncoded,n)}Dd.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*rg-M7:t*-1-1;return n<gt[0]?1:n<gt[1]?2:n<gt[2]?3:n<gt[3]?5:9};Dd.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Gc(r,e,t,n){Xn(r,e,t+n);let o=r.slice(e+t,e+t+n);return new N(y.bytes,o,t+n)}function U7(r,e,t,n){return Gc(r,e,1,t)}function F7(r,e,t,n){return Gc(r,e,2,mr(r,e+1,n))}function $7(r,e,t,n){return Gc(r,e,3,gr(r,e+1,n))}function K7(r,e,t,n){return Gc(r,e,5,yr(r,e+1,n))}function V7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer bytes lengths not supported`);return Gc(r,e,9,o)}function Nd(r){return r.encodedBytes===void 0&&(r.encodedBytes=y.equals(r.type,y.string)?ji(r.value):r.value),r.encodedBytes}function Xi(r,e){let t=Nd(e);Ke(r,e.type.majorEncoded,t.length),r.push(t)}Xi.encodedSize=function(e){let t=Nd(e);return Ke.encodedSize(t.length)+t.length};Xi.compareTokens=function(e,t){return l_(Nd(e),Nd(t))};function l_(r,e){return r.length<e.length?-1:r.length>e.length?1:Rd(r,e)}var H7=new TextDecoder,d_=32;function f_(r,e,t){if(t-e<d_){let o="";for(let s=e;s<t;s++){let i=r[s];if(i&128)return H7.decode(r.subarray(e,t));o+=String.fromCharCode(i)}return o}return H7.decode(r.subarray(e,t))}function Yc(r,e,t,n,o){let s=t+n;Xn(r,e,s);let i=new N(y.string,f_(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=r.slice(e+t,e+s)),i}function q7(r,e,t,n){return Yc(r,e,1,t,n)}function W7(r,e,t,n){return Yc(r,e,2,mr(r,e+1,n),n)}function z7(r,e,t,n){return Yc(r,e,3,gr(r,e+1,n),n)}function G7(r,e,t,n){return Yc(r,e,5,yr(r,e+1,n),n)}function Y7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer string lengths not supported`);return Yc(r,e,9,o,n)}var j7=Xi;function Qi(r,e,t,n){return new N(y.array,n,t)}function X7(r,e,t,n){return Qi(r,e,1,t)}function Q7(r,e,t,n){return Qi(r,e,2,mr(r,e+1,n))}function Z7(r,e,t,n){return Qi(r,e,3,gr(r,e+1,n))}function J7(r,e,t,n){return Qi(r,e,5,yr(r,e+1,n))}function ey(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer array lengths not supported`);return Qi(r,e,9,o)}function ty(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return Qi(r,e,1,1/0)}function Od(r,e){Ke(r,y.array.majorEncoded,e.value)}Od.compareTokens=Cr.compareTokens;Od.encodedSize=function(e){return Ke.encodedSize(e.value)};function Zi(r,e,t,n){return new N(y.map,n,t)}function ry(r,e,t,n){return Zi(r,e,1,t)}function ny(r,e,t,n){return Zi(r,e,2,mr(r,e+1,n))}function oy(r,e,t,n){return Zi(r,e,3,gr(r,e+1,n))}function sy(r,e,t,n){return Zi(r,e,5,yr(r,e+1,n))}function iy(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer map lengths not supported`);return Zi(r,e,9,o)}function ay(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return Zi(r,e,1,1/0)}function Md(r,e){Ke(r,y.map.majorEncoded,e.value)}Md.compareTokens=Cr.compareTokens;Md.encodedSize=function(e){return Ke.encodedSize(e.value)};function cy(r,e,t,n){return new N(y.tag,t,1)}function ly(r,e,t,n){return new N(y.tag,mr(r,e+1,n),2)}function uy(r,e,t,n){return new N(y.tag,gr(r,e+1,n),3)}function dy(r,e,t,n){return new N(y.tag,yr(r,e+1,n),5)}function fy(r,e,t,n){return new N(y.tag,wr(r,e+1,n),9)}function Bd(r,e){Ke(r,y.tag.majorEncoded,e.value)}Bd.compareTokens=Cr.compareTokens;Bd.encodedSize=function(e){return Ke.encodedSize(e.value)};var ng=20,og=21,sg=22,ig=23;function hy(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${J} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new N(y.null,null,1):new N(y.undefined,void 0,1)}function py(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return new N(y.break,void 0,1)}function ag(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${J} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${J} Infinity values are not supported`)}return new N(y.float,r,e)}function my(r,e,t,n){return ag(cg(r,e+1),3,n)}function gy(r,e,t,n){return ag(lg(r,e+1),5,n)}function yy(r,e,t,n){return ag(xy(r,e+1),9,n)}function jc(r,e,t){let n=e.value;if(n===!1)r.push([y.float.majorEncoded|ng]);else if(n===!0)r.push([y.float.majorEncoded|og]);else if(n===null)r.push([y.float.majorEncoded|sg]);else if(n===void 0)r.push([y.float.majorEncoded|ig]);else{let o,s=!1;(!t||t.float64!==!0)&&(by(n),o=cg(jr,1),n===o||Number.isNaN(n)?(jr[0]=249,r.push(jr.slice(0,3)),s=!0):(Ey(n),o=lg(jr,1),n===o&&(jr[0]=250,r.push(jr.slice(0,5)),s=!0))),s||(y_(n),o=xy(jr,1),jr[0]=251,r.push(jr.slice(0,9)))}}jc.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){by(n);let o=cg(jr,1);if(n===o||Number.isNaN(n))return 3;if(Ey(n),o=lg(jr,1),n===o)return 5}return 9};var wy=new ArrayBuffer(9),kr=new DataView(wy,1),jr=new Uint8Array(wy,0);function by(r){if(r===1/0)kr.setUint16(0,31744,!1);else if(r===-1/0)kr.setUint16(0,64512,!1);else if(Number.isNaN(r))kr.setUint16(0,32256,!1);else{kr.setFloat32(0,r);let e=kr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)kr.setUint16(0,31744,!1);else if(t===0)kr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?kr.setUint16(0,0):o<-14?kr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):kr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function cg(r,e){if(r.length-e<2)throw new Error(`${J} 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 Ey(r){kr.setFloat32(0,r,!1)}function lg(r,e){if(r.length-e<4)throw new Error(`${J} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function y_(r){kr.setFloat64(0,r,!1)}function xy(r,e){if(r.length-e<8)throw new Error(`${J} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}jc.compareTokens=Cr.compareTokens;function xe(r,e,t){throw new Error(`${J} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Ud(r){return()=>{throw new Error(`${J} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=xe;V[24]=k7;V[25]=P7;V[26]=R7;V[27]=L7;V[28]=xe;V[29]=xe;V[30]=xe;V[31]=xe;for(let r=32;r<=55;r++)V[r]=xe;V[56]=D7;V[57]=N7;V[58]=O7;V[59]=B7;V[60]=xe;V[61]=xe;V[62]=xe;V[63]=xe;for(let r=64;r<=87;r++)V[r]=U7;V[88]=F7;V[89]=$7;V[90]=K7;V[91]=V7;V[92]=xe;V[93]=xe;V[94]=xe;V[95]=Ud("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=q7;V[120]=W7;V[121]=z7;V[122]=G7;V[123]=Y7;V[124]=xe;V[125]=xe;V[126]=xe;V[127]=Ud("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=X7;V[152]=Q7;V[153]=Z7;V[154]=J7;V[155]=ey;V[156]=xe;V[157]=xe;V[158]=xe;V[159]=ty;for(let r=160;r<=183;r++)V[r]=ry;V[184]=ny;V[185]=oy;V[186]=sy;V[187]=iy;V[188]=xe;V[189]=xe;V[190]=xe;V[191]=ay;for(let r=192;r<=215;r++)V[r]=cy;V[216]=ly;V[217]=uy;V[218]=dy;V[219]=fy;V[220]=xe;V[221]=xe;V[222]=xe;V[223]=xe;for(let r=224;r<=243;r++)V[r]=Ud("simple values are not supported");V[244]=xe;V[245]=xe;V[246]=xe;V[247]=hy;V[248]=Ud("simple values are not supported");V[249]=my;V[250]=gy;V[251]=yy;V[252]=xe;V[253]=xe;V[254]=xe;V[255]=py;var Xr=[];for(let r=0;r<24;r++)Xr[r]=new N(y.uint,r,1);for(let r=-1;r>=-24;r--)Xr[31-r]=new N(y.negint,r,1);Xr[64]=new N(y.bytes,new Uint8Array(0),1);Xr[96]=new N(y.string,"",1);Xr[128]=new N(y.array,0,1);Xr[160]=new N(y.map,0,1);Xr[244]=new N(y.false,!1,1);Xr[245]=new N(y.true,!0,1);Xr[246]=new N(y.null,null,1);function ug(r){switch(r.type){case y.false:return wn([244]);case y.true:return wn([245]);case y.null:return wn([246]);case y.bytes:return r.value.length?void 0:wn([64]);case y.string:return r.value===""?wn([96]):void 0;case y.array:return r.value===0?wn([128]):void 0;case y.map:return r.value===0?wn([160]):void 0;case y.uint:return r.value<24?wn([Number(r.value)]):void 0;case y.negint:if(r.value>=-24)return wn([31-Number(r.value)])}}var b_={float64:!1,mapSorter:v_,quickEncodeToken:ug},Ty=Object.freeze({float64:!0,mapSorter:S_,quickEncodeToken:ug});function E_(){let r=[];return r[y.uint.major]=Cr,r[y.negint.major]=Dd,r[y.bytes.major]=Xi,r[y.string.major]=j7,r[y.array.major]=Od,r[y.map.major]=Md,r[y.tag.major]=Bd,r[y.float.major]=jc,r}var Ji=E_(),Fd=new Wc,Qc=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(`${bn} object contains circular references`);return new r(t,e)}},$o={null:new N(y.null,null),undefined:new N(y.undefined,void 0),true:new N(y.true,!0),false:new N(y.false,!1),emptyArray:new N(y.array,0),emptyMap:new N(y.map,0)},En={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new N(y.float,r):r>=0?new N(y.uint,r):new N(y.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new N(y.uint,r):new N(y.negint,r)},Uint8Array(r,e,t,n){return new N(y.bytes,r)},string(r,e,t,n){return new N(y.string,r)},boolean(r,e,t,n){return r?$o.true:$o.false},null(r,e,t,n){return $o.null},undefined(r,e,t,n){return $o.undefined},ArrayBuffer(r,e,t,n){return new N(y.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new N(y.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[$o.emptyArray,new N(y.break)]:$o.emptyArray;n=Qc.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=$d(i,t,n);return t.addBreakTokens?[new N(y.array,r.length),o,new N(y.break)]:[new N(y.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,a;if(i){a=new Array(i),n=Qc.createCheck(n,r);let c=!o&&t.ignoreUndefinedProperties,l=0;for(let d of s){let u=o?r.get(d):r[d];c&&u===void 0||(a[l++]=[$d(d,t,n),$d(u,t,n)])}l<i&&(a.length=l)}return a?.length?(x_(a,t),t.addBreakTokens?[new N(y.map,a.length),a,new N(y.break)]:[new N(y.map,a.length),a]):t.addBreakTokens===!0?[$o.emptyMap,new N(y.break)]:$o.emptyMap}};En.Map=En.Object;En.Buffer=En.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))En[`${r}Array`]=En.DataView;function $d(r,e={},t){let n=tg(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||En[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=En[n];if(!s)throw new Error(`${bn} unsupported type: ${n}`);return s(r,n,e,t)}function x_(r,e){e.mapSorter&&r.sort(e.mapSorter)}function v_(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=Ji[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function S_(r,e){if(r[0]instanceof N&&e[0]instanceof N){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=vy(t.value)),n._keyBytes||(n._keyBytes=vy(n.value)),Rd(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function vy(r){return Kd(r,Ji,Ty)}function Xc(r,e,t,n){if(Array.isArray(e))for(let o of e)Xc(r,o,t,n);else t[e.type.major](r,e,n)}var Sy=y.uint.majorEncoded,Ay=y.negint.majorEncoded,A_=y.bytes.majorEncoded,I_=y.string.majorEncoded,Iy=y.array.majorEncoded,T_=y.float.majorEncoded|ng,__=y.float.majorEncoded|og,C_=y.float.majorEncoded|sg,k_=y.float.majorEncoded|ig,P_=BigInt(-1),R_=BigInt(1);function L_(r){return r.addBreakTokens!==!0}function _y(r,e,t,n){let o=tg(e),s=t.typeEncoders&&t.typeEncoders[o];if(s){let i=s(e,o,t,n);if(i!=null){Xc(r,i,Ji,t);return}}switch(o){case"null":r.push([C_]);return;case"undefined":r.push([k_]);return;case"boolean":r.push([e?__:T_]);return;case"number":!Number.isInteger(e)||!Number.isSafeInteger(e)?jc(r,new N(y.float,e),t):e>=0?Ke(r,Sy,e):Ke(r,Ay,e*-1-1);return;case"bigint":e>=BigInt(0)?Ke(r,Sy,e):Ke(r,Ay,e*P_-R_);return;case"string":{let i=ji(e);Ke(r,I_,i.length),r.push(i);return}case"Uint8Array":Ke(r,A_,e.length),r.push(e);return;case"Array":if(!e.length){r.push([Iy]);return}n=Qc.createCheck(n,e),Ke(r,Iy,e.length);for(let i of e)_y(r,i,t,n);return;case"Object":case"Map":{let i=En.Object(e,o,t,n);Xc(r,i,Ji,t)}return;default:{let i=En[o];if(!i)throw new Error(`${bn} unsupported type: ${o}`);let a=i(e,o,t,n);Xc(r,a,Ji,t)}}}function Kd(r,e,t,n){let o=n instanceof Uint8Array,s=o?new Ld(n):Fd,i=$d(r,t);if(!Array.isArray(i)&&t.quickEncodeToken){let a=t.quickEncodeToken(i);if(a)return o?(s.push(a),s.toBytes()):a;let c=e[i.type.major];if(c.encodedSize){let l=c.encodedSize(i,t);if(o||(s=new Wc(l)),c(s,i,t),s.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${i} was wrong`);return o?s.toBytes():Us(s.chunks[0])}}return s.reset(),Xc(s,i,e,t),s.toBytes(!0)}function Ko(r,e){return e=Object.assign({},b_,e),L_(e)?(Fd.reset(),_y(Fd,r,e,void 0),Fd.toBytes(!0)):Kd(r,Ji,e)}var D_={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Vd=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=Xr[e];if(t===void 0){let n=V[e];if(!n)throw new Error(`${J} 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}},Zc=Symbol.for("DONE"),Hd=Symbol.for("BREAK");function N_(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=ea(e,t);if(s===Hd){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed array`)}if(s===Zc)throw new Error(`${J} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function O_(r,e,t){let n=t.useMaps===!0,o=t.rejectDuplicateMapKeys===!0,s=n?void 0:{},i=n?new Map:void 0;for(let a=0;a<r.value;a++){let c=ea(e,t);if(c===Hd){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed map`)}if(c===Zc)throw new Error(`${J} found map but not enough entries (got ${a} [no key], expected ${r.value})`);if(!n&&typeof c!="string")throw new Error(`${J} non-string keys not supported (got ${typeof c})`);if(o&&(n&&i.has(c)||!n&&Object.hasOwn(s,c)))throw new Error(`${J} found repeat map key "${c}"`);let l=ea(e,t);if(l===Zc)throw new Error(`${J} found map but not enough entries (got ${a} [no value], expected ${r.value})`);n?i.set(c,l):s[c]=l}return n?i:s}function ea(r,e){if(r.done())return Zc;let t=r.next();if(y.equals(t.type,y.break))return Hd;if(t.type.terminal)return t.value;if(y.equals(t.type,y.array))return N_(t,r,e);if(y.equals(t.type,y.map))return O_(t,r,e);if(y.equals(t.type,y.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=ea(r,e);return e.tags[t.value](n)}throw new Error(`${J} tag not supported (${t.value})`)}throw new Error("unsupported")}function dg(r,e){if(!(r instanceof Uint8Array))throw new Error(`${J} data to decode must be a Uint8Array`);e=Object.assign({},D_,e);let t=Us(r),n=e.tokenizer||new Vd(t,e),o=ea(n,e);if(o===Zc)throw new Error(`${J} did not find any content to decode`);if(o===Hd)throw new Error(`${J} got unexpected break`);return[o,r.subarray(n.pos())]}function br(r,e){let[t,n]=dg(r,e);if(n.length>0)throw new Error(`${J} too many terminals, data makes no sense`);return t}var qd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},ta=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Wd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Jc=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function zd(r){return r[Symbol.asyncIterator]!=null}function Cy(r,e){if(r.byteLength>e)throw new ta("Message length too long")}var Yd=r=>{let e=he(r),t=Ge(e);return Mt(r,t),Yd.bytes=e,t};Yd.bytes=0;function Qn(r,e){e=e??{};let t=e.lengthEncoder??Yd,n=e?.maxDataLength??4194304;function*o(s){Cy(s,n);let i=t(s.byteLength);i instanceof Uint8Array?yield i:yield*i,s instanceof Uint8Array?yield s:yield*s}return zd(r)?(async function*(){for await(let s of r)yield*o(s)})():(function*(){for(let s of r)yield*o(s)})()}Qn.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Yd,n=e?.maxDataLength??4194304;return Cy(r,n),new X(t(r.byteLength),r)};var $s;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})($s||($s={}));var hg=r=>{let e=hr(r);return hg.bytes=he(e),e};hg.bytes=0;function Ks(r,e){let t=new X,n=$s.LENGTH,o=-1,s=e?.lengthDecoder??hg,i=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===$s.LENGTH)try{if(o=s(t),o<0)throw new qd("Invalid message length");if(o>a)throw new ta("Message length too long");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=$s.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw new Wd("Message length length too long");break}throw l}if(n===$s.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=$s.LENGTH}}}return zd(r)?(async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Jc("Unexpected end of input")})():(function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Jc("Unexpected end of input")})()}Ks.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 Ks(n,{...e??{},onLength:s=>{t=s}})};function B_(r,e){if(typeof r=="string")return U_(r);if(typeof r=="number")return K_(r,e);throw Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(r)}`)}var jd=B_;function U_(r){if(typeof r!="string"||r.length===0||r.length>100)throw Error(`Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(r)}`);let e=/^(?<value>-?\d*\.?\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(r);if(!e?.groups)return NaN;let{value:t,unit:n="ms"}=e.groups,o=parseFloat(t),s=n.toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return o*315576e5;case"months":case"month":case"mo":return o*26298e5;case"weeks":case"week":case"w":return o*6048e5;case"days":case"day":case"d":return o*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return o*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return o*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return o*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:throw Error(`Unknown unit "${s}" provided to ms.parse(). value=${JSON.stringify(r)}`)}}function F_(r){let e=Math.abs(r);return e>=315576e5?`${Math.round(r/315576e5)}y`:e>=26298e5?`${Math.round(r/26298e5)}mo`:e>=6048e5?`${Math.round(r/6048e5)}w`: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 $_(r){let e=Math.abs(r);return e>=315576e5?Vs(r,e,315576e5,"year"):e>=26298e5?Vs(r,e,26298e5,"month"):e>=6048e5?Vs(r,e,6048e5,"week"):e>=864e5?Vs(r,e,864e5,"day"):e>=36e5?Vs(r,e,36e5,"hour"):e>=6e4?Vs(r,e,6e4,"minute"):e>=1e3?Vs(r,e,1e3,"second"):`${r} ms`}function K_(r,e){if(typeof r!="number"||!Number.isFinite(r))throw Error("Value provided to ms.format() must be of type number.");return e?.long?$_(r):F_(r)}function Vs(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function pg(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=jd,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,u){let f,h=null,p,g;function m(...w){if(!m.enabled)return;let T=m,I=Number(new Date),D=I-(f||I);T.diff=D,T.prev=f,T.curr=I,f=I,w[0]=t.coerce(w[0]),typeof w[0]!="string"&&w.unshift("%O");let F=0;w[0]=w[0].replace(/%([a-zA-Z%])/g,(z,S)=>{if(z==="%%")return"%";F++;let x=t.formatters[S];if(typeof x=="function"){let L=w[F];z=x.call(T,L),w.splice(F,1),F--}return z}),t.formatArgs.call(T,w),u?.onLog!=null&&u.onLog(...w),(T.log||t.log).apply(T,w)}return m.namespace=d,m.useColors=t.useColors(),m.color=t.selectColor(d),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(p!==t.namespaces&&(p=t.namespaces,g=t.enabled(d)),g),set:w=>{h=w}}),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 Xd=Y_(),V_=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function H_(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function q_(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+jd(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 W_=console.debug??console.log??(()=>{});function z_(r){try{r?Xd?.setItem("debug",r):Xd?.removeItem("debug")}catch{}}function G_(){let r;try{r=Xd?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function Y_(){try{return localStorage}catch{}}function j_(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var Py=pg({formatArgs:q_,save:z_,load:G_,useColors:H_,setupFormatters:j_,colors:V_,storage:Xd,log:W_});var rr=Py;rr.formatters.b=r=>r==null?"undefined":De.baseEncode(r);rr.formatters.t=r=>r==null?"undefined":ut.baseEncode(r);rr.formatters.m=r=>r==null?"undefined":rt.baseEncode(r);rr.formatters.p=r=>r==null?"undefined":r.toString();rr.formatters.c=r=>r==null?"undefined":r.toString();rr.formatters.k=r=>r==null?"undefined":r.toString();rr.formatters.a=r=>r==null?"undefined":r.toString();function Ry(r,e=""){let t=Ly(r.message),n=Ly(r.stack);return t!=null&&n!=null?n.includes(t)?`${n.split(`
2
+ "use strict";var Helia=(()=>{var MC=Object.create;var af=Object.defineProperty;var UC=Object.getOwnPropertyDescriptor;var FC=Object.getOwnPropertyNames;var $C=Object.getPrototypeOf,VC=Object.prototype.hasOwnProperty;var Kn=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ht=(r,e)=>{for(var t in e)af(r,t,{get:e[t],enumerable:!0})},Py=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of FC(e))!VC.call(r,o)&&o!==t&&af(r,o,{get:()=>e[o],enumerable:!(n=UC(e,o))||n.enumerable});return r};var yo=(r,e,t)=>(t=r!=null?MC($C(r)):{},Py(e||!r||!r.__esModule?af(t,"default",{value:r,enumerable:!0}):t,r)),KC=r=>Py(af({},"__esModule",{value:!0}),r);var Ny=Kn((zV,ig)=>{"use strict";var HC=Object.prototype.hasOwnProperty,ar="~";function cl(){}Object.create&&(cl.prototype=Object.create(null),new cl().__proto__||(ar=!1));function qC(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function Dy(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new qC(t,n||r,o),s=ar?ar+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],i]:r._events[s].push(i):(r._events[s]=i,r._eventsCount++),r}function wf(r,e){--r._eventsCount===0?r._events=new cl:delete r._events[e]}function Yt(){this._events=new cl,this._eventsCount=0}Yt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)HC.call(t,n)&&e.push(ar?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Yt.prototype.listeners=function(e){var t=ar?ar+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o<i;o++)s[o]=n[o].fn;return s};Yt.prototype.listenerCount=function(e){var t=ar?ar+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Yt.prototype.emit=function(e,t,n,o,i,s){var a=ar?ar+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,u,d;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,i),!0;case 6:return c.fn.call(c.context,t,n,o,i,s),!0}for(d=1,u=new Array(l-1);d<l;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var f=c.length,h;for(d=0;d<f;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),l){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,o);break;default:if(!u)for(h=1,u=new Array(l-1);h<l;h++)u[h-1]=arguments[h];c[d].fn.apply(c[d].context,u)}}return!0};Yt.prototype.on=function(e,t,n){return Dy(this,e,t,n,!1)};Yt.prototype.once=function(e,t,n){return Dy(this,e,t,n,!0)};Yt.prototype.removeListener=function(e,t,n,o){var i=ar?ar+e:e;if(!this._events[i])return this;if(!t)return wf(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&wf(this,i);else{for(var a=0,c=[],l=s.length;a<l;a++)(s[a].fn!==t||o&&!s[a].once||n&&s[a].context!==n)&&c.push(s[a]);c.length?this._events[i]=c.length===1?c[0]:c:wf(this,i)}return this};Yt.prototype.removeAllListeners=function(e){var t;return e?(t=ar?ar+e:e,this._events[t]&&wf(this,t)):(this._events=new cl,this._eventsCount=0),this};Yt.prototype.off=Yt.prototype.removeListener;Yt.prototype.addListener=Yt.prototype.on;Yt.prefixed=ar;Yt.EventEmitter=Yt;typeof ig<"u"&&(ig.exports=Yt)});var n7=Kn((iH,r7)=>{r7.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(i,s){t[i]=s,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(i){return t[i]!==void 0||n[i]!==void 0},remove:function(i){t[i]!==void 0&&(t[i]=void 0),n[i]!==void 0&&(n[i]=void 0)},get:function(i){var s=t[i];if(s!==void 0)return s;if((s=n[i])!==void 0)return o(i,s),s},set:function(i,s){t[i]!==void 0?t[i]=s:o(i,s)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var hw=Kn(Yl=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,u,d,f;return l=(c&255<<24)>>>24,u=(c&255<<16)>>>16,d=(c&65280)>>>8,f=c&255,[l,u,d,f].join(".")},s=function(c){var l,u,d,f,h,p;for(l=[],d=f=0;f<=3&&c.length!==0;d=++f){if(d>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],u=p[1],c=c.substring(u),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"),i=t("a"),o=t("A"),e=function(c){var l,u,d,f,h;for(f=0,l=10,u="9",d=0,c.length>1&&c[d]==="0"&&(c[d+1]==="x"||c[d+1]==="X"?(d+=2,l=16):"0"<=c[d+1]&&c[d+1]<="9"&&(d++,l=8,u="7")),h=d;d<c.length;){if("0"<=c[d]&&c[d]<=u)f=f*l+(t(c[d])-n)>>>0;else if(l===16)if("a"<=c[d]&&c[d]<="f")f=f*l+(10+t(c[d])-i)>>>0;else if("A"<=c[d]&&c[d]<="F")f=f*l+(10+t(c[d])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");d++}if(d===h)throw new Error("empty octet");return[f,d]},r=(function(){function c(l,u){var d,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(u||(p=l.split("/",2),l=p[0],u=p[1]),u||(u=32),typeof u=="string"&&u.indexOf(".")>-1){try{this.maskLong=s(u)}catch(y){throw d=y,new Error("Invalid mask: "+u)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(u||u===0)this.bitmask=parseInt(u,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(s(l)&this.maskLong)>>>0}catch(y){throw d=y,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+u);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):(s(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 u,d,f;for(f=s(this.first),d=s(this.last),u=0;f<=d;)l(a(f),f,u),u++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c})(),Yl.ip2long=s,Yl.long2ip=a,Yl.Netmask=r}).call(Yl)});var hp=Kn((nse,j6)=>{var rse=(function(){typeof j6<"u"&&(j6.exports=y);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,i=864e13,s=4294967296,a=1e6,c="000000000",l=Math.trunc||function(T){var S=T-T%1;return S==0&&(T<0||T===0&&1/T!=1/0)?-0:S},u=y.prototype,d=(y.fromDate=function(T){return new y(+T)},y.fromInt64BE=L(0,1,2,3,0,4),y.fromInt64LE=L(3,2,1,0,4,0),y.fromString=function(U){var S,O=new y,U=(U+="").replace(/^\s*[+\-]?\d+/,function(A){var A=+A,E=1970+(A-1970)%400;return O.year=A-E,E}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(D,A,E){return A<0&&(E*=-1),S=6e4*(60*+A+ +E),""}).replace(/\.\d+$/,function(D){return O.nano=+(D+c).substr(1,9),""}).split(/\D+/);if(1<U.length?U[1]--:U[1]=0,O.time=S=Date.UTC.apply(Date,U)-(S||0),isNaN(S))throw new TypeError("Invalid Date");return g(O)},y.fromTimeT=function(T){return b(T,0)},u.year=0,u.time=0,u.nano=0,u.addNano=function(T){return this.nano+=+T||0,this},u.getNano=function(){var T=g(this);return(T.time%1e3*a+ +T.nano+1e9)%1e9},u.getTimeT=function(){var S=g(this),T=Math.floor(S.time/1e3),S=S.year;return S&&(T+=S*t*r/e),T},u.getYear=function(){return this.toDate().getUTCFullYear()+this.year},u.toDate=function(){return m(g(this).time)},u.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},u.toString=function(T){var S=this,O=S.toDate(),U={H:function(){return $(O.getUTCHours())},L:function(){return Y(O.getUTCMilliseconds(),3)},M:function(){return $(O.getUTCMinutes())},N:function(){return Y(S.getNano(),9)},S:function(){return $(O.getUTCSeconds())},Y:function(){var D=S.getYear();return 999999<D?"+"+D:9999<D?"+"+Y(D,6):0<=D?Y(D,4):-999999<=D?"-"+Y(-D,6):D},a:function(){return h[O.getUTCDay()]},b:function(){return f[O.getUTCMonth()]},d:function(){return $(O.getUTCDate())},e:function(){return(function(D){return(9<D?"":" ")+(0|D)})(O.getUTCDate())},m:function(){return $(O.getUTCMonth()+1)}};return(function D(A){return A.replace(/%./g,function(E){var k=E[1],x=p[k],k=U[k];return x?D(x):k?k():E})})(T||d)},u.writeInt64BE=v(0,1,2,3,0,4),u.writeInt64LE=v(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 y;function y(T,S,O){var U=this;if(!(U instanceof y))return new y(T,S,O);U.time=+T||0,U.nano=+S||0,U.year=+O||0,g(U)}function g(T){var S,O,U,D=T.year,A=T.time,E=T.nano,x=((E<0||a<=E)&&(E-=(O=Math.floor(E/a))*a,A+=O,O=1),D%e);return(A<-i||i<A||x)&&((S=l(A/o))&&(D+=S*e,A-=S*o),(U=m(A)).setUTCFullYear(x+U.getUTCFullYear()),U=(A=+U)+(S=l((D-=x)/e))*o,S&&-i<=U&&U<=i&&(D-=S*e,A=U),O=1),O&&(T.year=D,T.time=A,T.nano=E),T}function m(T){var S=new Date(0);return S.setTime(T),S}function b(D,U){D=+D||0;var O=l((U=(U|0)*s)/n)+l(D/n),U=U%n+D%n,D=l(U/n);return D&&(O+=D,U-=D*n),new y(1e3*U,0,O*e)}function v(T,S,O,U,D,A){return function(x,k){var B=g(this);x=x||new Array(8),V(x,k|=0);var P=Math.floor(B.time/1e3),B=B.year*(t*r/e),M=l(B/s)+l(P/s),B=B%s+P%s,P=Math.floor(B/s);return P&&(M+=P,B-=P*s),E(x,k+D,M),E(x,k+A,B),x};function E(x,k,M){x[k+T]=M>>24&255,x[k+S]=M>>16&255,x[k+O]=M>>8&255,x[k+U]=255&M}}function L(T,S,O,U,D,A){return function(x,k){V(x,k|=0);var M=E(x,k+D);return b(E(x,k+A),M)};function E(x,k){return 16777216*x[k+T]+(x[k+S]<<16|x[k+O]<<8|x[k+U])}}function V(T,S){if(T=T&&T.length,T==null)throw new TypeError("Invalid Buffer");if(T<S+8)throw new RangeError("Out of range")}function $(T){return(9<T?"":"0")+(0|T)}function Y(T,S){return(c+(0|T)).substr(-S)}})()});var xA=Kn((Q1e,bA)=>{"use strict";function rU(r){return r>=55296&&r<=56319}function nU(r){return r>=56320&&r<=57343}bA.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,i=0,s,a,c=0;c<o;c+=1){if(s=t.charCodeAt(c),a=t[c],rU(s)&&nU(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),i+=e(a),i===n)return t.slice(0,c+1);if(i>n)return t.slice(0,c-a.length+1)}return t}});var vA=Kn((Z1e,EA)=>{"use strict";function oU(r){return r>=55296&&r<=56319}function iU(r){return r>=56320&&r<=57343}EA.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,i=null,s=0;s<t;s++)o=e.charCodeAt(s),iU(o)?i!=null&&oU(i)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),i=o;return n}});var AA=Kn((J1e,SA)=>{"use strict";var sU=xA(),aU=vA();SA.exports=sU.bind(null,aU)});var IA=Kn((epe,_A)=>{"use strict";var cU=AA(),lU=/[\/\?<>\\:\*\|"]/g,uU=/[\x00-\x1f\x80-\x9f]/g,dU=/^\.+$/,fU=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i;function hU(r,e){for(var t=r.length;t>0&&(r[t-1]==="."||r[t-1]===" ");)t--;return t<r.length?r.slice(0,t)+e:r}function TA(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(lU,e).replace(uU,e).replace(dU,e).replace(fU,e);return t=hU(t,e),cU(t,255)}_A.exports=function(r,e){var t=e&&e.replacement||"",n=TA(r,t);return t===""?n:TA(n,"")}});var CA=Kn(Fc=>{"use strict";var mU="[object ArrayBuffer]",Xo=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===mU}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 i=0;i<n.length;i++)if(n[i]!==o[i])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 s of t)n+=s.byteLength;let o=new Uint8Array(n),i=0;for(let s of t){let a=this.toUint8Array(s);o.set(a,i),i+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},q8="string",gU=/^[0-9a-f\s]+$/i,yU=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,wU=/^[a-zA-Z0-9-_]+$/,b0=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=Xo.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},dn=class{static toString(e,t=!1){let n=Xo.toArrayBuffer(e),o=new DataView(n),i="";for(let s=0;s<n.byteLength;s+=2){let a=o.getUint16(s,t);i+=String.fromCharCode(a)}return i}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let i=0;i<e.length;i++)o.setUint16(i*2,e.charCodeAt(i),t);return n}},x0=class r{static isHex(e){return typeof e===q8&&gU.test(e)}static isBase64(e){return typeof e===q8&&yU.test(e)}static isBase64Url(e){return typeof e===q8&&wU.test(e)}static ToString(e,t="utf8"){let n=Xo.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 dn.toString(n,!0);case"utf16":case"utf16be":return dn.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 dn.fromString(e,!0);case"utf16":case"utf16be":return dn.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Xo.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 b0.fromString(e);case"utf16":case"utf16be":return dn.fromString(e);case"utf16le":case"usc2":return dn.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 b0.toString(e);case"utf16":case"utf16be":return dn.toString(e);case"utf16le":case"usc2":return dn.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=Xo.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Xo.toUint8Array(e),n="",o=t.length;for(let i=0;i<o;i++){let s=t[i];s<16&&(n+="0"),n+=s.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 i=t.slice(o,o+2);n[o/2]=parseInt(i,16)}return n.buffer}static ToUtf16String(e,t=!1){return dn.toString(e,t)}static FromUtf16String(e,t=!1){return dn.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,"")||""}};x0.DEFAULT_UTF8_ENCODING="utf8";function bU(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let i in o)t[i]=o[i]}return t}function xU(...r){let e=r.map(o=>o.byteLength).reduce((o,i)=>o+i),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let i of o)t[n++]=i}),t.buffer}function EU(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}Fc.BufferSourceConverter=Xo;Fc.Convert=x0;Fc.assign=bU;Fc.combine=xU;Fc.isEqual=EU});var Z_=Kn(go=>{"use strict";Object.defineProperty(go,"__esModule",{value:!0});go.parseCookie=X_;go.parse=X_;go.stringifyCookie=XF;go.stringifySetCookie=e2;go.serialize=e2;go.parseSetCookie=QF;go.stringifySetCookie=e2;go.serialize=e2;var Y_=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,j_=/^[\u0021-\u003A\u003C-\u007E]*$/,zF=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,WF=/^[\u0020-\u003A\u003D-\u007E]*$/,GF=/^-?\d+$/,YF=Object.prototype.toString,jF=(()=>{let r=function(){};return r.prototype=Object.create(null),r})();function X_(r,e){let t=new jF,n=r.length;if(n<2)return t;let o=e?.decode||Q_,i=0;do{let s=Q5(r,i,n);if(s===-1)break;let a=X5(r,i,n);if(s>a){i=r.lastIndexOf(";",s-1)+1;continue}let c=Gi(r,i,s);t[c]===void 0&&(t[c]=o(Gi(r,s+1,a))),i=a+1}while(i<n);return t}function XF(r,e){let t=e?.encode||encodeURIComponent,n=[];for(let o of Object.keys(r)){let i=r[o];if(i===void 0)continue;if(!Y_.test(o))throw new TypeError(`cookie name is invalid: ${o}`);let s=t(i);if(!j_.test(s))throw new TypeError(`cookie val is invalid: ${i}`);n.push(`${o}=${s}`)}return n.join("; ")}function e2(r,e,t){let n=typeof r=="object"?r:{...t,name:r,value:String(e)},i=(typeof e=="object"?e:t)?.encode||encodeURIComponent;if(!Y_.test(n.name))throw new TypeError(`argument name is invalid: ${n.name}`);let s=n.value?i(n.value):"";if(!j_.test(s))throw new TypeError(`argument val is invalid: ${n.value}`);let a=n.name+"="+s;if(n.maxAge!==void 0){if(!Number.isInteger(n.maxAge))throw new TypeError(`option maxAge is invalid: ${n.maxAge}`);a+="; Max-Age="+n.maxAge}if(n.domain){if(!zF.test(n.domain))throw new TypeError(`option domain is invalid: ${n.domain}`);a+="; Domain="+n.domain}if(n.path){if(!WF.test(n.path))throw new TypeError(`option path is invalid: ${n.path}`);a+="; Path="+n.path}if(n.expires){if(!ZF(n.expires)||!Number.isFinite(n.expires.valueOf()))throw new TypeError(`option expires is invalid: ${n.expires}`);a+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(a+="; HttpOnly"),n.secure&&(a+="; Secure"),n.partitioned&&(a+="; Partitioned"),n.priority)switch(typeof n.priority=="string"?n.priority.toLowerCase():void 0){case"low":a+="; Priority=Low";break;case"medium":a+="; Priority=Medium";break;case"high":a+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${n.priority}`)}if(n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:case"strict":a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"none":a+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${n.sameSite}`)}return a}function QF(r,e){let t=e?.decode||Q_,n=r.length,o=X5(r,0,n),i=Q5(r,0,o),s=i===-1?{name:"",value:t(Gi(r,0,o))}:{name:Gi(r,0,i),value:t(Gi(r,i+1,o))},a=o+1;for(;a<n;){let c=X5(r,a,n),l=Q5(r,a,c),u=l===-1?Gi(r,a,c):Gi(r,a,l),d=l===-1?void 0:Gi(r,l+1,c);switch(u.toLowerCase()){case"httponly":s.httpOnly=!0;break;case"secure":s.secure=!0;break;case"partitioned":s.partitioned=!0;break;case"domain":s.domain=d;break;case"path":s.path=d;break;case"max-age":d&&GF.test(d)&&(s.maxAge=Number(d));break;case"expires":if(!d)break;let f=new Date(d);Number.isFinite(f.valueOf())&&(s.expires=f);break;case"priority":if(!d)break;let h=d.toLowerCase();(h==="low"||h==="medium"||h==="high")&&(s.priority=h);break;case"samesite":if(!d)break;let p=d.toLowerCase();(p==="lax"||p==="strict"||p==="none")&&(s.sameSite=p);break}a=c+1}return s}function X5(r,e,t){let n=r.indexOf(";",e);return n===-1?t:n}function Q5(r,e,t){let n=r.indexOf("=",e);return n<t?n:-1}function Gi(r,e,t){let n=e,o=t;do{let i=r.charCodeAt(n);if(i!==32&&i!==9)break}while(++n<o);for(;o>n;){let i=r.charCodeAt(o-1);if(i!==32&&i!==9)break;o--}return r.slice(n,o)}function Q_(r){if(r.indexOf("%")===-1)return r;try{return decodeURIComponent(r)}catch{return r}}function ZF(r){return YF.call(r)==="[object Date]"}});var iV={};ht(iV,{DEFAULT_CID_PEER_FILTER_SIZE:()=>N4,DEFAULT_SESSION_MAX_PROVIDERS:()=>D4,DEFAULT_SESSION_MIN_PROVIDERS:()=>L4,InsufficientProvidersError:()=>mu,InvalidCodecError:()=>O4,NoRoutersAvailableError:()=>Ci,UnknownCodecError:()=>yu,UnknownHashAlgorithmError:()=>gu,createHelia:()=>oV,heliaDefaults:()=>Iy,libp2pDefaults:()=>og});var Ly=Symbol.for("@libp2p/connection");var wo=Symbol.for("@libp2p/content-routing");var sr=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},cf=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},lf=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},_=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},bo=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},nl=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}},ol=class extends Error{static name="UnsupportedOperationError";constructor(e="Unsupported operation"){super(e),this.name="UnsupportedOperationError"}};var os=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},xa=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"}},Ea=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}};var Hn=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},il=class extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}},We=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},va=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},qn=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},uf=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},si=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Sa=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},ve=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},is=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},zn=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},pn=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var ai=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},ss=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},sl=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},df=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},Aa=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},mn=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var ff=class extends Event{data;constructor(e,t){super("message",t),this.data=e}},ci=class extends Event{error;local;constructor(e,t,n){super("close",n),this.error=t,this.local=e}},hf=class extends ci{constructor(e,t){super(!0,e,t)}},pf=class extends ci{constructor(e,t){super(!1,e,t)}};var as=Symbol.for("@libp2p/peer-discovery");var mf=Symbol.for("@libp2p/peer-id");function Gt(r){return!!r?.[mf]}var xo=Symbol.for("@libp2p/peer-routing");var cs="keep-alive";function gf(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function xt(...r){let e=[];for(let t of r)gf(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 St(...r){let e=[];for(let t of r)gf(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 li=Symbol.for("@libp2p/transport");var al;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(al||(al={}));var ue=class extends EventTarget{#e=new Map;constructor(){super()}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:i})=>i!==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))}};var Te=Symbol.for("@libp2p/service-capabilities"),Ir=Symbol.for("@libp2p/service-dependencies");var K=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var yf=class extends AggregateError{static name="DNSQueryFailedError";name="DNSQueryFailedError"};var sg=yo(Ny(),1);var ag=class r extends Error{name="TimeoutError";constructor(e,t){super(e,t),Error.captureStackTrace?.(this,r)}},Oy=r=>r.reason??new DOMException("This operation was aborted.","AbortError");function ll(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout},signal:s}=e,a,c,u=new Promise((d,f)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(s?.aborted){f(Oy(s));return}if(s&&(c=()=>{f(Oy(s))},s.addEventListener("abort",c,{once:!0})),r.then(d,f),t===Number.POSITIVE_INFINITY)return;let h=new ag;a=i.setTimeout.call(void 0,()=>{if(n){try{d(n())}catch(p){f(p)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?d():o instanceof Error?f(o):(h.message=o??`Promise timed out after ${t} milliseconds`,f(h))},t)}).finally(()=>{u.clear(),c&&s&&s.removeEventListener("abort",c)});return u.clear=()=>{i.clearTimeout.call(void 0,a),a=void 0},u}function cg(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var Ta=class{#e=[];enqueue(e,t){let{priority:n=0,id:o}=t??{},i={priority:n,id:o,run:e};if(this.size===0||this.#e[this.size-1].priority>=n){this.#e.push(i);return}let s=cg(this.#e,i,(a,c)=>c.priority-a.priority);this.#e.splice(s,0,i)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}remove(e){let t=this.#e.findIndex(n=>typeof e=="string"?n.id===e:n.run===e);t!==-1&&this.#e.splice(t,1)}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 ls=class extends sg.default{#e;#t;#r=0;#a;#c=!1;#m=!1;#u;#I=0;#x=0;#d;#f;#l;#s=[];#i=0;#n;#C;#o=0;#y;#h;#D=1n;#w=new Map;#E=new Set;timeout;constructor(e){if(super(),e={carryoverIntervalCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Ta,strict:!1,...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})`);if(e.strict&&e.interval===0)throw new TypeError("The `strict` option requires a non-zero `interval`");if(e.strict&&e.intervalCap===Number.POSITIVE_INFINITY)throw new TypeError("The `strict` option requires a finite `intervalCap`");if(this.#e=e.carryoverIntervalCount??e.carryoverConcurrencyCount??!1,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#a=e.intervalCap,this.#u=e.interval,this.#l=e.strict,this.#n=new e.queueClass,this.#C=e.queueClass,this.concurrency=e.concurrency,e.timeout!==void 0&&!(Number.isFinite(e.timeout)&&e.timeout>0))throw new TypeError(`Expected \`timeout\` to be a positive finite number, got \`${e.timeout}\` (${typeof e.timeout})`);this.timeout=e.timeout,this.#h=e.autoStart===!1,this.#V()}#v(e){for(;this.#i<this.#s.length;){let n=this.#s[this.#i];if(n!==void 0&&e-n>=this.#u)this.#i++;else break}(this.#i>100&&this.#i>this.#s.length/2||this.#i===this.#s.length)&&(this.#s=this.#s.slice(this.#i),this.#i=0)}#N(e){this.#l?this.#s.push(e):this.#r++}#O(){this.#l?this.#s.length>this.#i&&this.#s.pop():this.#r>0&&this.#r--}#S(){return this.#s.length-this.#i}get#B(){return this.#t?!0:this.#l?this.#S()<this.#a:this.#r<this.#a}get#M(){return this.#o<this.#y}#U(){this.#o--,this.#o===0&&this.emit("pendingZero"),this.#b(),this.emit("next")}#F(){this.#f=void 0,this.#P(),this.#R()}#$(e){if(this.#l){if(this.#v(e),this.#S()>=this.#a){let n=this.#s[this.#i],o=this.#u-(e-n);return this.#A(o),!0}return!1}if(this.#d===void 0){let t=this.#I-e;if(t<0){if(this.#x>0){let n=e-this.#x;if(n<this.#u)return this.#A(this.#u-n),!0}this.#r=this.#e?this.#o:0}else return this.#A(t),!0}return!1}#A(e){this.#f===void 0&&(this.#f=setTimeout(()=>{this.#F()},e))}#T(){this.#d&&(clearInterval(this.#d),this.#d=void 0)}#k(){this.#f&&(clearTimeout(this.#f),this.#f=void 0)}#b(){if(this.#n.size===0){if(this.#T(),this.emit("empty"),this.#o===0){if(this.#k(),this.#l&&this.#i>0){let t=Date.now();this.#v(t)}this.emit("idle")}return!1}let e=!1;if(!this.#h){let t=Date.now(),n=!this.#$(t);if(this.#B&&this.#M){let o=this.#n.dequeue();this.#t||(this.#N(t),this.#g()),this.emit("active"),o(),n&&this.#R(),e=!0}}return e}#R(){this.#t||this.#d!==void 0||this.#l||(this.#d=setInterval(()=>{this.#P()},this.#u),this.#I=Date.now()+this.#u)}#P(){this.#l||(this.#r===0&&this.#o===0&&this.#d&&this.#T(),this.#r=this.#e?this.#o:0),this.#_(),this.#g()}#_(){for(;this.#b(););}get concurrency(){return this.#y}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.#y=e,this.#_()}setPriority(e,t){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`Expected \`priority\` to be a finite number, got \`${t}\` (${typeof t})`);this.#n.setPriority(e,t)}async add(e,t={}){return t={timeout:this.timeout,...t,id:t.id??(this.#D++).toString()},new Promise((n,o)=>{let i=Symbol(`task-${t.id}`),s=()=>{},a=async()=>{s(),this.#o++,this.#w.set(i,{id:t.id,priority:t.priority??0,startTime:Date.now(),timeout:t.timeout});let l;try{try{t.signal?.throwIfAborted()}catch(f){throw this.#K(),this.#w.delete(i),f}this.#x=Date.now();let u=e({signal:t.signal});if(t.timeout&&(u=ll(Promise.resolve(u),{milliseconds:t.timeout,message:`Task timed out after ${t.timeout}ms (queue has ${this.#o} running, ${this.#n.size} waiting)`})),t.signal){let{signal:f}=t;u=Promise.race([u,new Promise((h,p)=>{l=()=>{p(f.reason)},f.addEventListener("abort",l,{once:!0})})])}let d=await u;n(d),this.emit("completed",d)}catch(u){o(u),this.emit("error",u)}finally{l&&t.signal?.removeEventListener("abort",l),this.#w.delete(i),queueMicrotask(()=>{this.#U()})}};this.#n.enqueue(a,t);let c=()=>{if(this.#n instanceof Ta){this.#n.remove(a);return}this.#n.remove?.(t.id)};if(t.signal){let{signal:l}=t,u=()=>{s(),c(),o(l.reason),this.#b(),this.emit("next")};if(s=()=>{l.removeEventListener("abort",u),this.#E.delete(s)},l.aborted){u();return}l.addEventListener("abort",u,{once:!0}),this.#E.add(s)}this.emit("add"),this.#b()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#h?(this.#h=!1,this.#_(),this):this}pause(){this.#h=!0}clear(){for(let e of this.#E)e();this.#n=new this.#C,this.#T(),this.#L(),this.emit("empty"),this.#o===0&&(this.#k(),this.emit("idle")),this.emit("next")}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.#o===0&&this.#n.size===0||await this.#p("idle")}async onPendingZero(){this.#o!==0&&await this.#p("pendingZero")}async onRateLimit(){this.isRateLimited||await this.#p("rateLimit")}async onRateLimitCleared(){this.isRateLimited&&await this.#p("rateLimitCleared")}onError(){return new Promise((e,t)=>{let n=o=>{this.off("error",n),t(o)};this.on("error",n)})}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.#o}get isPaused(){return this.#h}#V(){this.#t||(this.on("add",()=>{this.#n.size>0&&this.#g()}),this.on("next",()=>{this.#g()}))}#g(){this.#t||this.#m||(this.#m=!0,queueMicrotask(()=>{this.#m=!1,this.#L()}))}#K(){this.#t||(this.#O(),this.#g())}#L(){let e=this.#c;if(this.#t||this.#n.size===0){e&&(this.#c=!1,this.emit("rateLimitCleared"));return}let t;if(this.#l){let o=Date.now();this.#v(o),t=this.#S()}else t=this.#r;let n=t>=this.#a;n!==e&&(this.#c=n,this.emit(n?"rateLimit":"rateLimitCleared"))}get isRateLimited(){return this.#c}get isSaturated(){return this.#o===this.#y&&this.#n.size>0||this.isRateLimited&&this.#n.size>0}get runningTasks(){return[...this.#w.values()].map(e=>({...e}))}};function bf(r){let e=[Cr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var pg={};ht(pg,{base10:()=>QC});var nK=new Uint8Array(0);function By(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 gn(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 My(r){return new TextEncoder().encode(r)}function Uy(r){return new TextDecoder().decode(r)}function zC(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 i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function d(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 y=0,g=0,m=0,b=p.length;m!==b&&p[m]===0;)m++,y++;for(var v=(b-m)*u+1>>>0,L=new Uint8Array(v);m!==b;){for(var V=p[m],$=0,Y=v-1;(V!==0||$<g)&&Y!==-1;Y--,$++)V+=256*L[Y]>>>0,L[Y]=V%a>>>0,V=V/a>>>0;if(V!==0)throw new Error("Non-zero carry");g=$,m++}for(var T=v-g;T!==v&&L[T]===0;)T++;for(var S=c.repeat(y);T<v;++T)S+=r.charAt(L[T]);return S}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var y=0;if(p[y]!==" "){for(var g=0,m=0;p[y]===c;)g++,y++;for(var b=(p.length-y)*l+1>>>0,v=new Uint8Array(b);p[y];){var L=t[p.charCodeAt(y)];if(L===255)return;for(var V=0,$=b-1;(L!==0||V<m)&&$!==-1;$--,V++)L+=a*v[$]>>>0,v[$]=L%256>>>0,L=L/256>>>0;if(L!==0)throw new Error("Non-zero carry");m=V,y++}if(p[y]!==" "){for(var Y=b-m;Y!==b&&v[Y]===0;)Y++;for(var T=new Uint8Array(g+(b-Y)),S=g;Y!==b;)T[S++]=v[Y++];return T}}}function h(p){var y=f(p);if(y)return y;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:f,decode:h}}var WC=zC,GC=WC,Fy=GC;var ug=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")}},dg=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 $y(this,e)}},fg=class{decoders;constructor(e){this.decoders=e}or(e){return $y(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 $y(r,e){return new fg({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var hg=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 ug(e,t,n),this.decoder=new dg(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function _a({name:r,prefix:e,encode:t,decode:n}){return new hg(r,e,t,n)}function ui({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=Fy(t,r);return _a({prefix:e,name:r,encode:n,decode:i=>gn(o(i))})}function YC(r,e,t,n){let o=r.length;for(;r[o-1]==="=";)--o;let i=new Uint8Array(o*t/8|0),s=0,a=0,c=0;for(let l=0;l<o;++l){let u=e[r[l]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<t|u,s+=t,s>=8&&(s-=8,i[c++]=255&a>>s)}if(s>=t||(255&a<<8-s)!==0)throw new SyntaxError("Unexpected end of data");return i}function jC(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,i+=e[o&a>>s];if(s!==0&&(i+=e[o&a<<t-s]),n)for(;(i.length*t&7)!==0;)i+="=";return i}function XC(r){let e={};for(let t=0;t<r.length;++t)e[r[t]]=t;return e}function ct({name:r,prefix:e,bitsPerChar:t,alphabet:n}){let o=XC(n);return _a({prefix:e,name:r,encode(i){return jC(i,n,t)},decode(i){return YC(i,o,t,r)}})}var QC=ui({prefix:"9",name:"base10",alphabet:"0123456789"});var mg={};ht(mg,{base16:()=>ZC,base16upper:()=>JC});var ZC=ct({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),JC=ct({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var gg={};ht(gg,{base2:()=>ek});var ek=ct({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var yg={};ht(yg,{base256emoji:()=>ik});var Vy=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}"),tk=Vy.reduce((r,e,t)=>(r[t]=e,r),[]),rk=Vy.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function nk(r){return r.reduce((e,t)=>(e+=tk[t],e),"")}function ok(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=rk[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var ik=_a({prefix:"\u{1F680}",name:"base256emoji",encode:nk,decode:ok});var wg={};ht(wg,{base32:()=>At,base32hex:()=>lk,base32hexpad:()=>dk,base32hexpadupper:()=>fk,base32hexupper:()=>uk,base32pad:()=>ak,base32padupper:()=>ck,base32upper:()=>sk,base32z:()=>hk});var At=ct({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),sk=ct({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),ak=ct({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),ck=ct({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),lk=ct({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),uk=ct({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),dk=ct({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),fk=ct({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),hk=ct({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var bg={};ht(bg,{base36:()=>Qr,base36upper:()=>pk});var Qr=ui({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),pk=ui({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var xg={};ht(xg,{base58btc:()=>Ge,base58flickr:()=>mk});var Ge=ui({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),mk=ui({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Eg={};ht(Eg,{base64:()=>mt,base64pad:()=>ul,base64url:()=>dl,base64urlpad:()=>gk});var mt=ct({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),ul=ct({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),dl=ct({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),gk=ct({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var vg={};ht(vg,{base8:()=>yk});var yk=ct({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Sg={};ht(Sg,{identity:()=>wk});var wk=_a({prefix:"\0",name:"identity",encode:r=>Uy(r),decode:r=>My(r)});var xf={};ht(xf,{code:()=>Ag,decode:()=>Sk,encode:()=>vk,name:()=>Ek});var bk=new TextEncoder,xk=new TextDecoder,Ek="json",Ag=512;function vk(r){return bk.encode(JSON.stringify(r))}function Sk(r){return JSON.parse(xk.decode(r))}var us={};ht(us,{code:()=>Eo,decode:()=>_k,encode:()=>Tk,name:()=>Ak});var Ak="raw",Eo=85;function Tk(r){return gn(r)}function _k(r){return gn(r)}var Ig={};ht(Ig,{identity:()=>Tt});var nt={};ht(nt,{Digest:()=>ds,create:()=>cr,decode:()=>He,equals:()=>_g,hasCode:()=>zk});var Ik=qy,Ky=128,Ck=127,kk=~Ck,Rk=Math.pow(2,31);function qy(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Rk;)e[t++]=r&255|Ky,r/=128;for(;r&kk;)e[t++]=r&255|Ky,r>>>=7;return e[t]=r|0,qy.bytes=t-n+1,e}var Pk=Tg,Lk=128,Hy=127;function Tg(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw Tg.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&Hy)<<o:(s&Hy)*Math.pow(2,o),o+=7}while(s>=Lk);return Tg.bytes=i-n,t}var Dk=Math.pow(2,7),Nk=Math.pow(2,14),Ok=Math.pow(2,21),Bk=Math.pow(2,28),Mk=Math.pow(2,35),Uk=Math.pow(2,42),Fk=Math.pow(2,49),$k=Math.pow(2,56),Vk=Math.pow(2,63),Kk=function(r){return r<Dk?1:r<Nk?2:r<Ok?3:r<Bk?4:r<Mk?5:r<Uk?6:r<Fk?7:r<$k?8:r<Vk?9:10},Hk={encode:Ik,decode:Pk,encodingLength:Kk},qk=Hk,fl=qk;function hl(r,e=0){return[fl.decode(r,e),fl.decode.bytes]}function Ia(r,e,t=0){return fl.encode(r,e,t),e}function Ca(r){return fl.encodingLength(r)}function cr(r,e){let t=e.byteLength,n=Ca(r),o=n+Ca(t),i=new Uint8Array(o+t);return Ia(r,i,0),Ia(t,i,n),i.set(e,o),new ds(r,t,e,i)}function He(r){let e=gn(r),[t,n]=hl(e),[o,i]=hl(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new ds(t,o,s,e)}function _g(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&By(r.bytes,t.bytes)}}var ds=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function zk(r,e){return r.code===e}var zy=0,Wk="identity",Wy=gn;function Gk(r,e){if(e?.truncate!=null&&e.truncate!==r.byteLength){if(e.truncate<0||e.truncate>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,e.truncate)}return cr(zy,Wy(r))}var Tt={code:zy,name:Wk,encode:Wy,digest:Gk};var kg={};ht(kg,{sha256:()=>st,sha512:()=>vf});var Yk=20;function pl({name:r,code:e,encode:t,minDigestLength:n,maxDigestLength:o}){return new Cg(r,e,t,n,o)}var Cg=class{name;code;encode;minDigestLength;maxDigestLength;constructor(e,t,n,o,i){this.name=e,this.code=t,this.encode=n,this.minDigestLength=o??Yk,this.maxDigestLength=i}digest(e,t){if(t?.truncate!=null){if(t.truncate<this.minDigestLength)throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`);if(this.maxDigestLength!=null&&t.truncate>this.maxDigestLength)throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)}if(e instanceof Uint8Array){let n=this.encode(e);return n instanceof Uint8Array?Gy(n,this.code,t?.truncate):n.then(o=>Gy(o,this.code,t?.truncate))}else throw Error("Unknown type, must be binary type")}};function Gy(r,e,t){if(t!=null&&t!==r.byteLength){if(t>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,t)}return cr(e,r)}function jy(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var st=pl({name:"sha2-256",code:18,encode:jy("SHA-256")}),vf=pl({name:"sha2-512",code:19,encode:jy("SHA-512")});function Xy(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return Xk(t,Rg(r),e??Ge.encoder);default:return Qk(t,Rg(r),e??At.encoder)}}var Qy=new WeakMap;function Rg(r){let e=Qy.get(r);if(e==null){let t=new Map;return Qy.set(r,t),t}return e}var J=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!==ml)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==Zk)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=cr(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&&_g(e.multihash,n.multihash)}toString(e){return Xy(this,e)}toJSON(){return{"/":Xy(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:i,bytes:s}=t;return new r(n,o,i,s??Zy(n,o,i.bytes))}else if(t[Jk]===!0){let{version:n,multihash:o,code:i}=t,s=He(o);return r.create(n,i,s)}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!==ml)throw new Error(`Version 0 CID must use dag-pb (code: ${ml}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=Zy(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ml,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=gn(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new ds(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[d,f]=hl(e.subarray(t));return t+=f,d},o=n(),i=ml;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,a=n(),c=n(),l=t+c,u=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,o]=jk(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return Rg(i).set(n,e),i}};function jk(r,e){switch(r[0]){case"Q":{let t=e??Ge;return[Ge.prefix,t.decode(`${Ge.prefix}${r}`)]}case Ge.prefix:{let t=e??Ge;return[Ge.prefix,t.decode(r)]}case At.prefix:{let t=e??At;return[At.prefix,t.decode(r)]}case Qr.prefix:{let t=e??Qr;return[Qr.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 Xk(r,e,t){let{prefix:n}=t;if(n!==Ge.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function Qk(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var ml=112,Zk=18;function Zy(r,e,t){let n=Ca(r),o=n+Ca(e),i=new Uint8Array(o+t.byteLength);return Ia(r,i,0),Ia(e,i,n),i.set(t,o),i}var Jk=Symbol.for("@ipld/js-cid/CID");var fs={...Sg,...gg,...vg,...pg,...mg,...wg,...bg,...xg,...Eg,...yg},$K={...kg,...Ig};function de(r=0){return new Uint8Array(r)}function Re(r=0){return new Uint8Array(r)}function e7(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Jy=e7("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),Pg=e7("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=Re(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),eR={utf8:Jy,"utf-8":Jy,hex:fs.base16,latin1:Pg,ascii:Pg,binary:Pg,...fs},Sf=eR;function N(r,e="utf8"){let t=Sf[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var Lg=60;function Af(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:Cr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:Cr[e.type],TTL:e.TTL??e.ttl??Lg,data:e.data instanceof Uint8Array?N(e.data):e.data}))}}var tR=4;function Dg(r,e={}){let t=new ls({concurrency:e.queryConcurrency??tR});return async(n,o={})=>{let i=o?.logger?.forComponent("dns:dns-json-over-https"),s=new URLSearchParams;s.set("name",n),bf(o.types).forEach(c=>{s.append("type",Cr[c])}),o.onProgress?.(new K("dns:query",n)),i?.("GET %s",`${r}?${s}`);let a=await t.add(async()=>{let c=await fetch(`${r}?${s}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(i?.("GET %s %d",c.url,c.status),c.status!==200)throw new Error(`Unexpected HTTP status: ${c.status} - ${c.statusText}`);let l=Af(await c.json());return o.onProgress?.(new K("dns:response",l)),l},{signal:o.signal});if(a==null)throw new Error("No DNS response received");return a}}function t7(){return[Dg("https://cloudflare-dns.com/dns-query"),Dg("https://dns.google/resolve")]}var o7=yo(n7(),1);var Ng=class{lru;constructor(e){this.lru=(0,o7.default)(e)}get(e,t){let n=!0,o=[];for(let i of t){let s=this.getAnswers(e,i);if(s.length===0){n=!1;break}o.push(...s)}if(n)return Af({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let i=o.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:Cr[a.type]}));return i.length===0&&this.lru.remove(n),i}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??Lg)*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 i7(r){return new Ng(r)}var rR=1e3,Tf=class{resolvers;cache;logger;constructor(e){this.resolvers={},this.cache=i7(e.cacheSize??rR),this.logger=e.logger,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["."]=t7())}async query(e,t={}){let n=bf(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new K("dns:cache",o)),o;let i=`${e.split(".").pop()}.`,s=(this.resolvers[i]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of s){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,logger:this.logger,types:n});for(let u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new K("dns:error",l))}}throw new yf(a,`DNS lookup of ${e} ${n} failed`)}};var Cr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(Cr||(Cr={}));function _f(r={}){return new Tf(r)}function nR(r){return r[Symbol.asyncIterator]!=null}function oR(r){if(nR(r))return(async()=>{for await(let e of r);})();for(let e of r);}var yr=oR;var gl=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},yl=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},If=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var s7={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new If("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 gt=s7;function se(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 je(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=Re(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var c7=Symbol.for("@achingbrain/uint8arraylist");function a7(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 ka(r){return!!r?.[c7]}var ne=class r{bufs;length;[c7]=!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(ka(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(ka(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=a7(this.bufs,e);return t.buf[t.index]}set(e,t){let n=a7(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(ka(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 je(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:je(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_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 i=0;i<this.bufs.length;i++){let s=this.bufs[i],a=o,c=a+s.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(s);break}let d=e-a;n.push(s.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(u){if(t===c){n.push(s);break}n.push(s.subarray(0,t-a));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!ka(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 i=256,s=new Int32Array(i);for(let d=0;d<i;d++)s[d]=-1;for(let d=0;d<o;d++)s[n[d]]=d;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let f=l;f>=0;f--){let h=this.get(d+f);if(n[f]!==h){u=Math.max(1,f-a[h]);break}}if(u===0)return d}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=Re(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=de(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=de(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=de(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=Re(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=de(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=de(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=de(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=de(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=de(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!se(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,i)=>o+i.byteLength,0)),n.length=t,n}};function R(r,e="utf8"){let t=Sf[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var sR=parseInt("11111",2),Og=parseInt("10000000",2),aR=parseInt("01111111",2),l7={0:wl,1:wl,2:cR,3:dR,4:fR,5:uR,6:lR,16:wl,22:wl,48:wl};function Zr(r,e={offset:0}){let t=r[e.offset]&sR;if(e.offset++,l7[t]!=null)return l7[t](r,e);throw new Error("No decoder for tag "+t)}function bl(r,e){let t=0;if((r[e.offset]&Og)===Og){let n=r[e.offset]&aR,o="0x";e.offset++;for(let i=0;i<n;i++,e.offset++)o+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(o,16)}else t=r[e.offset],e.offset++;return t}function wl(r,e){bl(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Zr(r,e);if(n===null)break;t.push(n)}return t}function cR(r,e){let t=bl(r,e),n=e.offset,o=e.offset+t,i=[];for(let s=n;s<o;s++)s===n&&r[s]===0||i.push(r[s]);return e.offset+=t,Uint8Array.from(i)}function lR(r,e){let t=bl(r,e),n=e.offset+t,o=r[e.offset];e.offset++;let i=0,s=0;o<40?(i=0,s=o):o<80?(i=1,s=o-40):(i=2,s=o-80);let a=`${i}.${s}`,c=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let u=0;for(let d=0;d<c.length;d++)u+=c[d]<<d*7;a+=`.${u}`,c=[]}}return a}function uR(r,e){return e.offset++,null}function dR(r,e){let t=bl(r,e),n=r[e.offset];e.offset++;let o=r.subarray(e.offset,e.offset+t-1);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return o}function fR(r,e){let t=bl(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function hR(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new ne;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function Cf(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=hR(r.byteLength);return new ne(Uint8Array.from([e.byteLength|Og]),e)}function lr(r){let e=new ne,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new ne(Uint8Array.from([2]),Cf(e),e)}function xl(r){let e=Uint8Array.from([0]),t=new ne(e,r);return new ne(Uint8Array.from([3]),Cf(t),t)}function u7(r){return new ne(Uint8Array.from([4]),Cf(r),r)}function yn(r,e=48){let t=new ne;for(let n of r)t.append(n);return new ne(Uint8Array.from([e]),Cf(t),t)}var d7="1.2.840.10045.3.1.7",f7="1.3.132.0.34",h7="1.3.132.0.35";async function p7(r="P-256"){let e=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:r},!0,["sign","verify"]);return{publicKey:await crypto.subtle.exportKey("jwk",e.publicKey),privateKey:await crypto.subtle.exportKey("jwk",e.privateKey)}}async function m7(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["sign"]);t?.signal?.throwIfAborted();let o=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},n,e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function g7(r,e,t,n){let o=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);n?.signal?.throwIfAborted();let i=await crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},o,e,t.subarray());return n?.signal?.throwIfAborted(),i}var pR=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),mR=Uint8Array.from([6,5,43,129,4,0,34]),gR=Uint8Array.from([6,5,43,129,4,0,35]),y7={ext:!0,kty:"EC",crv:"P-256"},w7={ext:!0,kty:"EC",crv:"P-384"},b7={ext:!0,kty:"EC",crv:"P-521"},Ra=32,Pa=48,La=66;function x7(r){let e=Zr(r);return Bg(e)}function Bg(r){let e=r[1],t=N(e,"base64url"),n=r[2][1][0],o=1,i,s;if(e.byteLength===Ra)return i=N(n.subarray(o,o+Ra),"base64url"),s=N(n.subarray(o+Ra),"base64url"),new ps({...y7,key_ops:["sign"],d:t,x:i,y:s});if(e.byteLength===Pa)return i=N(n.subarray(o,o+Pa),"base64url"),s=N(n.subarray(o+Pa),"base64url"),new ps({...w7,key_ops:["sign"],d:t,x:i,y:s});if(e.byteLength===La)return i=N(n.subarray(o,o+La),"base64url"),s=N(n.subarray(o+La),"base64url"),new ps({...b7,key_ops:["sign"],d:t,x:i,y:s});throw new _(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function Mg(r){let e=Zr(r);return E7(e)}function E7(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===Ra*2+1)return n=N(e.subarray(t,t+Ra),"base64url"),o=N(e.subarray(t+Ra),"base64url"),new hs({...y7,key_ops:["verify"],x:n,y:o});if(e.byteLength===Pa*2+1)return n=N(e.subarray(t,t+Pa),"base64url"),o=N(e.subarray(t+Pa),"base64url"),new hs({...w7,key_ops:["verify"],x:n,y:o});if(e.byteLength===La*2+1)return n=N(e.subarray(t,t+La),"base64url"),o=N(e.subarray(t+La),"base64url"),new hs({...b7,key_ops:["verify"],x:n,y:o});throw new _(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function v7(r){return yn([lr(Uint8Array.from([1])),u7(R(r.d??"","base64url")),yn([A7(r.crv)],160),yn([xl(new ne(Uint8Array.from([4]),R(r.x??"","base64url"),R(r.y??"","base64url")))],161)]).subarray()}function S7(r){return yn([lr(Uint8Array.from([1])),yn([A7(r.crv)],160),yn([xl(new ne(Uint8Array.from([4]),R(r.x??"","base64url"),R(r.y??"","base64url")))],161)]).subarray()}function A7(r){if(r==="P-256")return pR;if(r==="P-384")return mR;if(r==="P-521")return gR;throw new _(`Invalid curve ${r}`)}async function T7(r="P-256"){let e=await p7(r);return new ps(e.privateKey)}var hs=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=S7(this.jwk)),this._raw}toMultihash(){return Tt.digest(_t(this))}toCID(){return J.createV1(114,this.toMultihash())}toString(){return Ge.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}async verify(e,t,n){return g7(this.jwk,t,e,n)}},ps=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new hs({crv:e.crv,ext:e.ext,key_ops:["verify"],kty:"EC",x:e.x,y:e.y})}get raw(){return this._raw==null&&(this._raw=v7(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}async sign(e,t){return m7(this.jwk,e,t)}};function ms(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function jt(r,e=""){if(!Number.isSafeInteger(r)||r<0){let t=e&&`"${e}" `;throw new Error(`${t}expected integer >= 0, got ${r}`)}}function ge(r,e,t=""){let n=ms(r),o=r?.length,i=e!==void 0;if(!n||i&&o!==e){let s=t&&`"${t}" `,a=i?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(s+"expected Uint8Array"+a+", got "+c)}return r}function So(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash must wrapped by utils.createHasher");jt(r.outputLen),jt(r.blockLen)}function Da(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 I7(r,e){ge(r,void 0,"digestInto() output");let t=e.outputLen;if(r.length<t)throw new Error('"digestInto() output" expected to be of length >='+t)}function Xt(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function gs(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function wn(r,e){return r<<32-e|r>>>e}function kf(r,e){return r<<e|r>>>32-e>>>0}var C7=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",yR=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Ao(r){if(ge(r),C7)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=yR[r[t]];return e}var vo={_0:48,_9:57,A:65,F:70,a:97,f:102};function _7(r){if(r>=vo._0&&r<=vo._9)return r-vo._0;if(r>=vo.A&&r<=vo.F)return r-(vo.A-10);if(r>=vo.a&&r<=vo.f)return r-(vo.a-10)}function To(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(C7)return Uint8Array.fromHex(r);let e=r.length,t=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,i=0;o<t;o++,i+=2){let s=_7(r.charCodeAt(i)),a=_7(r.charCodeAt(i+1));if(s===void 0||a===void 0){let c=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}var wR=async()=>{};async function k7(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let i=Date.now()-n;i>=0&&i<e||(await wR(),n+=i)}}function bR(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function Ug(r,e=""){return typeof r=="string"?bR(r):ge(r,void 0,e)}function wr(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ge(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}function R7(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("options must be object or undefined");return Object.assign(r,e)}function El(r,e={}){let t=(o,i)=>r(i).update(o).digest(),n=r(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=o=>r(o),Object.assign(t,e),Object.freeze(t)}function Wn(r=32){let e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");return e.getRandomValues(new Uint8Array(r))}var Fg=r=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,r])});function Rf(r,e,t){return r&e^~r&t}function Pf(r,e,t){return r&e^r&t^e&t}var ys=class{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,n,o){this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=gs(this.buffer)}update(e){Da(this),ge(e);let{view:t,buffer:n,blockLen:o}=this,i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=gs(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Da(this),I7(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,Xt(this.buffer.subarray(s)),this.padOffset>o-s&&(this.process(n,0),s=0);for(let d=s;d<o;d++)t[d]=0;n.setBigUint64(o-8,BigInt(this.length*8),i),this.process(n,0);let a=gs(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<l;d++)a.setUint32(4*d,u[d],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||=new this.constructor,e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=i,e.length=o,e.pos=a,o%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},_o=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var Bt=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Lf=BigInt(4294967295),P7=BigInt(32);function xR(r,e=!1){return e?{h:Number(r&Lf),l:Number(r>>P7&Lf)}:{h:Number(r>>P7&Lf)|0,l:Number(r&Lf)|0}}function L7(r,e=!1){let t=r.length,n=new Uint32Array(t),o=new Uint32Array(t);for(let i=0;i<t;i++){let{h:s,l:a}=xR(r[i],e);[n[i],o[i]]=[s,a]}return[n,o]}var $g=(r,e,t)=>r>>>t,Vg=(r,e,t)=>r<<32-t|e>>>t,ws=(r,e,t)=>r>>>t|e<<32-t,bs=(r,e,t)=>r<<32-t|e>>>t,vl=(r,e,t)=>r<<64-t|e>>>t-32,Sl=(r,e,t)=>r>>>t-32|e<<64-t;function Gn(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var D7=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),N7=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,O7=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),B7=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,M7=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),U7=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var vR=Uint32Array.from([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]),di=new Uint32Array(64),Kg=class extends ys{constructor(e){super(64,e,8,!1)}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let d=0;d<16;d++,t+=4)di[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let f=di[d-15],h=di[d-2],p=wn(f,7)^wn(f,18)^f>>>3,y=wn(h,17)^wn(h,19)^h>>>10;di[d]=y+di[d-7]+p+di[d-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let f=wn(a,6)^wn(a,11)^wn(a,25),h=u+f+Rf(a,c,l)+vR[d]+di[d]|0,y=(wn(n,2)^wn(n,13)^wn(n,22))+Pf(n,o,i)|0;u=l,l=c,c=a,a=s+h|0,s=i,i=o,o=n,n=h+y|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,o,i,s,a,c,l,u)}roundClean(){Xt(di)}destroy(){this.set(0,0,0,0,0,0,0,0),Xt(this.buffer)}},Hg=class extends Kg{A=_o[0]|0;B=_o[1]|0;C=_o[2]|0;D=_o[3]|0;E=_o[4]|0;F=_o[5]|0;G=_o[6]|0;H=_o[7]|0;constructor(){super(32)}};var F7=L7(["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))),SR=F7[0],AR=F7[1],fi=new Uint32Array(80),hi=new Uint32Array(80),qg=class extends ys{constructor(e){super(128,e,16,!1)}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:f,Gh:h,Gl:p,Hh:y,Hl:g}=this;return[e,t,n,o,i,s,a,c,l,u,d,f,h,p,y,g]}set(e,t,n,o,i,s,a,c,l,u,d,f,h,p,y,g){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=d|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=y|0,this.Hl=g|0}process(e,t){for(let v=0;v<16;v++,t+=4)fi[v]=e.getUint32(t),hi[v]=e.getUint32(t+=4);for(let v=16;v<80;v++){let L=fi[v-15]|0,V=hi[v-15]|0,$=ws(L,V,1)^ws(L,V,8)^$g(L,V,7),Y=bs(L,V,1)^bs(L,V,8)^Vg(L,V,7),T=fi[v-2]|0,S=hi[v-2]|0,O=ws(T,S,19)^vl(T,S,61)^$g(T,S,6),U=bs(T,S,19)^Sl(T,S,61)^Vg(T,S,6),D=O7(Y,U,hi[v-7],hi[v-16]),A=B7(D,$,O,fi[v-7],fi[v-16]);fi[v]=A|0,hi[v]=D|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:f,Fh:h,Fl:p,Gh:y,Gl:g,Hh:m,Hl:b}=this;for(let v=0;v<80;v++){let L=ws(d,f,14)^ws(d,f,18)^vl(d,f,41),V=bs(d,f,14)^bs(d,f,18)^Sl(d,f,41),$=d&h^~d&y,Y=f&p^~f&g,T=M7(b,V,Y,AR[v],hi[v]),S=U7(T,m,L,$,SR[v],fi[v]),O=T|0,U=ws(n,o,28)^vl(n,o,34)^vl(n,o,39),D=bs(n,o,28)^Sl(n,o,34)^Sl(n,o,39),A=n&i^n&a^i&a,E=o&s^o&c^s&c;m=y|0,b=g|0,y=h|0,g=p|0,h=d|0,p=f|0,{h:d,l:f}=Gn(l|0,u|0,S|0,O|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let x=D7(O,D,E);n=N7(x,S,U,A),o=x|0}({h:n,l:o}=Gn(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=Gn(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=Gn(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=Gn(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:f}=Gn(this.Eh|0,this.El|0,d|0,f|0),{h,l:p}=Gn(this.Fh|0,this.Fl|0,h|0,p|0),{h:y,l:g}=Gn(this.Gh|0,this.Gl|0,y|0,g|0),{h:m,l:b}=Gn(this.Hh|0,this.Hl|0,m|0,b|0),this.set(n,o,i,s,a,c,l,u,d,f,h,p,y,g,m,b)}roundClean(){Xt(fi,hi)}destroy(){Xt(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},zg=class extends qg{Ah=Bt[0]|0;Al=Bt[1]|0;Bh=Bt[2]|0;Bl=Bt[3]|0;Ch=Bt[4]|0;Cl=Bt[5]|0;Dh=Bt[6]|0;Dl=Bt[7]|0;Eh=Bt[8]|0;El=Bt[9]|0;Fh=Bt[10]|0;Fl=Bt[11]|0;Gh=Bt[12]|0;Gl=Bt[13]|0;Hh=Bt[14]|0;Hl=Bt[15]|0;constructor(){super(64)}};var Jr=El(()=>new Hg,Fg(1));var pi=El(()=>new zg,Fg(3));var Gg=BigInt(0),Wg=BigInt(1);function Io(r,e=""){if(typeof r!="boolean"){let t=e&&`"${e}" `;throw new Error(t+"expected boolean, got type="+typeof r)}return r}function $7(r){if(typeof r=="bigint"){if(!Df(r))throw new Error("positive bigint expected, got "+r)}else jt(r);return r}function Al(r){let e=$7(r).toString(16);return e.length&1?"0"+e:e}function V7(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?Gg:BigInt("0x"+r)}function Na(r){return V7(Ao(r))}function Yn(r){return V7(Ao(xs(ge(r)).reverse()))}function Nf(r,e){jt(e),r=$7(r);let t=To(r.toString(16).padStart(e*2,"0"));if(t.length!==e)throw new Error("number too large");return t}function Tl(r,e){return Nf(r,e).reverse()}function xs(r){return Uint8Array.from(r)}var Df=r=>typeof r=="bigint"&&Gg<=r;function TR(r,e,t){return Df(r)&&Df(e)&&Df(t)&&e<=r&&r<t}function mi(r,e,t,n){if(!TR(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function Yg(r){let e;for(e=0;r>Gg;r>>=Wg,e+=1);return e}var _l=r=>(Wg<<BigInt(r))-Wg;function K7(r,e,t){if(jt(r,"hashLen"),jt(e,"qByteLen"),typeof t!="function")throw new Error("hmacFn must be a function");let n=g=>new Uint8Array(g),o=Uint8Array.of(),i=Uint8Array.of(0),s=Uint8Array.of(1),a=1e3,c=n(r),l=n(r),u=0,d=()=>{c.fill(1),l.fill(0),u=0},f=(...g)=>t(l,wr(c,...g)),h=(g=o)=>{l=f(i,g),c=f(),g.length!==0&&(l=f(s,g),c=f())},p=()=>{if(u++>=a)throw new Error("drbg: tried max amount of iterations");let g=0,m=[];for(;g<e;){c=f();let b=c.slice();m.push(b),g+=c.length}return wr(...m)};return(g,m)=>{d(),h(g);let b;for(;!(b=m(p()));)h();return d(),b}}function jn(r,e={},t={}){if(!r||typeof r!="object")throw new Error("expected valid options object");function n(i,s,a){let c=r[i];if(a&&c===void 0)return;let l=typeof c;if(l!==s||c===null)throw new Error(`param "${i}" is invalid: expected ${s}, got ${l}`)}let o=(i,s)=>Object.entries(i).forEach(([a,c])=>n(a,c,s));o(e,!1),o(t,!0)}function Oa(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var ur=BigInt(0),It=BigInt(1),Es=BigInt(2),z7=BigInt(3),W7=BigInt(4),G7=BigInt(5),_R=BigInt(7),Y7=BigInt(8),IR=BigInt(9),j7=BigInt(16);function ot(r,e){let t=r%e;return t>=ur?t:e+t}function Je(r,e,t){let n=r;for(;e-- >ur;)n*=n,n%=t;return n}function H7(r,e){if(r===ur)throw new Error("invert: expected non-zero number");if(e<=ur)throw new Error("invert: expected positive modulus, got "+e);let t=ot(r,e),n=e,o=ur,i=It,s=It,a=ur;for(;t!==ur;){let l=n/t,u=n%t,d=o-s*l,f=i-a*l;n=t,t=u,o=s,i=a,s=d,a=f}if(n!==It)throw new Error("invert: does not exist");return ot(o,e)}function Xg(r,e,t){if(!r.eql(r.sqr(e),t))throw new Error("Cannot find square root")}function X7(r,e){let t=(r.ORDER+It)/W7,n=r.pow(e,t);return Xg(r,n,e),n}function CR(r,e){let t=(r.ORDER-G7)/Y7,n=r.mul(e,Es),o=r.pow(n,t),i=r.mul(e,o),s=r.mul(r.mul(i,Es),o),a=r.mul(i,r.sub(s,r.ONE));return Xg(r,a,e),a}function kR(r){let e=Ba(r),t=Q7(r),n=t(e,e.neg(e.ONE)),o=t(e,n),i=t(e,e.neg(n)),s=(r+_R)/j7;return(a,c)=>{let l=a.pow(c,s),u=a.mul(l,n),d=a.mul(l,o),f=a.mul(l,i),h=a.eql(a.sqr(u),c),p=a.eql(a.sqr(d),c);l=a.cmov(l,u,h),u=a.cmov(f,d,p);let y=a.eql(a.sqr(u),c),g=a.cmov(l,u,y);return Xg(a,g,c),g}}function Q7(r){if(r<z7)throw new Error("sqrt is not defined for small field");let e=r-It,t=0;for(;e%Es===ur;)e/=Es,t++;let n=Es,o=Ba(r);for(;q7(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1)return X7;let i=o.pow(n,e),s=(e+It)/Es;return function(c,l){if(c.is0(l))return l;if(q7(c,l)!==1)throw new Error("Cannot find square root");let u=t,d=c.mul(c.ONE,i),f=c.pow(l,e),h=c.pow(l,s);for(;!c.eql(f,c.ONE);){if(c.is0(f))return c.ZERO;let p=1,y=c.sqr(f);for(;!c.eql(y,c.ONE);)if(p++,y=c.sqr(y),p===u)throw new Error("Cannot find square root");let g=It<<BigInt(u-p-1),m=c.pow(d,g);u=p,d=c.sqr(m),f=c.mul(f,d),h=c.mul(h,m)}return h}}function RR(r){return r%W7===z7?X7:r%Y7===G7?CR:r%j7===IR?kR(r):Q7(r)}var Z7=(r,e)=>(ot(r,e)&It)===It,PR=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Qg(r){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},t=PR.reduce((n,o)=>(n[o]="function",n),e);return jn(r,t),r}function LR(r,e,t){if(t<ur)throw new Error("invalid exponent, negatives unsupported");if(t===ur)return r.ONE;if(t===It)return e;let n=r.ONE,o=e;for(;t>ur;)t&It&&(n=r.mul(n,o)),o=r.sqr(o),t>>=It;return n}function Il(r,e,t=!1){let n=new Array(e.length).fill(t?r.ZERO:void 0),o=e.reduce((s,a,c)=>r.is0(a)?s:(n[c]=s,r.mul(s,a)),r.ONE),i=r.inv(o);return e.reduceRight((s,a,c)=>r.is0(a)?s:(n[c]=r.mul(s,n[c]),r.mul(s,a)),i),n}function q7(r,e){let t=(r.ORDER-It)/Es,n=r.pow(e,t),o=r.eql(n,r.ONE),i=r.eql(n,r.ZERO),s=r.eql(n,r.neg(r.ONE));if(!o&&!i&&!s)throw new Error("invalid Legendre symbol result");return o?1:i?0:-1}function DR(r,e){e!==void 0&&jt(e);let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}var jg=class{ORDER;BITS;BYTES;isLE;ZERO=ur;ONE=It;_lengths;_sqrt;_mod;constructor(e,t={}){if(e<=ur)throw new Error("invalid field: expected ORDER > 0, got "+e);let n;this.isLE=!1,t!=null&&typeof t=="object"&&(typeof t.BITS=="number"&&(n=t.BITS),typeof t.sqrt=="function"&&(this.sqrt=t.sqrt),typeof t.isLE=="boolean"&&(this.isLE=t.isLE),t.allowedLengths&&(this._lengths=t.allowedLengths?.slice()),typeof t.modFromBytes=="boolean"&&(this._mod=t.modFromBytes));let{nBitLength:o,nByteLength:i}=DR(e,n);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=i,this._sqrt=void 0,Object.preventExtensions(this)}create(e){return ot(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof e);return ur<=e&&e<this.ORDER}is0(e){return e===ur}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&It)===It}neg(e){return ot(-e,this.ORDER)}eql(e,t){return e===t}sqr(e){return ot(e*e,this.ORDER)}add(e,t){return ot(e+t,this.ORDER)}sub(e,t){return ot(e-t,this.ORDER)}mul(e,t){return ot(e*t,this.ORDER)}pow(e,t){return LR(this,e,t)}div(e,t){return ot(e*H7(t,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,t){return e+t}subN(e,t){return e-t}mulN(e,t){return e*t}inv(e){return H7(e,this.ORDER)}sqrt(e){return this._sqrt||(this._sqrt=RR(this.ORDER)),this._sqrt(this,e)}toBytes(e){return this.isLE?Tl(e,this.BYTES):Nf(e,this.BYTES)}fromBytes(e,t=!1){ge(e);let{_lengths:n,BYTES:o,isLE:i,ORDER:s,_mod:a}=this;if(n){if(!n.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+n+" bytes, got "+e.length);let l=new Uint8Array(o);l.set(e,i?0:l.length-e.length),e=l}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let c=i?Yn(e):Na(e);if(a&&(c=ot(c,s)),!t&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return Il(this,e)}cmov(e,t,n){return n?t:e}};function Ba(r,e={}){return new jg(r,e)}function J7(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 Zg(r){let e=J7(r);return e+Math.ceil(e/2)}function Jg(r,e,t=!1){ge(r);let n=r.length,o=J7(e),i=Zg(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?Yn(r):Na(r),a=ot(s,e-It)+It;return t?Tl(a,o):Nf(a,o)}var Ma=BigInt(0),vs=BigInt(1);function Cl(r,e){let t=e.negate();return r?t:e}function Ss(r,e){let t=Il(r.Fp,e.map(n=>n.Z));return e.map((n,o)=>r.fromAffine(n.toAffine(t[o])))}function n9(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function e3(r,e){n9(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,i=_l(r),s=BigInt(r);return{windows:t,windowSize:n,mask:i,maxNumber:o,shiftBy:s}}function e9(r,e,t){let{windowSize:n,mask:o,maxNumber:i,shiftBy:s}=t,a=Number(r&o),c=r>>s;a>n&&(a-=i,c+=vs);let l=e*n,u=l+Math.abs(a)-1,d=a===0,f=a<0,h=e%2!==0;return{nextN:c,offset:u,isZero:d,isNeg:f,isNegF:h,offsetF:l}}var t3=new WeakMap,o9=new WeakMap;function r3(r){return o9.get(r)||1}function t9(r){if(r!==Ma)throw new Error("invalid wNAF")}var Ua=class{BASE;ZERO;Fn;bits;constructor(e,t){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=t}_unsafeLadder(e,t,n=this.ZERO){let o=e;for(;t>Ma;)t&vs&&(n=n.add(o)),o=o.double(),t>>=vs;return n}precomputeWindow(e,t){let{windows:n,windowSize:o}=e3(t,this.bits),i=[],s=e,a=s;for(let c=0;c<n;c++){a=s,i.push(a);for(let l=1;l<o;l++)a=a.add(s),i.push(a);s=a.double()}return i}wNAF(e,t,n){if(!this.Fn.isValid(n))throw new Error("invalid scalar");let o=this.ZERO,i=this.BASE,s=e3(e,this.bits);for(let a=0;a<s.windows;a++){let{nextN:c,offset:l,isZero:u,isNeg:d,isNegF:f,offsetF:h}=e9(n,a,s);n=c,u?i=i.add(Cl(f,t[h])):o=o.add(Cl(d,t[l]))}return t9(n),{p:o,f:i}}wNAFUnsafe(e,t,n,o=this.ZERO){let i=e3(e,this.bits);for(let s=0;s<i.windows&&n!==Ma;s++){let{nextN:a,offset:c,isZero:l,isNeg:u}=e9(n,s,i);if(n=a,!l){let d=t[c];o=o.add(u?d.negate():d)}}return t9(n),o}getPrecomputes(e,t,n){let o=t3.get(t);return o||(o=this.precomputeWindow(t,e),e!==1&&(typeof n=="function"&&(o=n(o)),t3.set(t,o))),o}cached(e,t,n){let o=r3(e);return this.wNAF(o,this.getPrecomputes(o,e,n),t)}unsafe(e,t,n,o){let i=r3(e);return i===1?this._unsafeLadder(e,t,o):this.wNAFUnsafe(i,this.getPrecomputes(i,e,n),t,o)}createCache(e,t){n9(t,this.bits),o9.set(e,t),t3.delete(e)}hasCache(e){return r3(e)!==1}};function i9(r,e,t,n){let o=e,i=r.ZERO,s=r.ZERO;for(;t>Ma||n>Ma;)t&vs&&(i=i.add(o)),n&vs&&(s=s.add(o)),o=o.double(),t>>=vs,n>>=vs;return{p1:i,p2:s}}function r9(r,e,t){if(e){if(e.ORDER!==r)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Qg(e),e}else return Ba(r,{isLE:t})}function Of(r,e,t={},n){if(n===void 0&&(n=r==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${r} CURVE object`);for(let c of["p","n","h"]){let l=e[c];if(!(typeof l=="bigint"&&l>Ma))throw new Error(`CURVE.${c} must be positive bigint`)}let o=r9(e.p,t.Fp,n),i=r9(e.n,t.Fn,n),a=["Gx","Gy","a",r==="weierstrass"?"b":"d"];for(let c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:i}}function Fa(r,e){return function(n){let o=r(n);return{secretKey:o,publicKey:e(o)}}}var gi=BigInt(0),Ct=BigInt(1),n3=BigInt(2),NR=BigInt(8);function OR(r,e,t,n){let o=r.sqr(t),i=r.sqr(n),s=r.add(r.mul(e.a,o),i),a=r.add(r.ONE,r.mul(e.d,r.mul(o,i)));return r.eql(s,a)}function s9(r,e={}){let t=Of("edwards",r,e,e.FpFnLE),{Fp:n,Fn:o}=t,i=t.CURVE,{h:s}=i;jn(e,{},{uvRatio:"function"});let a=n3<<BigInt(o.BYTES*8)-Ct,c=g=>n.create(g),l=e.uvRatio||((g,m)=>{try{return{isValid:!0,value:n.sqrt(n.div(g,m))}}catch{return{isValid:!1,value:gi}}});if(!OR(n,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function u(g,m,b=!1){let v=b?Ct:gi;return mi("coordinate "+g,m,v,a),m}function d(g){if(!(g instanceof p))throw new Error("EdwardsPoint expected")}let f=Oa((g,m)=>{let{X:b,Y:v,Z:L}=g,V=g.is0();m==null&&(m=V?NR:n.inv(L));let $=c(b*m),Y=c(v*m),T=n.mul(L,m);if(V)return{x:gi,y:Ct};if(T!==Ct)throw new Error("invZ was invalid");return{x:$,y:Y}}),h=Oa(g=>{let{a:m,d:b}=i;if(g.is0())throw new Error("bad point: ZERO");let{X:v,Y:L,Z:V,T:$}=g,Y=c(v*v),T=c(L*L),S=c(V*V),O=c(S*S),U=c(Y*m),D=c(S*c(U+T)),A=c(O+c(b*c(Y*T)));if(D!==A)throw new Error("bad point: equation left != right (1)");let E=c(v*L),x=c(V*$);if(E!==x)throw new Error("bad point: equation left != right (2)");return!0});class p{static BASE=new p(i.Gx,i.Gy,Ct,c(i.Gx*i.Gy));static ZERO=new p(gi,Ct,Ct,gi);static Fp=n;static Fn=o;X;Y;Z;T;constructor(m,b,v,L){this.X=u("x",m),this.Y=u("y",b),this.Z=u("z",v,!0),this.T=u("t",L),Object.freeze(this)}static CURVE(){return i}static fromAffine(m){if(m instanceof p)throw new Error("extended point not allowed");let{x:b,y:v}=m||{};return u("x",b),u("y",v),new p(b,v,Ct,c(b*v))}static fromBytes(m,b=!1){let v=n.BYTES,{a:L,d:V}=i;m=xs(ge(m,v,"point")),Io(b,"zip215");let $=xs(m),Y=m[v-1];$[v-1]=Y&-129;let T=Yn($),S=b?a:n.ORDER;mi("point.y",T,gi,S);let O=c(T*T),U=c(O-Ct),D=c(V*O-L),{isValid:A,value:E}=l(U,D);if(!A)throw new Error("bad point: invalid y coordinate");let x=(E&Ct)===Ct,k=(Y&128)!==0;if(!b&&E===gi&&k)throw new Error("bad point: x=0 and x_0=1");return k!==x&&(E=c(-E)),p.fromAffine({x:E,y:T})}static fromHex(m,b=!1){return p.fromBytes(To(m),b)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(m=8,b=!0){return y.createCache(this,m),b||this.multiply(n3),this}assertValidity(){h(this)}equals(m){d(m);let{X:b,Y:v,Z:L}=this,{X:V,Y:$,Z:Y}=m,T=c(b*Y),S=c(V*L),O=c(v*Y),U=c($*L);return T===S&&O===U}is0(){return this.equals(p.ZERO)}negate(){return new p(c(-this.X),this.Y,this.Z,c(-this.T))}double(){let{a:m}=i,{X:b,Y:v,Z:L}=this,V=c(b*b),$=c(v*v),Y=c(n3*c(L*L)),T=c(m*V),S=b+v,O=c(c(S*S)-V-$),U=T+$,D=U-Y,A=T-$,E=c(O*D),x=c(U*A),k=c(O*A),M=c(D*U);return new p(E,x,M,k)}add(m){d(m);let{a:b,d:v}=i,{X:L,Y:V,Z:$,T:Y}=this,{X:T,Y:S,Z:O,T:U}=m,D=c(L*T),A=c(V*S),E=c(Y*v*U),x=c($*O),k=c((L+V)*(T+S)-D-A),M=x-E,B=x+E,P=c(A-b*D),H=c(k*M),q=c(B*P),Q=c(k*P),Ce=c(M*B);return new p(H,q,Ce,Q)}subtract(m){return this.add(m.negate())}multiply(m){if(!o.isValidNot0(m))throw new Error("invalid scalar: expected 1 <= sc < curve.n");let{p:b,f:v}=y.cached(this,m,L=>Ss(p,L));return Ss(p,[b,v])[0]}multiplyUnsafe(m,b=p.ZERO){if(!o.isValid(m))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return m===gi?p.ZERO:this.is0()||m===Ct?this:y.unsafe(this,m,v=>Ss(p,v),b)}isSmallOrder(){return this.multiplyUnsafe(s).is0()}isTorsionFree(){return y.unsafe(this,i.n).is0()}toAffine(m){return f(this,m)}clearCofactor(){return s===Ct?this:this.multiplyUnsafe(s)}toBytes(){let{x:m,y:b}=this.toAffine(),v=n.toBytes(b);return v[v.length-1]|=m&Ct?128:0,v}toHex(){return Ao(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let y=new Ua(p,o.BITS);return p.BASE.precompute(8),p}function a9(r,e,t={}){if(typeof e!="function")throw new Error('"hash" function param is required');jn(t,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});let{prehash:n}=t,{BASE:o,Fp:i,Fn:s}=r,a=t.randomBytes||Wn,c=t.adjustScalarBytes||(T=>T),l=t.domain||((T,S,O)=>{if(Io(O,"phflag"),S.length||O)throw new Error("Contexts/pre-hash are not supported");return T});function u(T){return s.create(Yn(T))}function d(T){let S=v.secretKey;ge(T,v.secretKey,"secretKey");let O=ge(e(T),2*S,"hashedSecretKey"),U=c(O.slice(0,S)),D=O.slice(S,2*S),A=u(U);return{head:U,prefix:D,scalar:A}}function f(T){let{head:S,prefix:O,scalar:U}=d(T),D=o.multiply(U),A=D.toBytes();return{head:S,prefix:O,scalar:U,point:D,pointBytes:A}}function h(T){return f(T).pointBytes}function p(T=Uint8Array.of(),...S){let O=wr(...S);return u(e(l(O,ge(T,void 0,"context"),!!n)))}function y(T,S,O={}){T=ge(T,void 0,"message"),n&&(T=n(T));let{prefix:U,scalar:D,pointBytes:A}=f(S),E=p(O.context,U,T),x=o.multiply(E).toBytes(),k=p(O.context,x,A,T),M=s.create(E+k*D);if(!s.isValid(M))throw new Error("sign failed: invalid s");let B=wr(x,s.toBytes(M));return ge(B,v.signature,"result")}let g={zip215:!0};function m(T,S,O,U=g){let{context:D,zip215:A}=U,E=v.signature;T=ge(T,E,"signature"),S=ge(S,void 0,"message"),O=ge(O,v.publicKey,"publicKey"),A!==void 0&&Io(A,"zip215"),n&&(S=n(S));let x=E/2,k=T.subarray(0,x),M=Yn(T.subarray(x,E)),B,P,H;try{B=r.fromBytes(O,A),P=r.fromBytes(k,A),H=o.multiplyUnsafe(M)}catch{return!1}if(!A&&B.isSmallOrder())return!1;let q=p(D,P.toBytes(),B.toBytes(),S);return P.add(B.multiplyUnsafe(q)).subtract(H).clearCofactor().is0()}let b=i.BYTES,v={secretKey:b,publicKey:b,signature:2*b,seed:b};function L(T=a(v.seed)){return ge(T,v.seed,"seed")}function V(T){return ms(T)&&T.length===s.BYTES}function $(T,S){try{return!!r.fromBytes(T,S)}catch{return!1}}let Y={getExtendedPublicKey:f,randomSecretKey:L,isValidSecretKey:V,isValidPublicKey:$,toMontgomery(T){let{y:S}=r.fromBytes(T),O=v.publicKey,U=O===32;if(!U&&O!==57)throw new Error("only defined for 25519 and 448");let D=U?i.div(Ct+S,Ct-S):i.div(S-Ct,S+Ct);return i.toBytes(D)},toMontgomerySecret(T){let S=v.secretKey;ge(T,S);let O=e(T.subarray(0,S));return c(O).subarray(0,S)}};return Object.freeze({keygen:Fa(L,h),getPublicKey:h,sign:y,verify:m,utils:Y,Point:r,lengths:v})}var kl=BigInt(0),$a=BigInt(1),Bf=BigInt(2);function BR(r){return jn(r,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...r})}function c9(r){let e=BR(r),{P:t,type:n,adjustScalarBytes:o,powPminus2:i,randomBytes:s}=e,a=n==="x25519";if(!a&&n!=="x448")throw new Error("invalid type");let c=s||Wn,l=a?255:448,u=a?32:56,d=BigInt(a?9:5),f=BigInt(a?121665:39081),h=a?Bf**BigInt(254):Bf**BigInt(447),p=a?BigInt(8)*Bf**BigInt(251)-$a:BigInt(4)*Bf**BigInt(445)-$a,y=h+p+$a,g=E=>ot(E,t),m=b(d);function b(E){return Tl(g(E),u)}function v(E){let x=xs(ge(E,u,"uCoordinate"));return a&&(x[31]&=127),g(Yn(x))}function L(E){return Yn(o(xs(ge(E,u,"scalar"))))}function V(E,x){let k=O(v(x),L(E));if(k===kl)throw new Error("invalid private or public key received");return b(k)}function $(E){return V(E,m)}let Y=$,T=V;function S(E,x,k){let M=g(E*(x-k));return x=g(x-M),k=g(k+M),{x_2:x,x_3:k}}function O(E,x){mi("u",E,kl,t),mi("scalar",x,h,y);let k=x,M=E,B=$a,P=kl,H=E,q=$a,Q=kl;for(let Ae=BigInt(l-1);Ae>=kl;Ae--){let xe=k>>Ae&$a;Q^=xe,{x_2:B,x_3:H}=S(Q,B,H),{x_2:P,x_3:q}=S(Q,P,q),Q=xe;let ke=B+P,ze=g(ke*ke),ft=B-P,Pe=g(ft*ft),bt=ze-Pe,ba=H+q,sf=H-q,rl=g(sf*ke),Cy=g(ba*ft),ky=rl+Cy,Ry=rl-Cy;H=g(ky*ky),q=g(M*g(Ry*Ry)),B=g(ze*Pe),P=g(bt*(ze+g(f*bt)))}({x_2:B,x_3:H}=S(Q,B,H)),{x_2:P,x_3:q}=S(Q,P,q);let Ce=i(P);return g(B*Ce)}let U={secretKey:u,publicKey:u,seed:u},D=(E=c(u))=>(ge(E,U.seed,"seed"),E),A={randomSecretKey:D};return Object.freeze({keygen:Fa(D,Y),getSharedSecret:T,getPublicKey:Y,scalarMult:V,scalarMultBase:$,utils:A,GuBytes:m.slice(),lengths:U})}var MR=BigInt(1),l9=BigInt(2),UR=BigInt(3),FR=BigInt(5),$R=BigInt(8),Mf=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),VR={p:Mf,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:$R,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function d9(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Mf,a=r*r%i*r%i,c=Je(a,l9,i)*a%i,l=Je(c,MR,i)*r%i,u=Je(l,FR,i)*l%i,d=Je(u,e,i)*u%i,f=Je(d,t,i)*d%i,h=Je(f,n,i)*f%i,p=Je(h,o,i)*h%i,y=Je(p,o,i)*h%i,g=Je(y,e,i)*u%i;return{pow_p_5_8:Je(g,l9,i)*r%i,b2:a}}function f9(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}var u9=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function KR(r,e){let t=Mf,n=ot(e*e*e,t),o=ot(n*n*e,t),i=d9(r*o).pow_p_5_8,s=ot(r*n*i,t),a=ot(e*s*s,t),c=s,l=ot(s*u9,t),u=a===r,d=a===ot(-r,t),f=a===ot(-r*u9,t);return u&&(s=c),(d||f)&&(s=l),Z7(s,t)&&(s=ot(-s,t)),{isValid:u||d,value:s}}var HR=s9(VR,{uvRatio:KR});function qR(r){return a9(HR,pi,Object.assign({adjustScalarBytes:f9},r))}var Rl=qR({});var Pl=(()=>{let r=Mf;return c9({P:r,type:"x25519",powPminus2:e=>{let{pow_p_5_8:t,b2:n}=d9(e);return ot(Je(t,UR,r)*n,r)},adjustScalarBytes:f9})})();var As=32,kr=64,o3=32;var Va,h9=(async()=>{try{return await gt.get().subtle.generateKey({name:"Ed25519"},!0,["sign","verify"]),!0}catch{return!1}})();function p9(){let r=Rl.utils.randomSecretKey(),e=Rl.getPublicKey(r);return{privateKey:jR(r,e),publicKey:e}}async function zR(r,e){let t;r.length===kr?t=r.subarray(0,32):t=r;let n={crv:"Ed25519",kty:"OKP",x:N(r.subarray(32),"base64url"),d:N(t,"base64url"),ext:!0,key_ops:["sign"]},o=await gt.get().subtle.importKey("jwk",n,{name:"Ed25519"},!0,["sign"]),i=await gt.get().subtle.sign({name:"Ed25519"},o,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(i,0,i.byteLength)}function WR(r,e){let t=r.subarray(0,o3);return Rl.sign(e instanceof Uint8Array?e:e.subarray(),t)}async function m9(r,e){return Va==null&&(Va=await h9),Va?zR(r,e):WR(r,e)}async function GR(r,e,t){if(r.buffer instanceof ArrayBuffer){let n=await gt.get().subtle.importKey("raw",r.buffer,{name:"Ed25519"},!1,["verify"]);return await gt.get().subtle.verify({name:"Ed25519"},n,e,t instanceof Uint8Array?t:t.subarray())}throw new TypeError("WebCrypto does not support SharedArrayBuffer for Ed25519 keys")}function YR(r,e,t){return Rl.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}async function g9(r,e,t){return Va==null&&(Va=await h9),Va?GR(r,e,t):YR(r,e,t)}function jR(r,e){let t=new Uint8Array(kr);for(let n=0;n<o3;n++)t[n]=r[n],t[o3+n]=e[n];return t}function Ka(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Ll=class{type="Ed25519";raw;constructor(e){this.raw=qa(e,As)}toMultihash(){return Tt.digest(_t(this))}toCID(){return J.createV1(114,this.toMultihash())}toString(){return Ge.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}verify(e,t,n){n?.signal?.throwIfAborted();let o=g9(this.raw,t,e);return Ka(o)?o.then(i=>(n?.signal?.throwIfAborted(),i)):o}},Ha=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=qa(e,kr),this.publicKey=new Ll(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}sign(e,t){t?.signal?.throwIfAborted();let n=m9(this.raw,e);return Ka(n)?n.then(o=>(t?.signal?.throwIfAborted(),o)):(t?.signal?.throwIfAborted(),n)}};function i3(r){if(r.length>kr){r=qa(r,kr+As);let n=r.subarray(0,kr),o=r.subarray(kr,r.length);return new Ha(n,o)}r=qa(r,kr);let e=r.subarray(0,kr),t=r.subarray(As);return new Ha(e,t)}function s3(r){return r=qa(r,As),new Ll(r)}async function w9(){let{privateKey:r,publicKey:e}=p9();return new Ha(r,e)}function qa(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new _(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var XR=Math.pow(2,7),QR=Math.pow(2,14),ZR=Math.pow(2,21),a3=Math.pow(2,28),c3=Math.pow(2,35),l3=Math.pow(2,42),u3=Math.pow(2,49),$e=128,Qt=127;function ye(r){if(r<XR)return 1;if(r<QR)return 2;if(r<ZR)return 3;if(r<a3)return 4;if(r<c3)return 5;if(r<l3)return 6;if(r<u3)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Xn(r,e,t=0){switch(ye(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 JR(r,e,t=0){switch(ye(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 Ts(r,e){let t=r[e],n=0;if(n+=t&Qt,t<$e||(t=r[e+1],n+=(t&Qt)<<7,t<$e)||(t=r[e+2],n+=(t&Qt)<<14,t<$e)||(t=r[e+3],n+=(t&Qt)<<21,t<$e)||(t=r[e+4],n+=(t&Qt)*a3,t<$e)||(t=r[e+5],n+=(t&Qt)*c3,t<$e)||(t=r[e+6],n+=(t&Qt)*l3,t<$e)||(t=r[e+7],n+=(t&Qt)*u3,t<$e))return n;throw new RangeError("Could not decode varint")}function eP(r,e){let t=r.get(e),n=0;if(n+=t&Qt,t<$e||(t=r.get(e+1),n+=(t&Qt)<<7,t<$e)||(t=r.get(e+2),n+=(t&Qt)<<14,t<$e)||(t=r.get(e+3),n+=(t&Qt)<<21,t<$e)||(t=r.get(e+4),n+=(t&Qt)*a3,t<$e)||(t=r.get(e+5),n+=(t&Qt)*c3,t<$e)||(t=r.get(e+6),n+=(t&Qt)*l3,t<$e)||(t=r.get(e+7),n+=(t&Qt)*u3,t<$e))return n;throw new RangeError("Could not decode varint")}function Zt(r,e,t=0){return e==null&&(e=Re(ye(r))),e instanceof Uint8Array?Xn(r,e,t):JR(r,e,t)}function Rr(r,e=0){return r instanceof Uint8Array?Ts(r,e):eP(r,e)}var d3=new Float32Array([-0]),yi=new Uint8Array(d3.buffer);function b9(r,e,t){d3[0]=r,e[t]=yi[0],e[t+1]=yi[1],e[t+2]=yi[2],e[t+3]=yi[3]}function x9(r,e){return yi[0]=r[e],yi[1]=r[e+1],yi[2]=r[e+2],yi[3]=r[e+3],d3[0]}var f3=new Float64Array([-0]),Jt=new Uint8Array(f3.buffer);function E9(r,e,t){f3[0]=r,e[t]=Jt[0],e[t+1]=Jt[1],e[t+2]=Jt[2],e[t+3]=Jt[3],e[t+4]=Jt[4],e[t+5]=Jt[5],e[t+6]=Jt[6],e[t+7]=Jt[7]}function v9(r,e){return Jt[0]=r[e],Jt[1]=r[e+1],Jt[2]=r[e+2],Jt[3]=r[e+3],Jt[4]=r[e+4],Jt[5]=r[e+5],Jt[6]=r[e+6],Jt[7]=r[e+7],f3[0]}var tP=BigInt(Number.MAX_SAFE_INTEGER),rP=BigInt(Number.MIN_SAFE_INTEGER),Pr=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 _s;if(e<tP&&e>rP)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>S9&&(o=0n,++n>S9&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return _s;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):_s}},_s=new Pr(0,0);_s.toBigInt=function(){return 0n};_s.zzEncode=_s.zzDecode=function(){return this};_s.length=function(){return 1};var S9=4294967296n;function A9(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 T9(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(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,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function h3(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,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 bn(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Uf(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var p3=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,bn(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 bn(this,4);return Uf(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw bn(this,4);return Uf(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw bn(this,4);let e=x9(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw bn(this,4);let e=v9(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 bn(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return T9(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw bn(this,e);this.pos+=e}else do if(this.pos>=this.len)throw bn(this);while((this.buf[this.pos++]&128)!==0);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 Pr(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 bn(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 bn(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 bn(this,8);let e=Uf(this.buf,this.pos+=4),t=Uf(this.buf,this.pos+=4);return new Pr(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=Ts(this.buf,this.pos);return this.pos+=ye(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 Dl(r){return new p3(r instanceof Uint8Array?r:r.subarray())}function fe(r,e,t){let n=Dl(r);return e.decode(n,void 0,t)}function m3(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Re(s);o+s>e&&(n=Re(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var Is=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function g3(){}var w3=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},nP=m3();function oP(r){return globalThis.Buffer!=null?Re(r):nP(r)}var Ol=class{len;head;tail;states;constructor(){this.len=0,this.head=new Is(g3,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Is(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new b3((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(Ff,10,Pr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Pr.fromBigInt(e);return this._push(Ff,t.length(),t)}uint64Number(e){return this._push(Xn,ye(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=Pr.fromBigInt(e).zzEncode();return this._push(Ff,t.length(),t)}sint64Number(e){let t=Pr.fromNumber(e).zzEncode();return this._push(Ff,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(y3,1,e?1:0)}fixed32(e){return this._push(Nl,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Pr.fromBigInt(e);return this._push(Nl,4,t.lo)._push(Nl,4,t.hi)}fixed64Number(e){let t=Pr.fromNumber(e);return this._push(Nl,4,t.lo)._push(Nl,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(b9,4,e)}double(e){return this._push(E9,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(y3,1,0):this.uint32(t)._push(sP,t,e)}string(e){let t=A9(e);return t!==0?this.uint32(t)._push(h3,t,e):this._push(y3,1,0)}fork(){return this.states=new w3(this),this.head=this.tail=new Is(g3,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 Is(g3,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=oP(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function y3(r,e,t){e[t]=r&255}function iP(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var b3=class extends Is{next;constructor(e,t){super(iP,e,t),this.next=void 0}};function Ff(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 Nl(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 sP(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Ol.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(aP,e,r),this},Ol.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(cP,e,r),this});function aP(r,e,t){e.set(r,t)}function cP(r,e,t){r.length<40?h3(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(R(r),t)}function x3(){return new Ol}function he(r,e){let t=x3();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}function*pe(r,e,t){let n=Dl(r);yield*e.stream(n,void 0,"$",t)}var $f={VARINT:0,BIT64:1,LENGTH_DELIMITED:2,START_GROUP:3,END_GROUP:4,BIT32:5};function Vf(r,e,t,n,o){return{name:r,type:e,encode:t,decode:n,stream:o}}function lt(r){function e(i){if(r[i.toString()]==null)throw new Error("Invalid enum value");return r[i]}let t=function(s,a){let c=e(s);a.int32(c)},n=function(s){let a=s.int32();return e(a)},o=function*(s){let a=s.int32();yield e(a)};return Vf("enum",$f.VARINT,t,n,o)}function me(r,e,t){return Vf("message",$f.LENGTH_DELIMITED,r,e,t)}var Ee=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Bl=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Ye;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(Ye||(Ye={}));var E3;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(E3||(E3={}));(function(r){r.codec=()=>lt(E3)})(Ye||(Ye={}));var Qn;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.Type!=null&&(s.uint32(8),Ye.codec().encode(i.Type,s)),i.Data!=null&&(s.uint32(18),s.bytes(i.Data)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.Type=Ye.codec().decode(i);break}case 2:{c.Data=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.Type`,value:Ye.codec().decode(i)};break}case 2:{yield{field:`${a}.Data`,value:i.bytes()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Qn||(Qn={}));var Ml;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.Type!=null&&(s.uint32(8),Ye.codec().encode(i.Type,s)),i.Data!=null&&(s.uint32(18),s.bytes(i.Data)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.Type=Ye.codec().decode(i);break}case 2:{c.Data=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.Type`,value:Ye.codec().decode(i)};break}case 2:{yield{field:`${a}.Data`,value:i.bytes()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Ml||(Ml={}));function dr(r){if(isNaN(r)||r<=0)throw new _("random bytes length must be a Number bigger than 0");return Wn(r)}var Fl={};ht(Fl,{MAX_RSA_KEY_SIZE:()=>v3,generateRSAKeyPair:()=>P3,jwkToJWKKeyPair:()=>R9,jwkToPkcs1:()=>fP,jwkToPkix:()=>_3,jwkToRSAPrivateKey:()=>R3,pkcs1MessageToJwk:()=>A3,pkcs1MessageToRSAPrivateKey:()=>Kf,pkcs1ToJwk:()=>dP,pkcs1ToRSAPrivateKey:()=>I3,pkixMessageToJwk:()=>T3,pkixMessageToRSAPublicKey:()=>k3,pkixToJwk:()=>hP,pkixToRSAPublicKey:()=>C3});var za=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Fl.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return J.createV1(114,this._multihash)}toString(){return Ge.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}verify(e,t,n){return k9(this.jwk,t,e,n)}},Ul=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Fl.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}sign(e,t){return C9(this.jwk,e,t)}};var v3=8192,S3=18,lP=1062,uP=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function dP(r){let e=Zr(r);return A3(e)}function A3(r){return{n:N(r[1],"base64url"),e:N(r[2],"base64url"),d:N(r[3],"base64url"),p:N(r[4],"base64url"),q:N(r[5],"base64url"),dp:N(r[6],"base64url"),dq:N(r[7],"base64url"),qi:N(r[8],"base64url"),kty:"RSA"}}function fP(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 _("JWK was missing components");return yn([lr(Uint8Array.from([0])),lr(R(r.n,"base64url")),lr(R(r.e,"base64url")),lr(R(r.d,"base64url")),lr(R(r.p,"base64url")),lr(R(r.q,"base64url")),lr(R(r.dp,"base64url")),lr(R(r.dq,"base64url")),lr(R(r.qi,"base64url"))]).subarray()}function hP(r){let e=Zr(r,{offset:0});return T3(e)}function T3(r){let e=Zr(r[1],{offset:0});return{kty:"RSA",n:N(e[0],"base64url"),e:N(e[1],"base64url")}}function _3(r){if(r.n==null||r.e==null)throw new _("JWK was missing components");return yn([uP,xl(yn([lr(R(r.n,"base64url")),lr(R(r.e,"base64url"))]))]).subarray()}function I3(r){let e=Zr(r);return Kf(e)}function Kf(r){let e=A3(r);return R3(e)}function C3(r,e){if(r.byteLength>=lP)throw new bo("Key size is too large");let t=Zr(r,{offset:0});return k3(t,r,e)}function k3(r,e,t){let n=T3(r);if(t==null){let o=Jr(Qn.encode({Type:Ye.RSA,Data:e}));t=cr(S3,o)}return new za(n,t)}function R3(r){if(L9(r)>v3)throw new _("Key size is too large");let e=R9(r),t=Jr(Qn.encode({Type:Ye.RSA,Data:_3(e.publicKey)})),n=cr(S3,t);return new Ul(e.privateKey,new za(e.publicKey,n))}async function P3(r){if(r>v3)throw new _("Key size is too large");let e=await P9(r),t=Jr(Qn.encode({Type:Ye.RSA,Data:_3(e.publicKey)})),n=cr(S3,t);return new Ul(e.privateKey,new za(e.publicKey,n))}function R9(r){if(r==null)throw new _("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function P9(r,e){let t=await gt.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]);e?.signal?.throwIfAborted();let n=await pP(t,e);return{privateKey:n[0],publicKey:n[1]}}async function C9(r,e,t){let n=await gt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]);t?.signal?.throwIfAborted();let o=await gt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},n,e instanceof Uint8Array?e:e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function k9(r,e,t,n){let o=await gt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);n?.signal?.throwIfAborted();let i=await gt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},o,e,t instanceof Uint8Array?t:t.subarray());return n?.signal?.throwIfAborted(),i}async function pP(r,e){if(r.privateKey==null||r.publicKey==null)throw new _("Private and public key are required");let t=await Promise.all([gt.get().subtle.exportKey("jwk",r.privateKey),gt.get().subtle.exportKey("jwk",r.publicKey)]);return e?.signal?.throwIfAborted(),t}function L9(r){if(r.kty!=="RSA")throw new _("invalid key type");if(r.n==null)throw new _("invalid key modulus");return R(r.n,"base64url").length*8}var Hf=class{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(e,t){if(So(e),ge(t,void 0,"key"),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 n=this.blockLen,o=new Uint8Array(n);o.set(t.length>n?e.create().update(t).digest():t);for(let i=0;i<o.length;i++)o[i]^=54;this.iHash.update(o),this.oHash=e.create();for(let i=0;i<o.length;i++)o[i]^=106;this.oHash.update(o),Xt(o)}update(e){return Da(this),this.iHash.update(e),this}digestInto(e){Da(this),ge(e,this.outputLen,"output"),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||=Object.create(Object.getPrototypeOf(this),{});let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},wi=(r,e,t)=>new Hf(r,e).update(t).digest();wi.create=(r,e)=>new Hf(r,e);var D9=(r,e)=>(r+(r>=0?e:-e)/N9)/e;function mP(r,e,t){let[[n,o],[i,s]]=e,a=D9(s*r,t),c=D9(-o*r,t),l=r-a*n-c*i,u=-a*o-c*s,d=l<ko,f=u<ko;d&&(l=-l),f&&(u=-u);let h=_l(Math.ceil(Yg(t)/2))+Wa;if(l<ko||l>=h||u<ko||u>=h)throw new Error("splitScalar (endomorphism): failed, k="+r);return{k1neg:d,k1:l,k2neg:f,k2:u}}function D3(r){if(!["compact","recovered","der"].includes(r))throw new Error('Signature format must be "compact", "recovered", or "der"');return r}function L3(r,e){let t={};for(let n of Object.keys(e))t[n]=r[n]===void 0?e[n]:r[n];return Io(t.lowS,"lowS"),Io(t.prehash,"prehash"),t.format!==void 0&&D3(t.format),t}var N3=class extends Error{constructor(e=""){super(e)}},bi={Err:N3,_tlv:{encode:(r,e)=>{let{Err:t}=bi;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=Al(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?Al(o.length/2|128):"";return Al(r)+i+o+e},decode(r,e){let{Err:t}=bi,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++],i=!!(o&128),s=0;if(!i)s=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 u of l)s=s<<8|u;if(n+=c,s<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+s);if(a.length!==s)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=bi;if(r<ko)throw new e("integer: negative integers are not allowed");let t=Al(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return t},decode(r){let{Err:e}=bi;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 Na(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=bi,o=ge(r,void 0,"signature"),{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,i),{v:l,l:u}=n.decode(2,c);if(u.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}=bi,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}},ko=BigInt(0),Wa=BigInt(1),N9=BigInt(2),qf=BigInt(3),gP=BigInt(4);function O9(r,e={}){let t=Of("weierstrass",r,e),{Fp:n,Fn:o}=t,i=t.CURVE,{h:s,n:a}=i;jn(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object"});let{endo:c}=e;if(c&&(!n.is0(i.a)||typeof c.beta!="bigint"||!Array.isArray(c.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let l=M9(n,o);function u(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function d(D,A,E){let{x,y:k}=A.toAffine(),M=n.toBytes(x);if(Io(E,"isCompressed"),E){u();let B=!n.isOdd(k);return wr(B9(B),M)}else return wr(Uint8Array.of(4),M,n.toBytes(k))}function f(D){ge(D,void 0,"Point");let{publicKey:A,publicKeyUncompressed:E}=l,x=D.length,k=D[0],M=D.subarray(1);if(x===A&&(k===2||k===3)){let B=n.fromBytes(M);if(!n.isValid(B))throw new Error("bad point: is not on curve, wrong x");let P=y(B),H;try{H=n.sqrt(P)}catch(Ce){let Ae=Ce instanceof Error?": "+Ce.message:"";throw new Error("bad point: is not on curve, sqrt error"+Ae)}u();let q=n.isOdd(H);return(k&1)===1!==q&&(H=n.neg(H)),{x:B,y:H}}else if(x===E&&k===4){let B=n.BYTES,P=n.fromBytes(M.subarray(0,B)),H=n.fromBytes(M.subarray(B,B*2));if(!g(P,H))throw new Error("bad point: is not on curve");return{x:P,y:H}}else throw new Error(`bad point: got length ${x}, expected compressed=${A} or uncompressed=${E}`)}let h=e.toBytes||d,p=e.fromBytes||f;function y(D){let A=n.sqr(D),E=n.mul(A,D);return n.add(n.add(E,n.mul(D,i.a)),i.b)}function g(D,A){let E=n.sqr(A),x=y(D);return n.eql(E,x)}if(!g(i.Gx,i.Gy))throw new Error("bad curve params: generator point");let m=n.mul(n.pow(i.a,qf),gP),b=n.mul(n.sqr(i.b),BigInt(27));if(n.is0(n.add(m,b)))throw new Error("bad curve params: a or b");function v(D,A,E=!1){if(!n.isValid(A)||E&&n.is0(A))throw new Error(`bad point coordinate ${D}`);return A}function L(D){if(!(D instanceof S))throw new Error("Weierstrass Point expected")}function V(D){if(!c||!c.basises)throw new Error("no endo");return mP(D,c.basises,o.ORDER)}let $=Oa((D,A)=>{let{X:E,Y:x,Z:k}=D;if(n.eql(k,n.ONE))return{x:E,y:x};let M=D.is0();A==null&&(A=M?n.ONE:n.inv(k));let B=n.mul(E,A),P=n.mul(x,A),H=n.mul(k,A);if(M)return{x:n.ZERO,y:n.ZERO};if(!n.eql(H,n.ONE))throw new Error("invZ was invalid");return{x:B,y:P}}),Y=Oa(D=>{if(D.is0()){if(e.allowInfinityPoint&&!n.is0(D.Y))return;throw new Error("bad point: ZERO")}let{x:A,y:E}=D.toAffine();if(!n.isValid(A)||!n.isValid(E))throw new Error("bad point: x or y not field elements");if(!g(A,E))throw new Error("bad point: equation left != right");if(!D.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function T(D,A,E,x,k){return E=new S(n.mul(E.X,D),E.Y,E.Z),A=Cl(x,A),E=Cl(k,E),A.add(E)}class S{static BASE=new S(i.Gx,i.Gy,n.ONE);static ZERO=new S(n.ZERO,n.ONE,n.ZERO);static Fp=n;static Fn=o;X;Y;Z;constructor(A,E,x){this.X=v("x",A),this.Y=v("y",E,!0),this.Z=v("z",x),Object.freeze(this)}static CURVE(){return i}static fromAffine(A){let{x:E,y:x}=A||{};if(!A||!n.isValid(E)||!n.isValid(x))throw new Error("invalid affine point");if(A instanceof S)throw new Error("projective point not allowed");return n.is0(E)&&n.is0(x)?S.ZERO:new S(E,x,n.ONE)}static fromBytes(A){let E=S.fromAffine(p(ge(A,void 0,"point")));return E.assertValidity(),E}static fromHex(A){return S.fromBytes(To(A))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(A=8,E=!0){return U.createCache(this,A),E||this.multiply(qf),this}assertValidity(){Y(this)}hasEvenY(){let{y:A}=this.toAffine();if(!n.isOdd)throw new Error("Field doesn't support isOdd");return!n.isOdd(A)}equals(A){L(A);let{X:E,Y:x,Z:k}=this,{X:M,Y:B,Z:P}=A,H=n.eql(n.mul(E,P),n.mul(M,k)),q=n.eql(n.mul(x,P),n.mul(B,k));return H&&q}negate(){return new S(this.X,n.neg(this.Y),this.Z)}double(){let{a:A,b:E}=i,x=n.mul(E,qf),{X:k,Y:M,Z:B}=this,P=n.ZERO,H=n.ZERO,q=n.ZERO,Q=n.mul(k,k),Ce=n.mul(M,M),Ae=n.mul(B,B),xe=n.mul(k,M);return xe=n.add(xe,xe),q=n.mul(k,B),q=n.add(q,q),P=n.mul(A,q),H=n.mul(x,Ae),H=n.add(P,H),P=n.sub(Ce,H),H=n.add(Ce,H),H=n.mul(P,H),P=n.mul(xe,P),q=n.mul(x,q),Ae=n.mul(A,Ae),xe=n.sub(Q,Ae),xe=n.mul(A,xe),xe=n.add(xe,q),q=n.add(Q,Q),Q=n.add(q,Q),Q=n.add(Q,Ae),Q=n.mul(Q,xe),H=n.add(H,Q),Ae=n.mul(M,B),Ae=n.add(Ae,Ae),Q=n.mul(Ae,xe),P=n.sub(P,Q),q=n.mul(Ae,Ce),q=n.add(q,q),q=n.add(q,q),new S(P,H,q)}add(A){L(A);let{X:E,Y:x,Z:k}=this,{X:M,Y:B,Z:P}=A,H=n.ZERO,q=n.ZERO,Q=n.ZERO,Ce=i.a,Ae=n.mul(i.b,qf),xe=n.mul(E,M),ke=n.mul(x,B),ze=n.mul(k,P),ft=n.add(E,x),Pe=n.add(M,B);ft=n.mul(ft,Pe),Pe=n.add(xe,ke),ft=n.sub(ft,Pe),Pe=n.add(E,k);let bt=n.add(M,P);return Pe=n.mul(Pe,bt),bt=n.add(xe,ze),Pe=n.sub(Pe,bt),bt=n.add(x,k),H=n.add(B,P),bt=n.mul(bt,H),H=n.add(ke,ze),bt=n.sub(bt,H),Q=n.mul(Ce,Pe),H=n.mul(Ae,ze),Q=n.add(H,Q),H=n.sub(ke,Q),Q=n.add(ke,Q),q=n.mul(H,Q),ke=n.add(xe,xe),ke=n.add(ke,xe),ze=n.mul(Ce,ze),Pe=n.mul(Ae,Pe),ke=n.add(ke,ze),ze=n.sub(xe,ze),ze=n.mul(Ce,ze),Pe=n.add(Pe,ze),xe=n.mul(ke,Pe),q=n.add(q,xe),xe=n.mul(bt,Pe),H=n.mul(ft,H),H=n.sub(H,xe),xe=n.mul(ft,ke),Q=n.mul(bt,Q),Q=n.add(Q,xe),new S(H,q,Q)}subtract(A){return this.add(A.negate())}is0(){return this.equals(S.ZERO)}multiply(A){let{endo:E}=e;if(!o.isValidNot0(A))throw new Error("invalid scalar: out of range");let x,k,M=B=>U.cached(this,B,P=>Ss(S,P));if(E){let{k1neg:B,k1:P,k2neg:H,k2:q}=V(A),{p:Q,f:Ce}=M(P),{p:Ae,f:xe}=M(q);k=Ce.add(xe),x=T(E.beta,Q,Ae,B,H)}else{let{p:B,f:P}=M(A);x=B,k=P}return Ss(S,[x,k])[0]}multiplyUnsafe(A){let{endo:E}=e,x=this;if(!o.isValid(A))throw new Error("invalid scalar: out of range");if(A===ko||x.is0())return S.ZERO;if(A===Wa)return x;if(U.hasCache(this))return this.multiply(A);if(E){let{k1neg:k,k1:M,k2neg:B,k2:P}=V(A),{p1:H,p2:q}=i9(S,x,M,P);return T(E.beta,H,q,k,B)}else return U.unsafe(x,A)}toAffine(A){return $(this,A)}isTorsionFree(){let{isTorsionFree:A}=e;return s===Wa?!0:A?A(S,this):U.unsafe(this,a).is0()}clearCofactor(){let{clearCofactor:A}=e;return s===Wa?this:A?A(S,this):this.multiplyUnsafe(s)}isSmallOrder(){return this.multiplyUnsafe(s).is0()}toBytes(A=!0){return Io(A,"isCompressed"),this.assertValidity(),h(S,this,A)}toHex(A=!0){return Ao(this.toBytes(A))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let O=o.BITS,U=new Ua(S,e.endo?Math.ceil(O/2):O);return S.BASE.precompute(8),S}function B9(r){return Uint8Array.of(r?2:3)}function M9(r,e){return{secretKey:e.BYTES,publicKey:1+r.BYTES,publicKeyUncompressed:1+2*r.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function yP(r,e={}){let{Fn:t}=r,n=e.randomBytes||Wn,o=Object.assign(M9(r.Fp,t),{seed:Zg(t.ORDER)});function i(h){try{let p=t.fromBytes(h);return t.isValidNot0(p)}catch{return!1}}function s(h,p){let{publicKey:y,publicKeyUncompressed:g}=o;try{let m=h.length;return p===!0&&m!==y||p===!1&&m!==g?!1:!!r.fromBytes(h)}catch{return!1}}function a(h=n(o.seed)){return Jg(ge(h,o.seed,"seed"),t.ORDER)}function c(h,p=!0){return r.BASE.multiply(t.fromBytes(h)).toBytes(p)}function l(h){let{secretKey:p,publicKey:y,publicKeyUncompressed:g}=o;if(!ms(h)||"_lengths"in t&&t._lengths||p===y)return;let m=ge(h,void 0,"key").length;return m===y||m===g}function u(h,p,y=!0){if(l(h)===!0)throw new Error("first arg must be private key");if(l(p)===!1)throw new Error("second arg must be public key");let g=t.fromBytes(h);return r.fromBytes(p).multiply(g).toBytes(y)}let d={isValidSecretKey:i,isValidPublicKey:s,randomSecretKey:a},f=Fa(a,c);return Object.freeze({getPublicKey:c,getSharedSecret:u,keygen:f,Point:r,utils:d,lengths:o})}function U9(r,e,t={}){So(e),jn(t,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"}),t=Object.assign({},t);let n=t.randomBytes||Wn,o=t.hmac||((E,x)=>wi(e,E,x)),{Fp:i,Fn:s}=r,{ORDER:a,BITS:c}=s,{keygen:l,getPublicKey:u,getSharedSecret:d,utils:f,lengths:h}=yP(r,t),p={prehash:!0,lowS:typeof t.lowS=="boolean"?t.lowS:!0,format:"compact",extraEntropy:!1},y=a*N9<i.ORDER;function g(E){let x=a>>Wa;return E>x}function m(E,x){if(!s.isValidNot0(x))throw new Error(`invalid signature ${E}: out of range 1..Point.Fn.ORDER`);return x}function b(){if(y)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function v(E,x){D3(x);let k=h.signature,M=x==="compact"?k:x==="recovered"?k+1:void 0;return ge(E,M)}class L{r;s;recovery;constructor(x,k,M){if(this.r=m("r",x),this.s=m("s",k),M!=null){if(b(),![0,1,2,3].includes(M))throw new Error("invalid recovery id");this.recovery=M}Object.freeze(this)}static fromBytes(x,k=p.format){v(x,k);let M;if(k==="der"){let{r:q,s:Q}=bi.toSig(ge(x));return new L(q,Q)}k==="recovered"&&(M=x[0],k="compact",x=x.subarray(1));let B=h.signature/2,P=x.subarray(0,B),H=x.subarray(B,B*2);return new L(s.fromBytes(P),s.fromBytes(H),M)}static fromHex(x,k){return this.fromBytes(To(x),k)}assertRecovery(){let{recovery:x}=this;if(x==null)throw new Error("invalid recovery id: must be present");return x}addRecoveryBit(x){return new L(this.r,this.s,x)}recoverPublicKey(x){let{r:k,s:M}=this,B=this.assertRecovery(),P=B===2||B===3?k+a:k;if(!i.isValid(P))throw new Error("invalid recovery id: sig.r+curve.n != R.x");let H=i.toBytes(P),q=r.fromBytes(wr(B9((B&1)===0),H)),Q=s.inv(P),Ce=$(ge(x,void 0,"msgHash")),Ae=s.create(-Ce*Q),xe=s.create(M*Q),ke=r.BASE.multiplyUnsafe(Ae).add(q.multiplyUnsafe(xe));if(ke.is0())throw new Error("invalid recovery: point at infinify");return ke.assertValidity(),ke}hasHighS(){return g(this.s)}toBytes(x=p.format){if(D3(x),x==="der")return To(bi.hexFromSig(this));let{r:k,s:M}=this,B=s.toBytes(k),P=s.toBytes(M);return x==="recovered"?(b(),wr(Uint8Array.of(this.assertRecovery()),B,P)):wr(B,P)}toHex(x){return Ao(this.toBytes(x))}}let V=t.bits2int||function(x){if(x.length>8192)throw new Error("input is too large");let k=Na(x),M=x.length*8-c;return M>0?k>>BigInt(M):k},$=t.bits2int_modN||function(x){return s.create(V(x))},Y=_l(c);function T(E){return mi("num < 2^"+c,E,ko,Y),s.toBytes(E)}function S(E,x){return ge(E,void 0,"message"),x?ge(e(E),void 0,"prehashed message"):E}function O(E,x,k){let{lowS:M,prehash:B,extraEntropy:P}=L3(k,p);E=S(E,B);let H=$(E),q=s.fromBytes(x);if(!s.isValidNot0(q))throw new Error("invalid private key");let Q=[T(q),T(H)];if(P!=null&&P!==!1){let ke=P===!0?n(h.secretKey):P;Q.push(ge(ke,void 0,"extraEntropy"))}let Ce=wr(...Q),Ae=H;function xe(ke){let ze=V(ke);if(!s.isValidNot0(ze))return;let ft=s.inv(ze),Pe=r.BASE.multiply(ze).toAffine(),bt=s.create(Pe.x);if(bt===ko)return;let ba=s.create(ft*s.create(Ae+bt*q));if(ba===ko)return;let sf=(Pe.x===bt?0:2)|Number(Pe.y&Wa),rl=ba;return M&&g(ba)&&(rl=s.neg(ba),sf^=1),new L(bt,rl,y?void 0:sf)}return{seed:Ce,k2sig:xe}}function U(E,x,k={}){let{seed:M,k2sig:B}=O(E,x,k);return K7(e.outputLen,s.BYTES,o)(M,B).toBytes(k.format)}function D(E,x,k,M={}){let{lowS:B,prehash:P,format:H}=L3(M,p);if(k=ge(k,void 0,"publicKey"),x=S(x,P),!ms(E)){let q=E instanceof L?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+q)}v(E,H);try{let q=L.fromBytes(E,H),Q=r.fromBytes(k);if(B&&q.hasHighS())return!1;let{r:Ce,s:Ae}=q,xe=$(x),ke=s.inv(Ae),ze=s.create(xe*ke),ft=s.create(Ce*ke),Pe=r.BASE.multiplyUnsafe(ze).add(Q.multiplyUnsafe(ft));return Pe.is0()?!1:s.create(Pe.x)===Ce}catch{return!1}}function A(E,x,k={}){let{prehash:M}=L3(k,p);return x=S(x,M),L.fromBytes(E,"recovered").recoverPublicKey(x).toBytes()}return Object.freeze({keygen:l,getPublicKey:u,getSharedSecret:d,utils:f,lengths:h,Point:r,sign:U,verify:D,recoverPublicKey:A,Signature:L,hash:e})}var B3={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},wP={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};var F9=BigInt(2);function bP(r){let e=B3.p,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,u=l*l*r%e,d=Je(u,t,e)*u%e,f=Je(d,t,e)*u%e,h=Je(f,F9,e)*l%e,p=Je(h,o,e)*h%e,y=Je(p,i,e)*p%e,g=Je(y,a,e)*y%e,m=Je(g,c,e)*g%e,b=Je(m,a,e)*y%e,v=Je(b,t,e)*u%e,L=Je(v,s,e)*p%e,V=Je(L,n,e)*l%e,$=Je(V,F9,e);if(!O3.eql(O3.sqr($),r))throw new Error("Cannot find square root");return $}var O3=Ba(B3.p,{sqrt:bP}),xP=O9(B3,{Fp:O3,endo:wP}),xn=U9(xP,Jr);var $9=32;function V9(r,e,t){let n=st.digest(e instanceof Uint8Array?e:e.subarray());if(Ka(n))return n.then(({digest:o})=>(t?.signal?.throwIfAborted(),xn.sign(o,r,{prehash:!1,format:"der"}))).catch(o=>{throw o.name==="AbortError"?o:new gl(String(o))});try{return xn.sign(n.digest,r,{prehash:!1,format:"der"})}catch(o){throw new gl(String(o))}}function K9(r,e,t,n){let o=st.digest(t instanceof Uint8Array?t:t.subarray());if(Ka(o))return o.then(({digest:i})=>(n?.signal?.throwIfAborted(),xn.verify(e,i,r,{prehash:!1,format:"der"}))).catch(i=>{throw i.name==="AbortError"?i:new yl(String(i))});try{return n?.signal?.throwIfAborted(),xn.verify(e,o.digest,r,{prehash:!1,format:"der"})}catch(i){throw new yl(String(i))}}var $l=class{type="secp256k1";raw;_key;constructor(e){this._key=z9(e),this.raw=H9(this._key)}toMultihash(){return Tt.digest(_t(this))}toCID(){return J.createV1(114,this.toMultihash())}toString(){return Ge.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}verify(e,t,n){return K9(this._key,t,e,n)}},Vl=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=q9(e),this.publicKey=new $l(t??W9(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}sign(e,t){return V9(this.raw,e,t)}};function M3(r){return new Vl(r)}function U3(r){return new $l(r)}async function G9(){let r=EP();return new Vl(r)}function H9(r){return xn.Point.fromBytes(r).toBytes()}function q9(r){try{return xn.getPublicKey(r,!0),r}catch(e){throw new nl(String(e))}}function z9(r){try{return xn.Point.fromBytes(r),r}catch(e){throw new bo(String(e))}}function W9(r){try{return xn.getPublicKey(r,!0)}catch(e){throw new nl(String(e))}}function EP(){return xn.utils.randomSecretKey()}async function zf(r,e){if(r==="Ed25519")return w9();if(r==="secp256k1")return G9();if(r==="RSA")return P3(vP(e));if(r==="ECDSA")return T7(SP(e));throw new mn}function pt(r,e){let{Type:t,Data:n}=Qn.decode(r),o=n??new Uint8Array;switch(t){case Ye.RSA:return C3(o,e);case Ye.Ed25519:return s3(o);case Ye.secp256k1:return U3(o);case Ye.ECDSA:return Mg(o);default:throw new mn}}function Wf(r){let{Type:e,Data:t}=Qn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ye.Ed25519:return s3(n);case Ye.secp256k1:return U3(n);case Ye.ECDSA:return Mg(n);default:throw new mn}}function _t(r){return Qn.encode({Type:Ye[r.type],Data:r.raw})}function Y9(r){let e=Ml.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ye.RSA:return I3(t);case Ye.Ed25519:return i3(t);case Ye.secp256k1:return M3(t);case Ye.ECDSA:return x7(t);default:throw new mn}}function j9(r){if(r.byteLength===kr)return i3(r);if(r.byteLength===$9)return M3(r);let e=Zr(r),t=e[2]?.[0];if(t===d7||t===f7||t===h7)return Bg(e);if(e.length>8)return Kf(e);throw new _("Could not extract private key from raw bytes")}function Cs(r){return Ml.encode({Type:Ye[r.type],Data:r.raw})}function vP(r){return r==null?2048:parseInt(r,10)}function SP(r){if(r==="P-256"||r==null)return"P-256";if(r==="P-384")return"P-384";if(r==="P-521")return"P-521";throw new _("Unsupported curve, should be P-256, P-384 or P-521")}var Kl=Uint32Array.from([1732584193,4023233417,2562383102,271733878,3285377520]),xi=new Uint32Array(80),F3=class extends ys{A=Kl[0]|0;B=Kl[1]|0;C=Kl[2]|0;D=Kl[3]|0;E=Kl[4]|0;constructor(){super(64,20,8,!1)}get(){let{A:e,B:t,C:n,D:o,E:i}=this;return[e,t,n,o,i]}set(e,t,n,o,i){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0}process(e,t){for(let c=0;c<16;c++,t+=4)xi[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)xi[c]=kf(xi[c-3]^xi[c-8]^xi[c-14]^xi[c-16],1);let{A:n,B:o,C:i,D:s,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=Rf(o,i,s),u=1518500249):c<40?(l=o^i^s,u=1859775393):c<60?(l=Pf(o,i,s),u=2400959708):(l=o^i^s,u=3395469782);let d=kf(n,5)+l+a+u+xi[c]|0;a=s,s=i,i=kf(o,30),o=n,n=d}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,o,i,s,a)}roundClean(){Xt(xi)}destroy(){this.set(0,0,0,0,0),Xt(this.buffer)}},X9=El(()=>new F3);function Q9(r,e,t,n){So(r);let o=R7({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(jt(i,"c"),jt(s,"dkLen"),jt(a,"asyncTick"),i<1)throw new Error("iterations (c) must be >= 1");let c=Ug(e,"password"),l=Ug(t,"salt"),u=new Uint8Array(s),d=wi.create(r,c),f=d._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:f}}function Z9(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),Xt(o),t}function J9(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=Q9(r,e,t,n),l,u=new Uint8Array(4),d=gs(u),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<i;h++,p+=a.outputLen){let y=s.subarray(p,p+a.outputLen);d.setInt32(0,h,!1),(l=c._cloneInto(l)).update(u).digestInto(f),y.set(f.subarray(0,y.length));for(let g=1;g<o;g++){a._cloneInto(l).update(f).digestInto(f);for(let m=0;m<y.length;m++)y[m]^=f[m]}}return Z9(a,c,s,l,f)}async function Gf(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=Q9(r,e,t,n),u,d=new Uint8Array(4),f=gs(d),h=new Uint8Array(c.outputLen);for(let p=1,y=0;y<i;p++,y+=c.outputLen){let g=a.subarray(y,y+c.outputLen);f.setInt32(0,p,!1),(u=l._cloneInto(u)).update(d).digestInto(h),g.set(h.subarray(0,g.length)),await k7(o-1,s,()=>{c._cloneInto(u).update(h).digestInto(h);for(let m=0;m<g.length;m++)g[m]^=h[m]})}return Z9(c,l,a,u,h)}var ew={sha1:X9,"sha2-256":Jr,"sha2-512":pi};function Hl(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(ew).join(" / ");throw new _(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=ew[o],s=J9(i,r,e,{c:t,dkLen:n});return mt.encode(s).substring(1)}var $3={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},tw={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},rw=new globalThis.TextEncoder;function AP(r,e){let t=$3[e],n=tw[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function TP(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=$3[e],o=tw[e],i=r;for(;i.length>0;){let s=rw.encodeInto(i,t);i=i.slice(s.read);for(let a=0;a<s.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function V3(r,{size:e=32,utf8Buffer:t}={}){if(!$3[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 TP(r,e,t);r=rw.encode(r)}return AP(r,e)}var ql={hash:r=>Number(V3(r,{size:32})),hashV:(r,e)=>_P(ql.hash(r,e))};function _P(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),R(e,"base16")}var K3=64,En=class{fp;h;seed;constructor(e,t,n,o=2){if(o>K3)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=de(o);for(let a=0;a<s.length;a++)s[a]=i[a];s.length===0&&(s[0]=7),this.fp=s,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?se(this.fp,e.fp):!1}};function ks(r,e){return Math.floor(Math.random()*(e-r))+r}var Rs=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof En))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof En))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 En))throw new TypeError("Invalid Fingerprint");let t=ks(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof En))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var IP=500,zl=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??ql,this.seed=e.seed??ks(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=R(e));let t=new En(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 Rs(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new Rs(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[ks(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new Rs(this.bucketSize));for(let a=0;a<IP;a++){let c=this.buckets[s].swap(t);if(c!=null&&(s=(s^c.hash())%this.filterSize,this.buckets[s]==null&&(this.buckets[s]=new Rs(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=R(e));let t=new En(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 i=(n^t.hash())%this.filterSize;return this.buckets[i]?.has(t)??!1}remove(e){typeof e=="string"&&(e=R(e));let t=new En(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 i=(n^t.hash())%this.filterSize,s=this.buckets[i]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},CP={1:.5,2:.84,4:.95,8:.98};function kP(r=.001){return r>.002?2:r>1e-5?4:8}function nw(r,e=.001){let t=kP(e),n=CP[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),K3);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var Yf=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??ql,this.seed=e.seed??ks(0,Math.pow(2,10)),this.filterSeries=[new zl({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=R(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 zl({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=R(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=R(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 Mt(r,e=.001,t){return new Yf({...nw(r,e),...t??{}})}function ce(r){let e=r.getComponents(),t={},n=0;if(e[n]?.name==="ip6zone"&&(t.zone=`${e[n].value}`,n++),e[n].name==="ip4"||e[n].name==="ip6"||e[n].name==="dns"||e[n].name==="dns4"||e[n].name==="dns6"?(t.type=e[n].name,t.host=e[n].value,n++):e[n].name==="dnsaddr"&&(t.type=e[n].name,t.host=`_dnsaddr.${e[n].value}`,n++),(e[n]?.name==="tcp"||e[n]?.name==="udp")&&(t.protocol=e[n].name==="tcp"?"tcp":"udp",t.port=parseInt(`${e[n].value}`),n++),e[n]?.name==="ipcidr"&&(t.type==="ip4"?t.cidr=parseInt(`${e[n].value}`):t.type==="ip6"&&(t.cidr=`${e[n].value}`),n++),t.type==null||t.host==null)throw new _(`Multiaddr ${r} was not an IPv4, IPv6, DNS, DNS4, DNS6 or DNSADDR address`);return e[n]?.name==="tls"&&e[n+1]?.name==="sni"&&(t.sni=e[n+1].value,n+=2),t}var jf=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 i=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let f=Number.parseInt(d,e);if(!Number.isNaN(f))return f});if(u===void 0)break;if(i*=e,i+=u,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:i})}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 s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&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 i=new Uint8Array(14),s=16-(n+2),[a]=e(i.subarray(0,s));return t.set(i.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var ow=45,RP=15,Ga=new jf;function Xf(r){if(!(r.length>RP))return Ga.new(r).parseWith(()=>Ga.readIPv4Addr())}function Qf(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>ow))return Ga.new(r).parseWith(()=>Ga.readIPv6Addr())}function Ya(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>ow)return;let t=Ga.new(r).parseWith(()=>Ga.readIPAddr());if(t)return e&&t.length===4?Uint8Array.from([0,0,0,0,0,0,0,0,0,0,255,255,t[0],t[1],t[2],t[3]]):t}function iw(r,e,t){let n=0;for(let o of r)if(!(n<e)){if(n>t)break;if(o!==255)return!1;n++}return!0}function sw(r,e,t,n){let o=0;for(let i of r)if(!(o<t)){if(o>n)break;if(i!==e[o])return!1;o++}return!0}function H3(r){switch(r.length){case Ps:return r.join(".");case Ls:{let e=[];for(let t=0;t<r.length;t++)t%2===0&&e.push(r[t].toString(16).padStart(2,"0")+r[t+1].toString(16).padStart(2,"0"));return e.join(":")}default:throw new Error("Invalid ip length")}}function aw(r){let e=0;for(let[t,n]of r.entries()){if(n===255){e+=8;continue}for(;(n&128)!=0;)e++,n=n<<1;if((n&128)!=0)return-1;for(let o=t+1;o<r.length;o++)if(r[o]!=0)return-1;break}return e}function cw(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Ps=4,Ls=16,LG=parseInt("0xFFFF",16),PP=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Wl(r,e){e.length===Ls&&r.length===Ps&&iw(e,0,11)&&(e=e.slice(12)),e.length===Ps&&r.length===Ls&&sw(r,PP,0,11)&&(r=r.slice(12));let t=r.length;if(t!=e.length)throw new Error("Failed to mask ip");let n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=r[o]&e[o];return n}function lw(r,e){if(typeof e=="string"&&(e=Ya(e)),e==null)throw new Error("Invalid ip");if(e.length!==r.network.length)return!1;for(let t=0;t<e.length;t++)if((r.network[t]&r.mask[t])!==(e[t]&r.mask[t]))return!1;return!0}function q3(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Ps,o=Xf(e);if(o==null&&(n=Ls,o=Qf(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=z3(i,8*n);return{network:Wl(o,s),mask:s}}function z3(r,e){if(e!==8*Ps&&e!==8*Ls)throw new Error("Invalid CIDR mask");if(r<0||r>e)throw new Error("Invalid CIDR mask");let t=e/8,n=new Uint8Array(t);for(let o=0;o<t;o++){if(r>=8){n[o]=255,r-=8;continue}n[o]=255-(255>>r),r=0}return n}var Ds=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=q3(e));else{let n=Ya(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n.length*8){let i=Ya(t);if(i==null)throw new Error("Failed to parse mask");this.mask=i}else this.mask=z3(o,8*n.length);this.network=Wl(n,this.mask)}}contains(e){return lw({network:this.network,mask:this.mask},e)}toString(){let e=aw(this.mask),t=e!==-1?String(e):cw(this.mask);return H3(this.network)+"/"+t}};function uw(r,e){return new Ds(r).contains(e)}function Zf(r){try{let e=ce(r);switch(e.type){case"ip6":return uw("2000::/3",e.host);default:return!1}}catch{return!1}}function dw(r){try{let e=ce(r);switch(e.type){case"ip4":return e.host.startsWith("169.254.");case"ip6":return e.host.toLowerCase().startsWith("fe80");default:return!1}}catch{return!1}}function fw(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function Gl(r){try{let e=ce(r);switch(e.type){case"ip4":case"ip6":return fw(e.host);default:return!1}}catch{return!1}}function Ut(r){try{return ce(r),!0}catch{return!1}}function vn(r){return!!Xf(r)}function Jf(r){return!!Qf(r)}var pw=yo(hw(),1),LP=["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"],DP=LP.map(r=>new pw.Netmask(r));function W3(r){for(let e of DP)if(e.contains(r))return!0;return!1}function NP(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function OP(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 W3(o)}function BP(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function MP(r){let e=r.split(":"),t=e[e.length-1];return W3(t)}function UP(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 ja(r){if(vn(r))return W3(r);if(NP(r))return OP(r);if(BP(r))return MP(r);if(Jf(r))return UP(r)}function ut(r){try{let e=ce(r);switch(e.type){case"ip4":case"ip6":return ja(e.host)??!1;default:return e.host==="localhost"}}catch{return!1}}function Se(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var eh=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)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}},Xa=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new eh(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 eh(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 G3=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Ft(r={}){return FP(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 FP(r,e){e=e??{};let t=e.onEnd,n=new Xa,o,i,s,a=Se(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((g,m)=>{i=b=>{i=null,n.push(b);try{g(r(n))}catch(v){m(v)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=Se()})}},l=g=>i!=null?i(g):(n.push(g),o),u=g=>(n=new Xa,i!=null?i({error:g}):(n.push({error:g}),o)),d=g=>{if(s)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=>s?o:(s=!0,g!=null?u(g):l({done:!0})),h=()=>(n=new Xa,f(),{done:!0}),p=g=>(f(g),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:d,end:f,get readableLength(){return n.size},onEmpty:async g=>{let m=g?.signal;if(m?.throwIfAborted(),n.isEmpty())return;let b,v;m!=null&&(b=new Promise((L,V)=>{v=()=>{V(new G3)},m.addEventListener("abort",v)}));try{await Promise.race([a.promise,b])}finally{v!=null&&m!=null&&m?.removeEventListener("abort",v)}}},t==null)return o;let y=o;return o={[Symbol.asyncIterator](){return this},next(){return y.next()},throw(g){return y.throw(g),t!=null&&(t(g),t=void 0),{done:!0}},return(){return y.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(g){return y.end(g),t!=null&&(t(g),t=void 0),o},get readableLength(){return y.readableLength},onEmpty:g=>y.onEmpty(g)},o}var $P=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 VP(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!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:u}=$P(r),d=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(y){n(),s(y);return}c.push(p),t.count===c.length&&(n(),i(c))},f=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)a.includes(h)||u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=ll(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function Le(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=VP(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}function Ro(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var th=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}},rh=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}},Ns=class extends Error{static name="UnexpectedEOFError";name="UnexpectedEOFError"},nh=class extends Error{static name="MaxEarlyStreamsError";name="MaxEarlyStreamsError"},oh=class extends Error{static name="StreamClosedError";name="StreamClosedError"};function KP(r){return r.reason}async function qe(r,e,t){if(e==null)return r;let n=t?.translateError??KP;if(e.aborted)return r.catch(()=>{}),Promise.reject(n(e));let o;try{return await Promise.race([r,new Promise((i,s)=>{o=()=>{s(n(e))},e.addEventListener("abort",o)})])}finally{o!=null&&e.removeEventListener("abort",o)}}var ih=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Se(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new sr)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function HP(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var sh=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=HP(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,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 sr),this.cleanup())}async join(e={}){let t=new ih(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 qe(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 $t=class extends ue{concurrency;maxSize;queue;pending;sort;paused;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.paused=!1,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=[],this.emitEmpty=Ro(this.emitEmpty.bind(this),1),this.emitIdle=Ro(this.emitIdle.bind(this),1)}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}pause(){this.paused=!0}resume(){this.paused&&(this.paused=!1,this.tryToStartAnother())}tryToStartAnother(){if(this.paused)return!1;if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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 rh;let n=new sh(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 i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw 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 sr)}),this.clear()}async onEmpty(e){this.size!==0&&await Le(this,"empty",e)}async onSizeLessThan(e,t){this.size<e||await Le(this,"next",{...t,filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Le(this,"idle",e)}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=Ft({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},i=c=>{n(c.detail.error)},s=()=>{n()},a=()=>{n(new sr("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("failure",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("failure",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var qP=Math.pow(2,20)*4,Ei=class extends ue{status;timeline;inactivityTimeout;maxReadBufferLength;maxWriteBufferLength;log;direction;maxMessageSize;readStatus;writeStatus;remoteReadStatus;remoteWriteStatus;writableNeedsDrain;readBuffer;writeBuffer;sendingData;onDrainPromise;constructor(e){super(),this.status="open",this.log=e.log,this.direction=e.direction??"outbound",this.inactivityTimeout=e.inactivityTimeout??12e4,this.maxReadBufferLength=e.maxReadBufferLength??qP,this.maxWriteBufferLength=e.maxWriteBufferLength,this.maxMessageSize=e.maxMessageSize,this.readBuffer=new ne,this.writeBuffer=new ne,this.readStatus="readable",this.remoteReadStatus="readable",this.writeStatus="writable",this.remoteWriteStatus="writable",this.sendingData=!1,this.writableNeedsDrain=!1,this.timeline={open:Date.now()},this.processSendQueue=this.processSendQueue.bind(this);let t=()=>{this.writableNeedsDrain&&(this.log.trace("drain event received, continue sending data"),this.writableNeedsDrain=!1,this.processSendQueue()),this.onDrainPromise?.resolve()};this.addEventListener("drain",t);let n=o=>{this.onDrainPromise?.reject(o.error??new oh)};this.addEventListener("close",n)}get readBufferLength(){return this.readBuffer.byteLength}get writeBufferLength(){return this.writeBuffer.byteLength}async onDrain(e){return this.writableNeedsDrain!==!0?Promise.resolve():(this.onDrainPromise==null&&(this.onDrainPromise=Promise.withResolvers()),qe(this.onDrainPromise.promise,e?.signal))}async*[Symbol.asyncIterator](){if(this.readStatus!=="readable"&&this.readStatus!=="paused")return;let e=Ft(),t=i=>{e.push(i.data)};this.addEventListener("message",t);let n=i=>{e.end(i.error)};this.addEventListener("close",n);let o=()=>{e.end()};this.addEventListener("remoteCloseWrite",o);try{yield*e}finally{this.removeEventListener("message",t),this.removeEventListener("close",n),this.removeEventListener("remoteCloseWrite",o)}}isReadable(){return this.status==="open"}send(e){if(this.writeStatus==="closed"||this.writeStatus==="closing")throw new Hn(`Cannot write to a stream that is ${this.writeStatus}`);return this.log.trace("append %d bytes to write buffer",e.byteLength),this.writeBuffer.append(e),this.processSendQueue()}abort(e){if(!(this.status==="aborted"||this.status==="reset"||this.status==="closed")){this.log.error("abort with error - %e",e),this.status="aborted",this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle")),this.writeStatus="closed",this.remoteWriteStatus="closed",this.readStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now();try{this.sendReset(e)}catch(t){this.log("failed to send reset to remote - %e",t)}this.dispatchEvent(new hf(e))}}pause(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Hn("Cannot pause a stream that is closing/closed");this.readStatus!=="paused"&&(this.readStatus="paused",this.sendPause())}resume(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Hn("Cannot resume a stream that is closing/closed");this.readStatus!=="readable"&&(this.readStatus="readable",this.dispatchReadBuffer(),this.sendResume())}push(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Hn(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.append(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}unshift(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Hn(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.prepend(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}onData(e){if(e.byteLength!==0){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("ignoring data - read status %s",this.readStatus);return}this.readBuffer.append(e),this.dispatchReadBuffer()}}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="message"&&this.readBuffer.byteLength>0&&queueMicrotask(()=>{this.dispatchReadBuffer()})}onRemoteReset(){this.log("remote reset"),this.status="reset",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now(),this.readBuffer.byteLength===0&&(this.readStatus="closed");let e=new Ea;this.dispatchEvent(new pf(e))}onTransportClosed(e){this.log("transport closed"),this.readStatus==="readable"&&this.readBuffer.byteLength===0&&(this.log("close readable end after transport closed and read buffer is empty"),this.readStatus="closed"),this.remoteReadStatus!=="closed"&&(this.remoteReadStatus="closed"),this.remoteWriteStatus!=="closed"&&(this.remoteWriteStatus="closed"),this.writeStatus!=="closed"&&(this.writeStatus="closed"),e!=null?this.abort(e):(this.status==="open"||this.status==="closing")&&(this.timeline.close=Date.now(),this.status="closed",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.dispatchEvent(new ci))}onRemoteCloseWrite(){this.remoteWriteStatus!=="closed"&&(this.log.trace("on remote close write"),this.remoteWriteStatus="closed",this.safeDispatchEvent("remoteCloseWrite"),this.writeStatus==="closed"&&this.onTransportClosed())}onRemoteCloseRead(){this.log.trace("on remote close read"),this.remoteReadStatus="closed",this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle"))}processSendQueue(){if(this.writableNeedsDrain)return this.log.trace("not processing send queue as drain is required"),this.checkWriteBufferLength(),!1;if(this.writeBuffer.byteLength===0)return this.log.trace("not processing send queue as no bytes to send"),!0;if(this.sendingData)return this.log.trace("not processing send queue as already sending data"),!0;this.sendingData=!0,this.log.trace("processing send queue with %d queued bytes",this.writeBuffer.byteLength);try{let e=!0,t=this.writeBuffer.byteLength,n=0;for(;this.writeBuffer.byteLength>0;){let o=Math.min(this.maxMessageSize??this.writeBuffer.byteLength,this.writeBuffer.byteLength);if(o===0){e=!1;break}let i=this.writeBuffer.sublist(0,o),s=new ne(i);this.writeBuffer.consume(i.byteLength);let a=this.sendData(i);if(e=a.canSendMore,n+=a.sentBytes,a.sentBytes!==s.byteLength&&(s.consume(a.sentBytes),this.writeBuffer.prepend(s)),!e)break}return e||(this.log.trace("sent %d/%d bytes, pausing sending because underlying stream is full, %d bytes left in the write buffer",n,t,this.writeBuffer.byteLength),this.writableNeedsDrain=!0,this.checkWriteBufferLength()),this.writeBuffer.byteLength===0&&this.safeDispatchEvent("idle"),e}finally{this.sendingData=!1}}dispatchReadBuffer(){try{if(this.listenerCount("message")===0){this.log.trace("not dispatching pause buffer as there are no listeners for the message event");return}if(this.readBuffer.byteLength===0){this.log.trace("not dispatching pause buffer as there is no data to dispatch");return}if(this.readStatus==="paused"){this.log.trace("not dispatching pause buffer we are paused");return}if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("dropping %d bytes because the readable end is %s",this.readBuffer.byteLength,this.readStatus),this.readBuffer.consume(this.readBuffer.byteLength);return}let e=this.readBuffer.sublist();this.readBuffer.consume(e.byteLength),this.dispatchEvent(new ff(e))}finally{this.readBuffer.byteLength===0&&this.remoteWriteStatus==="closed"&&(this.log("close readable end after dispatching read buffer and remote writable end is closed"),this.readStatus="closed"),this.checkReadBufferLength()}}checkReadBufferLength(){this.readBuffer.byteLength>this.maxReadBufferLength&&this.abort(new il(`Read buffer length of ${this.readBuffer.byteLength} exceeded limit of ${this.maxReadBufferLength}, read status is ${this.readStatus}`))}checkWriteBufferLength(){this.maxWriteBufferLength!=null&&this.writeBuffer.byteLength>this.maxWriteBufferLength&&this.abort(new il(`Write buffer length of ${this.writeBuffer.byteLength} exceeded limit of ${this.maxWriteBufferLength}, write status is ${this.writeStatus}`))}onMuxerNeedsDrain(){this.writableNeedsDrain=!0}onMuxerDrain(){this.safeDispatchEvent("drain")}};var vi=class extends Ei{remoteAddr;metricPrefix;metrics;constructor(e){super(e),this.metricPrefix=e.metricPrefix??"",this.metrics=e.metrics,this.remoteAddr=e.remoteAddr,this.addEventListener("close",t=>{this.metrics?.increment({[`${this.metricPrefix}end`]:!0}),t.error!=null?t.local?this.metrics?.increment({[`${this.metricPrefix}abort`]:!0}):this.metrics?.increment({[`${this.metricPrefix}reset`]:!0}):t.local?this.metrics?.increment({[`${this.metricPrefix}_local_close`]:!0}):this.metrics?.increment({[`${this.metricPrefix}_remote_close`]:!0})})}async close(e){this.status==="open"&&(this.status="closing",this.writeStatus="closing",this.remoteWriteStatus="closing",this.remoteReadStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await Le(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await Le(this,"drain",{...e,rejectionEvents:["close"]})),await this.sendClose(e),this.onTransportClosed())}};function ah(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Si=class extends ue{streams;protocol;status;log;maConn;streamOptions;earlyStreams;maxEarlyStreams;metrics;constructor(e,t){super(),this.maConn=e,this.protocol=t.protocol,this.streams=[],this.earlyStreams=[],this.status="open",this.log=e.log.newScope(t.name),this.streamOptions=t.streamOptions,this.maxEarlyStreams=t.maxEarlyStreams??10,this.metrics=t.metrics;let n=s=>{try{this.onData(s.data)}catch(a){this.abort(a),this.maConn.abort(a)}};this.maConn.addEventListener("message",n);let o=()=>{this.log("underlying stream drained, signal %d streams to continue writing",this.streams.length),this.streams.forEach(s=>{s.onMuxerDrain()})};this.maConn.addEventListener("drain",o);let i=()=>{this.log("underlying stream closed with status %s and %d streams",this.status,this.streams.length),this.onTransportClosed()};this.maConn.addEventListener("close",i)}send(e){let t=this.maConn.send(e);return t===!1&&(this.log("underlying stream saturated, signal %d streams to pause writing",this.streams.length),this.streams.forEach(n=>{n.onMuxerNeedsDrain()})),t}async close(e){this.status==="closed"||this.status==="closing"||(this.status="closing",await qe(Promise.all([...this.streams].map(async t=>{await t.close(e)})),e?.signal),this.status="closed")}abort(e){this.status!=="closed"&&(this.status="closing",[...this.streams].forEach(t=>{t.abort(e)}),this.status="closed")}onTransportClosed(e){this.status="closing";try{[...this.streams].forEach(t=>{t.onTransportClosed(e)})}catch(t){this.abort(t)}this.status="closed"}async createStream(e){if(this.status!=="open")throw new hn;let t=this.onCreateStream({...this.streamOptions,...e});return ah(t)&&(t=await t),this.streams.push(t),this.cleanUpStream(t),t}onRemoteStream(e){if(this.streams.push(e),this.cleanUpStream(e),this.listenerCount("stream")===0){this.earlyStreams.push(e),this.earlyStreams.length>this.maxEarlyStreams&&this.abort(new nh(`Too many early streams were opened - ${this.earlyStreams.length}/${this.maxEarlyStreams}`));return}this.safeDispatchEvent("stream",{detail:e})}cleanUpStream(e){let t=n=>{let o=this.streams.findIndex(i=>i===e);o!==-1&&this.streams.splice(o,1),n.error!=null?n.local?this.metrics?.increment({[`${e.direction}_stream_reset`]:!0}):this.metrics?.increment({[`${e.direction}_stream_abort`]:!0}):this.metrics?.increment({[`${e.direction}_stream_end`]:!0})};e.addEventListener("close",t),this.metrics?.increment({[`${e.direction}_stream`]:!0})}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="stream"&&this.earlyStreams.length>0&&queueMicrotask(()=>{this.earlyStreams.forEach(t=>{this.safeDispatchEvent("stream",{detail:t})}),this.earlyStreams=[]})}};var Ai=class extends Ei{id;protocol;constructor(e){super(e),this.id=e.id,this.protocol=e.protocol??""}async close(e){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.writeStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await Le(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData),await Le(this,"drain",{...e,rejectionEvents:["close"]}),this.log("write queue drained, closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData)),await this.sendCloseWrite(e),this.writeStatus="closed",this.log("closed writable end gracefully"),this.remoteWriteStatus==="closed"&&this.onTransportClosed())}async closeRead(e){this.readStatus==="closing"||this.readStatus==="closed"||(this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.readStatus="closing",await this.sendCloseRead(e),this.readStatus="closed",this.log("closed readable end gracefully"))}};function we(r){let e=new globalThis.AbortController;function t(){let i=r.filter(s=>s?.aborted===!0).map(s=>s?.reason).pop();e.abort(i);for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}var Qa=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,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var zP=1.2,WP=2,GP=5e3,YP=6e4,jP=5e3,Sn=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;maxTimeout;constructor(e={}){let t=e.interval??jP;this.success=new Qa(t),this.failure=new Qa(t),this.next=new Qa(t),this.failureMultiplier=e.failureMultiplier??WP,this.timeoutMultiplier=e.timeoutMultiplier??zP,this.minTimeout=e.minTimeout??GP,this.maxTimeout=e.maxTimeout??YP,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier));t<this.minTimeout&&(t=this.minTimeout),t>this.maxTimeout&&(t=this.maxTimeout);let n=AbortSignal.timeout(t),o=we([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){e.clear();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 Vt=class extends Error{static name="InvalidMultiaddrError";name="InvalidMultiaddrError"},Po=class extends Error{static name="ValidationError";name="ValidationError"},ch=class extends Error{static name="InvalidParametersError";name="InvalidParametersError"},lh=class extends Error{static name="UnknownProtocolError";name="UnknownProtocolError"};function j3(r){return e=>N(e,r)}function X3(r){return e=>R(e,r)}function Za(r){return new DataView(r.buffer).getUint16(r.byteOffset).toString()}function Os(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,typeof r=="string"?parseInt(r):r),new Uint8Array(e)}function mw(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=R(e[0],"base32"),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Os(n);return je([t,o],t.length+o.length)}function gw(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=Os(n);return je([t,o],t.length+o.length)}function Q3(r){let e=r.subarray(0,r.length-2),t=r.subarray(r.length-2),n=N(e,"base32"),o=Za(t);return`${n}:${o}`}var Z3=function(r){r=r.toString().trim();let e=new Uint8Array(4);return r.split(/\./g).forEach((t,n)=>{let o=parseInt(t,10);if(isNaN(o)||o<0||o>255)throw new Vt("Invalid byte value in IP address");e[n]=o}),e},yw=function(r){let e=0;r=r.toString().trim();let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=vn(t[n]),s;i&&(s=Z3(t[n]),t[n]=N(s.subarray(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,N(s.subarray(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 i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){t[n]===""&&(t[n]="0");let i=parseInt(t[n],16);if(isNaN(i)||i<0||i>65535)throw new Vt("Invalid byte value in IP address");o[e++]=i>>8&255,o[e++]=i&255}return o},ww=function(r){if(r.byteLength!==4)throw new Vt("IPv4 address was incorrect length");let e=[];for(let t=0;t<r.byteLength;t++)e.push(r[t]);return e.join(".")},bw=function(r){if(r.byteLength!==16)throw new Vt("IPv6 address was incorrect length");let e=[];for(let n=0;n<r.byteLength;n+=2){let o=r[n],i=r[n+1],s=`${o.toString(16).padStart(2,"0")}${i.toString(16).padStart(2,"0")}`;e.push(s)}let t=e.join(":");try{let n=new URL(`http://[${t}]`);return n.hostname.substring(1,n.hostname.length-1)}catch{throw new Vt(`Invalid IPv6 address "${t}"`)}};function xw(r){try{let e=new URL(`http://[${r}]`);return e.hostname.substring(1,e.hostname.length-1)}catch{throw new Vt(`Invalid IPv6 address "${r}"`)}}var Y3=Object.values(fs).map(r=>r.decoder),XP=(function(){let r=Y3[0].or(Y3[1]);return Y3.slice(2).forEach(e=>r=r.or(e)),r})();function Ew(r){return XP.decode(r)}function vw(r){return e=>r.encoder.encode(e)}function QP(r){if(parseInt(r).toString()!==r)throw new Po("Value must be an integer")}function ZP(r){if(r<0)throw new Po("Value must be a positive integer, or zero")}function JP(r){return e=>{if(e>r)throw new Po(`Value must be smaller than or equal to ${r}`)}}function eL(...r){return e=>{for(let t of r)t(e)}}var jl=eL(QP,ZP,JP(65535));var kt=-1,J3=class{protocolsByCode=new Map;protocolsByName=new Map;getProtocol(e){let t;if(typeof e=="string"?t=this.protocolsByName.get(e):t=this.protocolsByCode.get(e),t==null)throw new lh(`Protocol ${e} was unknown`);return t}addProtocol(e){this.protocolsByCode.set(e.code,e),this.protocolsByName.set(e.name,e),e.aliases?.forEach(t=>{this.protocolsByName.set(t,e)})}removeProtocol(e){let t=this.protocolsByCode.get(e);t!=null&&(this.protocolsByCode.delete(t.code),this.protocolsByName.delete(t.name),t.aliases?.forEach(n=>{this.protocolsByName.delete(n)}))}},No=new J3,mL=[{code:4,name:"ip4",size:32,valueToBytes:Z3,bytesToValue:ww,validate:r=>{if(!vn(r))throw new Po(`Invalid IPv4 address "${r}"`)}},{code:6,name:"tcp",size:16,valueToBytes:Os,bytesToValue:Za,validate:jl},{code:273,name:"udp",size:16,valueToBytes:Os,bytesToValue:Za,validate:jl},{code:33,name:"dccp",size:16,valueToBytes:Os,bytesToValue:Za,validate:jl},{code:41,name:"ip6",size:128,valueToBytes:yw,bytesToValue:bw,stringToValue:xw,validate:r=>{if(!Jf(r))throw new Po(`Invalid IPv6 address "${r}"`)}},{code:42,name:"ip6zone",size:kt},{code:43,name:"ipcidr",size:8,bytesToValue:j3("base10"),valueToBytes:X3("base10")},{code:53,name:"dns",size:kt},{code:54,name:"dns4",size:kt},{code:55,name:"dns6",size:kt},{code:56,name:"dnsaddr",size:kt},{code:132,name:"sctp",size:16,valueToBytes:Os,bytesToValue:Za,validate:jl},{code:301,name:"udt"},{code:302,name:"utp"},{code:400,name:"unix",size:kt,stringToValue:r=>decodeURIComponent(r),valueToString:r=>encodeURIComponent(r)},{code:421,name:"p2p",aliases:["ipfs"],size:kt,bytesToValue:j3("base58btc"),valueToBytes:r=>r.startsWith("Q")||r.startsWith("1")?X3("base58btc")(r):J.parse(r).multihash.bytes},{code:444,name:"onion",size:96,bytesToValue:Q3,valueToBytes:mw},{code:445,name:"onion3",size:296,bytesToValue:Q3,valueToBytes:gw},{code:446,name:"garlic64",size:kt},{code:447,name:"garlic32",size:kt},{code:448,name:"tls"},{code:449,name:"sni",size:kt},{code:454,name:"noise"},{code:460,name:"quic"},{code:461,name:"quic-v1"},{code:465,name:"webtransport"},{code:466,name:"certhash",size:kt,bytesToValue:vw(dl),valueToBytes:Ew},{code:480,name:"http"},{code:481,name:"http-path",size:kt,stringToValue:r=>`/${decodeURIComponent(r)}`,valueToString:r=>encodeURIComponent(r.substring(1))},{code:443,name:"https"},{code:477,name:"ws"},{code:478,name:"wss"},{code:479,name:"p2p-websocket-star"},{code:277,name:"p2p-stardust"},{code:275,name:"p2p-webrtc-star"},{code:276,name:"p2p-webrtc-direct"},{code:280,name:"webrtc-direct"},{code:281,name:"webrtc"},{code:290,name:"p2p-circuit"},{code:777,name:"memory",size:kt}];mL.forEach(r=>{No.addProtocol(r)});function Sw(r){let e=[],t=0;for(;t<r.length;){let n=Rr(r,t),o=No.getProtocol(n),i=ye(n),s=gL(o,r,t+i),a=0;s>0&&o.size===kt&&(a=ye(s));let c=i+a+s,l={code:n,name:o.name,bytes:r.subarray(t,t+c)};if(s>0){let u=t+i+a,d=r.subarray(u,u+s);l.value=o.bytesToValue?.(d)??N(d)}e.push(l),t+=c}return e}function Aw(r){let e=0,t=[];for(let n of r){if(n.bytes==null){let o=No.getProtocol(n.code),i=ye(n.code),s,a=0,c=0;n.value!=null&&(s=o.valueToBytes?.(n.value)??R(n.value),a=s.byteLength,o.size===kt&&(c=ye(a)));let l=new Uint8Array(i+c+a),u=0;Xn(n.code,l,u),u+=i,s!=null&&(o.size===kt&&(Xn(a,l,u),u+=c),l.set(s,u)),n.bytes=l}t.push(n.bytes),e+=n.bytes.byteLength}return je(t,e)}function Tw(r){if(r.charAt(0)!=="/")throw new Vt('String multiaddr must start with "/"');let e=[],t="protocol",n="",o="";for(let i=1;i<r.length;i++){let s=r.charAt(i);s!=="/"&&(t==="protocol"?o+=r.charAt(i):n+=r.charAt(i));let a=i===r.length-1;if(s==="/"||a){let c=No.getProtocol(o);if(t==="protocol"){if(c.size==null||c.size===0){e.push({code:c.code,name:c.name}),n="",o="",t="protocol";continue}else if(a)throw new Vt(`Component ${o} was missing value`);t="value"}else if(t==="value"){let l={code:c.code,name:c.name};if(c.size!=null&&c.size!==0){if(n==="")throw new Vt(`Component ${o} was missing value`);l.value=c.stringToValue?.(n)??n}e.push(l),n="",o="",t="protocol"}}}if(o!==""&&n!=="")throw new Vt("Incomplete multiaddr");return e}function _w(r){return`/${r.flatMap(e=>{if(e.value==null)return e.name;let t=No.getProtocol(e.code);if(t==null)throw new Vt(`Unknown protocol code ${e.code}`);return[e.name,t.valueToString?.(e.value)??e.value]}).join("/")}`}function gL(r,e,t){return r.size==null||r.size===0?0:r.size>0?r.size/8:Rr(e,t)}var yL=Symbol.for("nodejs.util.inspect.custom"),c4=Symbol.for("@multiformats/multiaddr");function wL(r){if(r==null&&(r="/"),Jn(r))return r.getComponents();if(r instanceof Uint8Array)return Sw(r);if(typeof r=="string")return r=r.replace(/\/(\/)+/,"/").replace(/(\/)+$/,""),r===""&&(r="/"),Tw(r);if(Array.isArray(r))return r;throw new Vt("Must be a string, Uint8Array, Component[], or another Multiaddr")}var hh=class r{[c4]=!0;#e;#t;#r;constructor(e="/",t={}){this.#e=wL(e),t.validate!==!1&&bL(this)}get bytes(){return this.#r==null&&(this.#r=Aw(this.#e)),this.#r}toString(){return this.#t==null&&(this.#t=_w(this.#e)),this.#t}toJSON(){return this.toString()}getComponents(){return[...this.#e.map(e=>({...e}))]}encapsulate(e){let t=new r(e);return new r([...this.#e,...t.getComponents()],{validate:!1})}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new ch(`Address ${this.toString()} does not contain subaddress: ${t}`);return new r(n.slice(0,o),{validate:!1})}decapsulateCode(e){let t;for(let n=this.#e.length-1;n>-1;n--)if(this.#e[n].code===e){t=n;break}return new r(this.#e.slice(0,t),{validate:!1})}equals(e){return se(this.bytes,e.bytes)}[yL](){return`Multiaddr(${this.toString()})`}};function bL(r){r.getComponents().forEach(e=>{let t=No.getProtocol(e.code);e.value!=null&&t.validate?.(e.value)})}function Jn(r){return!!r?.[c4]}function j(r){return new hh(r)}var l4=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=Se(),this.haveNext=Se()}[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=Se(),e}async throw(e){return this.ended=!0,this.error=e,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 this.ended=!0,this.nextResult=e,this.haveNext.resolve(),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 this.error??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=Se(),await qe(this.readNext.promise,t?.signal,t)}};function Iw(){return new l4}function xL(r){return r[Symbol.asyncIterator]!=null}async function EL(r,e,t){try{await Promise.all(r.map(async n=>{for await(let o of n)await e.push(o,{signal:t}),t.throwIfAborted()})),await e.end(void 0,{signal:t})}catch(n){await e.end(n,{signal:t}).catch(()=>{})}}async function*vL(r){let e=new AbortController,t=Iw();EL(r,t,e.signal).catch(()=>{});try{yield*t}finally{e.abort()}}function*SL(r){for(let e of r)yield*e}function AL(...r){let e=[];for(let t of r)xL(t)||e.push(t);return e.length===r.length?SL(e):vL(r)}var fr=AL;function rc(r,...e){if(r==null)throw new Error("Empty pipeline");if(u4(r)){let n=r;r=()=>n.source}else if(kw(r)||Cw(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&u4(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++)u4(t[n])&&(t[n]=_L(t[n]));return TL(...t)}var TL=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},Cw=r=>r?.[Symbol.asyncIterator]!=null,kw=r=>r?.[Symbol.iterator]!=null,u4=r=>r==null?!1:r.sink!=null&&r.source!=null,_L=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Ft({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(Cw(i))o=async function*(){yield*i,n.end()};else if(kw(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return fr(n,o())}return r.source};var IL=4194304,ph=class extends Error{static name="UnwrappedError";name="UnwrappedError"},tu=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},f4=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},h4=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function CL(r){return typeof r?.closeRead=="function"}function kL(r){return typeof r?.close=="function"}function d4(r){return CL(r)?r.remoteWriteStatus!=="writable"&&r.readBufferLength===0:kL(r)?r.status!=="open":!1}function RL(r){return r?.addEventListener!=null&&r?.removeEventListener!=null&&r?.send!=null&&r?.push!=null&&r?.log!=null}function mh(r,e){let t=e?.maxBufferSize??IL,n=new ne,o,i=!1;if(!RL(r))throw new _("Argument should be a Stream or a Multiaddr");let s=u=>{if(n.append(u.data),n.byteLength>t){let d=n.byteLength;n.consume(n.byteLength),o?.reject(new Error(`Read buffer overflow - ${d} > ${t}`))}o?.resolve()};r.addEventListener("message",s);let a=u=>{u.error!=null?o?.reject(u.error):o?.resolve()};r.addEventListener("close",a);let c=()=>{o?.resolve()};r.addEventListener("remoteCloseWrite",c);let l={readBuffer:n,async read(u){if(i===!0)throw new ph("Stream was unwrapped");if(d4(r)){if(n.byteLength===0&&u?.bytes==null)return null;if(u?.bytes!=null&&n.byteLength<u.bytes)throw r.log.error("closed after reading %d/%d bytes",n.byteLength,u.bytes),new Ns(`Unexpected EOF - stream closed after reading ${n.byteLength}/${u.bytes} bytes`)}let d=u?.bytes??1;for(o=Promise.withResolvers();;){if(n.byteLength>=d){o.resolve();break}if(await qe(o.promise,u?.signal),d4(r)){if(n.byteLength===0&&u?.bytes==null)return null;break}o=Promise.withResolvers()}let f=u?.bytes??n.byteLength;if(n.byteLength<f){if(d4(r))throw r.log.error("closed while reading %d/%d bytes",n.byteLength,f),new Ns(`Unexpected EOF - stream closed while reading ${n.byteLength}/${f} bytes`);return l.read(u)}let h=n.sublist(0,f);return n.consume(f),h},async write(u,d){if(i===!0)throw new ph("Stream was unwrapped");r.send(u)||await Le(r,"drain",{signal:d?.signal,rejectionEvents:["close"]})},unwrap(){return i||(i=!0,r.removeEventListener("message",s),r.removeEventListener("close",a),r.removeEventListener("remoteCloseWrite",c),n.byteLength>0&&(r.log("stream unwrapped with %d unread bytes",n.byteLength),r.push(n))),r}};return l}function _i(r,e={}){let t=mh(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=ye(e.maxDataLength));let n=e?.lengthDecoder??Rr,o=e?.lengthEncoder??Zt;return{async read(s){let a=-1,c=new ne;for(;;){let u=await t.read({...s,bytes:1});if(u==null)break;c.append(u);try{a=n(c)}catch(d){if(d instanceof RangeError)continue;throw d}if(a<0)throw new tu("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new h4(`Message length length too long - ${c.byteLength} > ${e.maxLengthLength}`);if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new f4(`Message length too long - ${a} > ${e.maxDataLength}`);let l=await t.read({...s,bytes:a});if(l==null)throw r.log.error("tried to read %d bytes but the stream closed",a),new Ns(`Unexpected EOF - tried to read ${a} bytes but the stream closed`);if(l.byteLength!==a)throw r.log.error("read %d/%d bytes before the stream closed",l.byteLength,a),new Ns(`Unexpected EOF - read ${l.byteLength}/${a} bytes before the stream closed`);return l},async write(s,a){await t.write(new ne(o(s.byteLength),s),a)},async writeV(s,a){let c=new ne(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap(){return t.unwrap()}}}function Qe(r,e){let t=_i(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var PL=1024*1024*4,LL=1024*1024*4,gh=class{buffer;maxBufferSize;lengthDecoder;maxDataLength;encodingLength;constructor(e={}){this.buffer=new ne,this.maxBufferSize=e.maxBufferSize??PL,this.maxDataLength=e.maxDataLength??LL,this.lengthDecoder=e.lengthDecoder??Rr,this.encodingLength=e.encodingLength??ye}*decode(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxBufferSize)throw new _(`Buffer length limit exceeded - ${this.buffer.byteLength}/${this.maxBufferSize}`);for(;;){let t;try{t=this.lengthDecoder(this.buffer)}catch(i){if(i instanceof RangeError)break;throw i}if(t<0||t>this.maxDataLength)throw new tu("Invalid message length");let n=this.encodingLength(t),o=n+t;if(this.buffer.byteLength>=o){let i=this.buffer.sublist(n,o);this.buffer.consume(o),i.byteLength>0&&(yield i)}else break}}};var DL=["Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function p4(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(e==="string"||e==="number"||e==="bigint"||e==="symbol")return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(r instanceof Uint8Array)return"Uint8Array";if(r.constructor===Object)return"Object";let t=NL(r);return t||"Object"}function NL(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(DL.includes(e))return e}var C=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}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};C.uint=new C(0,"uint",!0);C.negint=new C(1,"negint",!0);C.bytes=new C(2,"bytes",!0);C.string=new C(3,"string",!0);C.array=new C(4,"array",!1);C.map=new C(5,"map",!1);C.tag=new C(6,"tag",!1);C.float=new C(7,"float",!0);C.false=new C(7,"false",!0);C.true=new C(7,"true",!0);C.null=new C(7,"null",!0);C.undefined=new C(7,"undefined",!0);C.break=new C(7,"break",!0);var ee=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 ru=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",OL=new TextEncoder;function yh(r){return ru&&globalThis.Buffer.isBuffer(r)}function nu(r){return r instanceof Uint8Array?yh(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var BL=24,ML=200,wh=ru?r=>r.length>=BL?globalThis.Buffer.from(r):Rw(r):r=>r.length>=ML?OL.encode(r):Rw(r),eo=r=>Uint8Array.from(r),Pw=ru?(r,e,t)=>yh(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),Lw=ru?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),nu(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},Dw=ru?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function bh(r,e){if(yh(r)&&yh(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 Rw(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):(o>=55296&&o<=57343&&(o=65533),e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}var UL=256,ou=class{constructor(e=UL){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=Dw(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=Pw(n,0,this.cursor)}else t=Lw(this.chunks,this.cursor);return e&&this.reset(),t}},xh=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw new Error("write out of bounds, destination buffer is too small");this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};var be="CBOR decode error:",Eh="CBOR encode error:",iu=[];iu[23]=1;iu[24]=2;iu[25]=3;iu[26]=5;iu[27]=9;function Oo(r,e,t){if(r.length-e<t)throw new Error(`${be} not enough data for type`)}var Rt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Lr(r,e,t){Oo(r,e,1);let n=r[e];if(t.strict===!0&&n<Rt[0])throw new Error(`${be} integer encoded in more bytes than necessary (strict decode)`);return n}function Dr(r,e,t){Oo(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<Rt[1])throw new Error(`${be} integer encoded in more bytes than necessary (strict decode)`);return n}function Nr(r,e,t){Oo(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<Rt[2])throw new Error(`${be} integer encoded in more bytes than necessary (strict decode)`);return n}function Or(r,e,t){Oo(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],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<Rt[3])throw new Error(`${be} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${be} integers outside of the safe integer range are not supported`)}function Nw(r,e,t,n){return new ee(C.uint,Lr(r,e+1,n),2)}function Ow(r,e,t,n){return new ee(C.uint,Dr(r,e+1,n),3)}function Bw(r,e,t,n){return new ee(C.uint,Nr(r,e+1,n),5)}function Mw(r,e,t,n){return new ee(C.uint,Or(r,e+1,n),9)}function en(r,e){return et(r,0,e.value)}function et(r,e,t){if(t<Rt[0]){let n=Number(t);r.push([e|n])}else if(t<Rt[1]){let n=Number(t);r.push([e|24,n])}else if(t<Rt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<Rt[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<Rt[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${be} encountered BigInt larger than allowable range`)}}en.encodedSize=function(e){return et.encodedSize(e.value)};et.encodedSize=function(e){return e<Rt[0]?1:e<Rt[1]?2:e<Rt[2]?3:e<Rt[3]?5:9};en.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Uw(r,e,t,n){return new ee(C.negint,-1-Lr(r,e+1,n),2)}function Fw(r,e,t,n){return new ee(C.negint,-1-Dr(r,e+1,n),3)}function $w(r,e,t,n){return new ee(C.negint,-1-Nr(r,e+1,n),5)}var m4=BigInt(-1),Vw=BigInt(1);function Kw(r,e,t,n){let o=Or(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new ee(C.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${be} integers outside of the safe integer range are not supported`);return new ee(C.negint,m4-BigInt(o),9)}function vh(r,e){let t=e.value,n=typeof t=="bigint"?t*m4-Vw:t*-1-1;et(r,e.type.majorEncoded,n)}vh.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*m4-Vw:t*-1-1;return n<Rt[0]?1:n<Rt[1]?2:n<Rt[2]?3:n<Rt[3]?5:9};vh.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function su(r,e,t,n){Oo(r,e,t+n);let o=r.slice(e+t,e+t+n);return new ee(C.bytes,o,t+n)}function Hw(r,e,t,n){return su(r,e,1,t)}function qw(r,e,t,n){return su(r,e,2,Lr(r,e+1,n))}function zw(r,e,t,n){return su(r,e,3,Dr(r,e+1,n))}function Ww(r,e,t,n){return su(r,e,5,Nr(r,e+1,n))}function Gw(r,e,t,n){let o=Or(r,e+1,n);if(typeof o=="bigint")throw new Error(`${be} 64-bit integer bytes lengths not supported`);return su(r,e,9,o)}function Sh(r){return r.encodedBytes===void 0&&(r.encodedBytes=C.equals(r.type,C.string)?wh(r.value):r.value),r.encodedBytes}function nc(r,e){let t=Sh(e);et(r,e.type.majorEncoded,t.length),r.push(t)}nc.encodedSize=function(e){let t=Sh(e);return et.encodedSize(t.length)+t.length};nc.compareTokens=function(e,t){return $L(Sh(e),Sh(t))};function $L(r,e){return r.length<e.length?-1:r.length>e.length?1:bh(r,e)}var Yw=new TextDecoder,KL=32;function HL(r,e,t){if(t-e<KL){let o="";for(let i=e;i<t;i++){let s=r[i];if(s&128)return Yw.decode(r.subarray(e,t));o+=String.fromCharCode(s)}return o}return Yw.decode(r.subarray(e,t))}function au(r,e,t,n,o){let i=t+n;Oo(r,e,i);let s=new ee(C.string,HL(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=r.slice(e+t,e+i)),s}function jw(r,e,t,n){return au(r,e,1,t,n)}function Xw(r,e,t,n){return au(r,e,2,Lr(r,e+1,n),n)}function Qw(r,e,t,n){return au(r,e,3,Dr(r,e+1,n),n)}function Zw(r,e,t,n){return au(r,e,5,Nr(r,e+1,n),n)}function Jw(r,e,t,n){let o=Or(r,e+1,n);if(typeof o=="bigint")throw new Error(`${be} 64-bit integer string lengths not supported`);return au(r,e,9,o,n)}var eb=nc;function oc(r,e,t,n){return new ee(C.array,n,t)}function tb(r,e,t,n){return oc(r,e,1,t)}function rb(r,e,t,n){return oc(r,e,2,Lr(r,e+1,n))}function nb(r,e,t,n){return oc(r,e,3,Dr(r,e+1,n))}function ob(r,e,t,n){return oc(r,e,5,Nr(r,e+1,n))}function ib(r,e,t,n){let o=Or(r,e+1,n);if(typeof o=="bigint")throw new Error(`${be} 64-bit integer array lengths not supported`);return oc(r,e,9,o)}function sb(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${be} indefinite length items not allowed`);return oc(r,e,1,1/0)}function Ah(r,e){et(r,C.array.majorEncoded,e.value)}Ah.compareTokens=en.compareTokens;Ah.encodedSize=function(e){return et.encodedSize(e.value)};function ic(r,e,t,n){return new ee(C.map,n,t)}function ab(r,e,t,n){return ic(r,e,1,t)}function cb(r,e,t,n){return ic(r,e,2,Lr(r,e+1,n))}function lb(r,e,t,n){return ic(r,e,3,Dr(r,e+1,n))}function ub(r,e,t,n){return ic(r,e,5,Nr(r,e+1,n))}function db(r,e,t,n){let o=Or(r,e+1,n);if(typeof o=="bigint")throw new Error(`${be} 64-bit integer map lengths not supported`);return ic(r,e,9,o)}function fb(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${be} indefinite length items not allowed`);return ic(r,e,1,1/0)}function Th(r,e){et(r,C.map.majorEncoded,e.value)}Th.compareTokens=en.compareTokens;Th.encodedSize=function(e){return et.encodedSize(e.value)};function hb(r,e,t,n){return new ee(C.tag,t,1)}function pb(r,e,t,n){return new ee(C.tag,Lr(r,e+1,n),2)}function mb(r,e,t,n){return new ee(C.tag,Dr(r,e+1,n),3)}function gb(r,e,t,n){return new ee(C.tag,Nr(r,e+1,n),5)}function yb(r,e,t,n){return new ee(C.tag,Or(r,e+1,n),9)}function _h(r,e){et(r,C.tag.majorEncoded,e.value)}_h.compareTokens=en.compareTokens;_h.encodedSize=function(e){return et.encodedSize(e.value)};var g4=20,y4=21,w4=22,b4=23;function wb(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${be} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new ee(C.null,null,1):new ee(C.undefined,void 0,1)}function bb(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${be} indefinite length items not allowed`);return new ee(C.break,void 0,1)}function x4(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${be} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${be} Infinity values are not supported`)}return new ee(C.float,r,e)}function xb(r,e,t,n){return x4(E4(r,e+1),3,n)}function Eb(r,e,t,n){return x4(v4(r,e+1),5,n)}function vb(r,e,t,n){return x4(_b(r,e+1),9,n)}function cu(r,e,t){let n=e.value;if(n===!1)r.push([C.float.majorEncoded|g4]);else if(n===!0)r.push([C.float.majorEncoded|y4]);else if(n===null)r.push([C.float.majorEncoded|w4]);else if(n===void 0)r.push([C.float.majorEncoded|b4]);else{let o,i=!1;(!t||t.float64!==!0)&&(Ab(n),o=E4(Tn,1),n===o||Number.isNaN(n)?(Tn[0]=249,r.push(Tn.slice(0,3)),i=!0):(Tb(n),o=v4(Tn,1),n===o&&(Tn[0]=250,r.push(Tn.slice(0,5)),i=!0))),i||(YL(n),o=_b(Tn,1),Tn[0]=251,r.push(Tn.slice(0,9)))}}cu.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){Ab(n);let o=E4(Tn,1);if(n===o||Number.isNaN(n))return 3;if(Tb(n),o=v4(Tn,1),n===o)return 5}return 9};var Sb=new ArrayBuffer(9),tn=new DataView(Sb,1),Tn=new Uint8Array(Sb,0);function Ab(r){if(r===1/0)tn.setUint16(0,31744,!1);else if(r===-1/0)tn.setUint16(0,64512,!1);else if(Number.isNaN(r))tn.setUint16(0,32256,!1);else{tn.setFloat32(0,r);let e=tn.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)tn.setUint16(0,31744,!1);else if(t===0)tn.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?tn.setUint16(0,0):o<-14?tn.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):tn.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function E4(r,e){if(r.length-e<2)throw new Error(`${be} 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,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function Tb(r){tn.setFloat32(0,r,!1)}function v4(r,e){if(r.length-e<4)throw new Error(`${be} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function YL(r){tn.setFloat64(0,r,!1)}function _b(r,e){if(r.length-e<8)throw new Error(`${be} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}cu.compareTokens=en.compareTokens;function De(r,e,t){throw new Error(`${be} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Ih(r){return()=>{throw new Error(`${be} ${r}`)}}var z=[];for(let r=0;r<=23;r++)z[r]=De;z[24]=Nw;z[25]=Ow;z[26]=Bw;z[27]=Mw;z[28]=De;z[29]=De;z[30]=De;z[31]=De;for(let r=32;r<=55;r++)z[r]=De;z[56]=Uw;z[57]=Fw;z[58]=$w;z[59]=Kw;z[60]=De;z[61]=De;z[62]=De;z[63]=De;for(let r=64;r<=87;r++)z[r]=Hw;z[88]=qw;z[89]=zw;z[90]=Ww;z[91]=Gw;z[92]=De;z[93]=De;z[94]=De;z[95]=Ih("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)z[r]=jw;z[120]=Xw;z[121]=Qw;z[122]=Zw;z[123]=Jw;z[124]=De;z[125]=De;z[126]=De;z[127]=Ih("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)z[r]=tb;z[152]=rb;z[153]=nb;z[154]=ob;z[155]=ib;z[156]=De;z[157]=De;z[158]=De;z[159]=sb;for(let r=160;r<=183;r++)z[r]=ab;z[184]=cb;z[185]=lb;z[186]=ub;z[187]=db;z[188]=De;z[189]=De;z[190]=De;z[191]=fb;for(let r=192;r<=215;r++)z[r]=hb;z[216]=pb;z[217]=mb;z[218]=gb;z[219]=yb;z[220]=De;z[221]=De;z[222]=De;z[223]=De;for(let r=224;r<=243;r++)z[r]=Ih("simple values are not supported");z[244]=De;z[245]=De;z[246]=De;z[247]=wb;z[248]=Ih("simple values are not supported");z[249]=xb;z[250]=Eb;z[251]=vb;z[252]=De;z[253]=De;z[254]=De;z[255]=bb;var _n=[];for(let r=0;r<24;r++)_n[r]=new ee(C.uint,r,1);for(let r=-1;r>=-24;r--)_n[31-r]=new ee(C.negint,r,1);_n[64]=new ee(C.bytes,new Uint8Array(0),1);_n[96]=new ee(C.string,"",1);_n[128]=new ee(C.array,0,1);_n[160]=new ee(C.map,0,1);_n[244]=new ee(C.false,!1,1);_n[245]=new ee(C.true,!0,1);_n[246]=new ee(C.null,null,1);function S4(r){switch(r.type){case C.false:return eo([244]);case C.true:return eo([245]);case C.null:return eo([246]);case C.bytes:return r.value.length?void 0:eo([64]);case C.string:return r.value===""?eo([96]):void 0;case C.array:return r.value===0?eo([128]):void 0;case C.map:return r.value===0?eo([160]):void 0;case C.uint:return r.value<24?eo([Number(r.value)]):void 0;case C.negint:if(r.value>=-24)return eo([31-Number(r.value)])}}var XL={float64:!1,mapSorter:JL,quickEncodeToken:S4},Pb=Object.freeze({float64:!0,mapSorter:eD,quickEncodeToken:S4});function QL(){let r=[];return r[C.uint.major]=en,r[C.negint.major]=vh,r[C.bytes.major]=nc,r[C.string.major]=eb,r[C.array.major]=Ah,r[C.map.major]=Th,r[C.tag.major]=_h,r[C.float.major]=cu,r}var sc=QL(),Ch=new ou,uu=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${Eh} object contains circular references`);return new r(t,e)}},Ii={null:new ee(C.null,null),undefined:new ee(C.undefined,void 0),true:new ee(C.true,!0),false:new ee(C.false,!1),emptyArray:new ee(C.array,0),emptyMap:new ee(C.map,0)},to={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new ee(C.float,r):r>=0?new ee(C.uint,r):new ee(C.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new ee(C.uint,r):new ee(C.negint,r)},Uint8Array(r,e,t,n){return new ee(C.bytes,r)},string(r,e,t,n){return new ee(C.string,r)},boolean(r,e,t,n){return r?Ii.true:Ii.false},null(r,e,t,n){return Ii.null},undefined(r,e,t,n){return Ii.undefined},ArrayBuffer(r,e,t,n){return new ee(C.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new ee(C.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Ii.emptyArray,new ee(C.break)]:Ii.emptyArray;n=uu.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=kh(s,t,n);return t.addBreakTokens?[new ee(C.array,r.length),o,new ee(C.break)]:[new ee(C.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length,a;if(s){a=new Array(s),n=uu.createCheck(n,r);let c=!o&&t.ignoreUndefinedProperties,l=0;for(let u of i){let d=o?r.get(u):r[u];c&&d===void 0||(a[l++]=[kh(u,t,n),kh(d,t,n)])}l<s&&(a.length=l)}return a?.length?(ZL(a,t),t.addBreakTokens?[new ee(C.map,a.length),a,new ee(C.break)]:[new ee(C.map,a.length),a]):t.addBreakTokens===!0?[Ii.emptyMap,new ee(C.break)]:Ii.emptyMap}};to.Map=to.Object;to.Buffer=to.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))to[`${r}Array`]=to.DataView;function kh(r,e={},t){let n=p4(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||to[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=to[n];if(!i)throw new Error(`${Eh} unsupported type: ${n}`);return i(r,n,e,t)}function ZL(r,e){e.mapSorter&&r.sort(e.mapSorter)}function JL(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,i=sc[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function eD(r,e){if(r[0]instanceof ee&&e[0]instanceof ee){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=Ib(t.value)),n._keyBytes||(n._keyBytes=Ib(n.value)),bh(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function Ib(r){return Db(r,sc,Pb)}function lu(r,e,t,n){if(Array.isArray(e))for(let o of e)lu(r,o,t,n);else t[e.type.major](r,e,n)}var Cb=C.uint.majorEncoded,kb=C.negint.majorEncoded,tD=C.bytes.majorEncoded,rD=C.string.majorEncoded,Rb=C.array.majorEncoded,nD=C.float.majorEncoded|g4,oD=C.float.majorEncoded|y4,iD=C.float.majorEncoded|w4,sD=C.float.majorEncoded|b4,aD=BigInt(-1),cD=BigInt(1);function lD(r){return r.addBreakTokens!==!0}function Lb(r,e,t,n){let o=p4(e),i=t.typeEncoders&&t.typeEncoders[o];if(i){let s=i(e,o,t,n);if(s!=null){lu(r,s,sc,t);return}}switch(o){case"null":r.push([iD]);return;case"undefined":r.push([sD]);return;case"boolean":r.push([e?oD:nD]);return;case"number":!Number.isInteger(e)||!Number.isSafeInteger(e)?cu(r,new ee(C.float,e),t):e>=0?et(r,Cb,e):et(r,kb,e*-1-1);return;case"bigint":e>=BigInt(0)?et(r,Cb,e):et(r,kb,e*aD-cD);return;case"string":{let s=wh(e);et(r,rD,s.length),r.push(s);return}case"Uint8Array":et(r,tD,e.length),r.push(e);return;case"Array":if(!e.length){r.push([Rb]);return}n=uu.createCheck(n,e),et(r,Rb,e.length);for(let s of e)Lb(r,s,t,n);return;case"Object":case"Map":{let s=to.Object(e,o,t,n);lu(r,s,sc,t)}return;default:{let s=to[o];if(!s)throw new Error(`${Eh} unsupported type: ${o}`);let a=s(e,o,t,n);lu(r,a,sc,t)}}}function Db(r,e,t,n){let o=n instanceof Uint8Array,i=o?new xh(n):Ch,s=kh(r,t);if(!Array.isArray(s)&&t.quickEncodeToken){let a=t.quickEncodeToken(s);if(a)return o?(i.push(a),i.toBytes()):a;let c=e[s.type.major];if(c.encodedSize){let l=c.encodedSize(s,t);if(o||(i=new ou(l)),c(i,s,t),i.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${s} was wrong`);return o?i.toBytes():nu(i.chunks[0])}}return i.reset(),lu(i,s,e,t),i.toBytes(!0)}function ac(r,e){return e=Object.assign({},XL,e),lD(e)?(Ch.reset(),Lb(Ch,r,e,void 0),Ch.toBytes(!0)):Db(r,sc,e)}var uD={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Rh=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=_n[e];if(t===void 0){let n=z[e];if(!n)throw new Error(`${be} 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}},du=Symbol.for("DONE"),Ph=Symbol.for("BREAK");function dD(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=cc(e,t);if(i===Ph){if(r.value===1/0)break;throw new Error(`${be} got unexpected break to lengthed array`)}if(i===du)throw new Error(`${be} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function fD(r,e,t){let n=t.useMaps===!0,o=t.rejectDuplicateMapKeys===!0,i=n?void 0:{},s=n?new Map:void 0;for(let a=0;a<r.value;a++){let c=cc(e,t);if(c===Ph){if(r.value===1/0)break;throw new Error(`${be} got unexpected break to lengthed map`)}if(c===du)throw new Error(`${be} found map but not enough entries (got ${a} [no key], expected ${r.value})`);if(!n&&typeof c!="string")throw new Error(`${be} non-string keys not supported (got ${typeof c})`);if(o&&(n&&s.has(c)||!n&&Object.hasOwn(i,c)))throw new Error(`${be} found repeat map key "${c}"`);let l=cc(e,t);if(l===du)throw new Error(`${be} found map but not enough entries (got ${a} [no value], expected ${r.value})`);n?s.set(c,l):i[c]=l}return n?s:i}function cc(r,e){if(r.done())return du;let t=r.next();if(C.equals(t.type,C.break))return Ph;if(t.type.terminal)return t.value;if(C.equals(t.type,C.array))return dD(t,r,e);if(C.equals(t.type,C.map))return fD(t,r,e);if(C.equals(t.type,C.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=cc(r,e);return e.tags[t.value](n)}throw new Error(`${be} tag not supported (${t.value})`)}throw new Error("unsupported")}function Nb(r,e){if(!(r instanceof Uint8Array))throw new Error(`${be} data to decode must be a Uint8Array`);e=Object.assign({},uD,e);let t=nu(r),n=e.tokenizer||new Rh(t,e),o=cc(n,e);if(o===du)throw new Error(`${be} did not find any content to decode`);if(o===Ph)throw new Error(`${be} got unexpected break`);return[o,r.subarray(n.pos())]}function Bo(r,e){let[t,n]=Nb(r,e);if(n.length>0)throw new Error(`${be} too many terminals, data makes no sense`);return t}var Lh=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},lc=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Dh=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},fu=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function Nh(r){return r[Symbol.asyncIterator]!=null}function Bb(r,e){if(r.byteLength>e)throw new lc("Message length too long")}var Bh=r=>{let e=ye(r),t=Re(e);return Zt(r,t),Bh.bytes=e,t};Bh.bytes=0;function Mo(r,e){e=e??{};let t=e.lengthEncoder??Bh,n=e?.maxDataLength??4194304;function*o(i){Bb(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return Nh(r)?(async function*(){for await(let i of r)yield*o(i)})():(function*(){for(let i of r)yield*o(i)})()}Mo.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Bh,n=e?.maxDataLength??4194304;return Bb(r,n),new ne(t(r.byteLength),r)};var Us;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Us||(Us={}));var A4=r=>{let e=Rr(r);return A4.bytes=ye(e),e};A4.bytes=0;function Fs(r,e){let t=new ne,n=Us.LENGTH,o=-1,i=e?.lengthDecoder??A4,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===Us.LENGTH)try{if(o=i(t),o<0)throw new Lh("Invalid message length");if(o>a)throw new lc("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Us.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Dh("Message length length too long");break}throw l}if(n===Us.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Us.LENGTH}}}return Nh(r)?(async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new fu("Unexpected end of input")})():(function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new fu("Unexpected end of input")})()}Fs.fromReader=(r,e)=>{let t=1,n=(async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}})();return Fs(n,{...e??{},onLength:i=>{t=i}})};function pD(r,e){if(typeof r=="string")return mD(r);if(typeof r=="number")return wD(r,e);throw Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(r)}`)}var Mh=pD;function mD(r){if(typeof r!="string"||r.length===0||r.length>100)throw Error(`Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(r)}`);let e=/^(?<value>-?\d*\.?\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(r);if(!e?.groups)return NaN;let{value:t,unit:n="ms"}=e.groups,o=parseFloat(t),i=n.toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return o*315576e5;case"months":case"month":case"mo":return o*26298e5;case"weeks":case"week":case"w":return o*6048e5;case"days":case"day":case"d":return o*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return o*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return o*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return o*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:throw Error(`Unknown unit "${i}" provided to ms.parse(). value=${JSON.stringify(r)}`)}}function gD(r){let e=Math.abs(r);return e>=315576e5?`${Math.round(r/315576e5)}y`:e>=26298e5?`${Math.round(r/26298e5)}mo`:e>=6048e5?`${Math.round(r/6048e5)}w`: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 yD(r){let e=Math.abs(r);return e>=315576e5?$s(r,e,315576e5,"year"):e>=26298e5?$s(r,e,26298e5,"month"):e>=6048e5?$s(r,e,6048e5,"week"):e>=864e5?$s(r,e,864e5,"day"):e>=36e5?$s(r,e,36e5,"hour"):e>=6e4?$s(r,e,6e4,"minute"):e>=1e3?$s(r,e,1e3,"second"):`${r} ms`}function wD(r,e){if(typeof r!="number"||!Number.isFinite(r))throw Error("Value provided to ms.format() must be of type number.");return e?.long?yD(r):gD(r)}function $s(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function T4(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=Mh,t.destroy=l,Object.keys(r).forEach(u=>{t[u]=r[u]}),t.names=[],t.skips=[],t.formatters={};function e(u){let d=0;for(let f=0;f<u.length;f++)d=(d<<5)-d+u.charCodeAt(f),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u,d){let f,h=null,p,y;function g(...m){if(!g.enabled)return;let b=g,v=Number(new Date),L=v-(f||v);b.diff=L,b.prev=f,b.curr=v,f=v,m[0]=t.coerce(m[0]),typeof m[0]!="string"&&m.unshift("%O");let V=0;m[0]=m[0].replace(/%([a-zA-Z%])/g,(Y,T)=>{if(Y==="%%")return"%";V++;let S=t.formatters[T];if(typeof S=="function"){let O=m[V];Y=S.call(b,O),m.splice(V,1),V--}return Y}),t.formatArgs.call(b,m),d?.onLog!=null&&d.onLog(...m),(b.log||t.log).apply(b,m)}return g.namespace=u,g.useColors=t.useColors(),g.color=t.selectColor(u),g.extend=n,g.destroy=t.destroy,Object.defineProperty(g,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(p!==t.namespaces&&(p=t.namespaces,y=t.enabled(u)),y),set:m=>{h=m}}),typeof t.init=="function"&&t.init(g),g}function n(u,d){let f=t(this.namespace+(typeof d>"u"?":":d)+u);return f.log=this.log,f}function o(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,f=(typeof u=="string"?u:"").split(/[\s,]+/),h=f.length;for(d=0;d<h;d++)f[d]&&(u=f[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function i(){let u=[...t.names.map(a),...t.skips.map(a).map(d=>"-"+d)].join(",");return t.enable(""),u}function s(u){if(u[u.length-1]==="*")return!0;let d,f;for(d=0,f=t.skips.length;d<f;d++)if(t.skips[d].test(u))return!1;for(d=0,f=t.names.length;d<f;d++)if(t.names[d].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack??u.message:u}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 Uh=TD(),bD=["#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 xD(){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 ED(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Mh(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 vD=console.debug??console.log??(()=>{});function SD(r){try{r?Uh?.setItem("debug",r):Uh?.removeItem("debug")}catch{}}function AD(){let r;try{r=Uh?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function TD(){try{return localStorage}catch{}}function _D(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var Ub=T4({formatArgs:ED,save:SD,load:AD,useColors:xD,setupFormatters:_D,colors:bD,storage:Uh,log:vD});var br=Ub;br.formatters.b=r=>r==null?"undefined":Ge.baseEncode(r);br.formatters.t=r=>r==null?"undefined":At.baseEncode(r);br.formatters.m=r=>r==null?"undefined":mt.baseEncode(r);br.formatters.p=r=>r==null?"undefined":r.toString();br.formatters.c=r=>r==null?"undefined":r.toString();br.formatters.k=r=>r==null?"undefined":r.toString();br.formatters.a=r=>r==null?"undefined":r.toString();function Fb(r,e=""){let t=$b(r.message),n=$b(r.stack);return t!=null&&n!=null?n.includes(t)?`${n.split(`
4
4
  `).join(`
5
5
  ${e}`)}`:`${t}
6
6
  ${e}${n.split(`
7
7
  `).join(`
8
8
  ${e}`)}`:n!=null?`${n.split(`
9
9
  `).join(`
10
- ${e}`)}`:t!=null?`${t}`:`${r.toString()}`}function X_(r){return r instanceof AggregateError||r?.name==="AggregateError"&&Array.isArray(r.errors)}function Dy(r,e=""){if(X_(r)){let t=Ry(r,e);return r.errors.length>0?(e=`${e} `,t+=`
11
- ${e}${r.errors.map(n=>`${Dy(n,`${e}`)}`).join(`
10
+ ${e}`)}`:t!=null?`${t}`:`${r.toString()}`}function ID(r){return r instanceof AggregateError||r?.name==="AggregateError"&&Array.isArray(r.errors)}function Vb(r,e=""){if(ID(r)){let t=Fb(r,e);return r.errors.length>0?(e=`${e} `,t+=`
11
+ ${e}${r.errors.map(n=>`${Vb(n,`${e}`)}`).join(`
12
12
  ${e}`)}`):t+=`
13
- ${e}[Error list was empty]`,t.trim()}return Ry(r,e)}rr.formatters.e=r=>r==null?"undefined":Dy(r);function Q_(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function ra(r){return{forComponent(e){return Pr(e,r)}}}function Pr(r,e){let t=Q_(`${r}:trace`);return rr.enabled(`${r}:trace`)&&rr.names.map(n=>n.toString()).find(n=>n.includes(":trace"))!=null&&(t=rr(`${r}:trace`,e)),Object.assign(rr(r,e),{error:rr(`${r}:error`,e),trace:t,newScope:n=>Pr(`${r}:${n}`,e)})}function Ly(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var Ny=Symbol.for("sindresorhus/unlimited-timeout#brand");function Oy(r,e,...t){if(typeof r!="function")throw new TypeError("Expected callback to be a function");e??=0,e=Number(e);let n=!1,o={[Ny]:!0,id:void 0,cleared:!1,ref(){return n=!1,o.id?.ref?.(),o},unref(){return n=!0,o.id?.unref?.(),o}};if(e===Number.POSITIVE_INFINITY||e>Number.MAX_SAFE_INTEGER)return o;(!Number.isFinite(e)||e<0)&&(e=0);let s=performance.now()+e,i=a=>{o.cleared||(a<=2147483647?(o.id=globalThis.setTimeout(()=>{o.cleared||r(...t)},a),n&&o.id?.unref?.()):(o.id=globalThis.setTimeout(()=>{let c=performance.now(),l=Math.max(0,s-c);i(l)},2147483647),n&&o.id?.unref?.()))};return i(e),o}function My(r){!r||typeof r!="object"||!r[Ny]||(r.cleared=!0,r.id!==void 0&&(globalThis.clearTimeout(r.id),r.id=void 0))}var Z_=new WeakMap;function J_({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(o.reason);let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(o.reason)},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}),Z_.set(u,()=>{c(s),s=null,i()}),u}}var eC=J_({setTimeout:Oy,clearTimeout:My}),By=eC;var It=class extends St{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var Qd=class extends St{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};var na=class{memoryStorage;points;duration;blockDuration;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new mg}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 pd("Rate limit exceeded",i);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)}},mg=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}};function oa(r,e,t){let n,o,s=!1;function i(){let l={signal:o.signal};if(t?.timeout!=null){let d=le([o.signal,AbortSignal.timeout(t.timeout)]);l.signal=d}s=!0,Promise.resolve().then(async()=>{await r(l)}).catch(()=>{}).finally(()=>{s=!1,!o.signal.aborted&&(n=setTimeout(i,e))})}let a=Wn(i,t?.debounce??100),c=!1;return{setInterval:l=>{e!==l&&(e=l,n!=null&&(clearTimeout(n),n=setTimeout(i,e)))},setTimeout:l=>{t??={},t.timeout=l},run:()=>{s||(clearTimeout(n),a())},start:()=>{c||(c=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),c=!1}}}var gg=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 ot(r){let{name:e,metrics:t}=r,n;return t!=null?n=new gg({name:e,metrics:t}):n=new Map,n}var Zn="/",Uy=new TextEncoder().encode(Zn),Zd=Uy[0],Fe=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=C(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]!==Zd)throw new Error("Invalid key")}toString(e="utf8"){return R(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Zn))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=Uy),this._buf[0]!==Zd){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Zd,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Zd;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let s=t[o],i=n[o];if(s<i)return!0;if(s>i)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Zn).slice(1)}type(){return tC(this.baseNamespace())}name(){return rC(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Zn)||(e+=Zn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Zn):new r(e.slice(0,-1).join(Zn))}child(e){return this.toString()===Zn?e:e.toString()===Zn?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...nC(e.map(t=>t.namespaces()))])}};function tC(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function rC(r){let e=r.split(":");return e[e.length-1]}function nC(r){return[].concat(...r)}function oC(r){return r[Symbol.asyncIterator]!=null}function sC(r){if(oC(r))return(async()=>{let n=new Uint8Array(0);for await(let o of r)n=Oe([n,o],n.length+o.length);return n})();let e=[],t=0;for(let n of r)e.push(n),t+=n.byteLength;return Oe(e,t)}var Jd=sC;function ef({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*iC(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],s=G.asCID(n);s!=null?yield[o.join("/"),s]:typeof n=="object"&&(yield*yg(n,o))}else{let t=G.asCID(e);t!=null?yield[r.join("/"),t]:yield*yg(e,r)}}function*yg(r,e){if(r==null||r instanceof Uint8Array)return;let t=G.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let s=[...e,n];yield*iC(s,o)}}function*aC(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&G.asCID(n)==null&&(yield*wg(n,o))}else yield*wg(e,r)}function*wg(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"&&G.asCID(n)==null&&(yield*aC(o,n))}}function cC(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=G.asCID(t);if(s!=null)return{value:s,remaining:e.slice(n+1).join("/")}}return{value:t}}var bg=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:ef(),bytes:ef(),value:ef(),asBlock:ef()})}links(){return yg(this.value,[])}tree(){return wg(this.value,[])}get(e="/"){return cC(this.value,e.split("/").filter(Boolean))}};function Fy({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 bg({cid:e,bytes:r,value:o})}var tf=class extends Error{static name="AlreadyPinnedError";name="AlreadyPinnedError"},el=class extends Error{static name="BlockPinnedError";name="BlockPinnedError"},rf=class extends Error{static name="InvalidDatastoreVersionError";name="InvalidDatastoreVersionError"},Hs=class extends Error{static name="InvalidConfigurationError";name="InvalidConfigurationError"},nf=class extends AggregateError{static name="GetFailedError";name="GetFailedError"},of=class extends AggregateError{static name="LoadBlockFailedError";name="LoadBlockFailedError"},tl=class extends Error{static name="BlockNotFoundWhileOfflineError";name="BlockNotFoundWhileOfflineError"};var Vy="/pin/",$y="/pinned-block/",Eg=Ar,Ky=1;function sf(r){return r.version===0&&(r=r.toV1()),new Fe(`${Vy}${r.toString(Eg)}`)}var af=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=sf(e);if(await this.datastore.has(n))throw new tf("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new A("Depth must be greater than or equal to 0");let s=new St({concurrency:Ky});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>ee(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,Ko(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),s=await Jd(this.blockstore.get(e,n)),i=Fy({bytes:s,cid:e,codec:o});yield e;for(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 Fe(`${$y}${Eg.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=br(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,Ko(s),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=sf(e),o=await this.datastore.get(n,t),s=br(o);await this.datastore.delete(n,t);let i=new St({concurrency:Ky});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>ee(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:Vy+(e.cid!=null?`${e.cid.toString(Ar)}`:"")},e)){let o=G.parse(t.toString().substring(5),Ar),s=br(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new Fe(`${$y}${Eg.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=sf(e),o=await this.datastore.get(n,t);return br(o)}async setMetadata(e,t,n){let o=sf(e),s=await this.datastore.get(o,n),i=br(s);i.metadata=t??{},await this.datastore.put(o,Ko(i),n)}};var xg=1,vg=5,Sg=100;var rl=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Vo=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},nl=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},ol=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}},Ag=class extends Error{static name="InvalidCodecError";constructor(e="Invalid codec"){super(e),this.name="InvalidCodecError"}};var lC=5,cf=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??lC,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await at(...this.routers)}async stop(){await lt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Vo("No content routers available");let n=new It({concurrency:this.providerLookupConcurrency}),o=0,s=[],i=this,a=0;this.log("findProviders for %c start using routers %s",e,this.routers.map(l=>l.toString()).join(", "));let c=qs(this.routers,"findProviders").map(async function*(l){let d=0;try{for await(let u of l.findProviders(e,t))d++,yield u}catch(u){s.push(u)}finally{i.log("router %s found %d providers for %c",l,d,e),a++,a===c.length&&n.size===0&&n.emitIdle()}});for await(let l of jt(n.toGenerator(),...c))if(l!=null){if(l.multiaddrs.length===0){if(n.find(l.id)!=null)continue;n.add(async()=>{try{let d=await this.findPeer(l.id,t);return d.multiaddrs.length===0?null:{...d,protocols:l.protocols,routing:l.routing}}catch(d){return this.log.error("could not load multiaddrs for peer %p - %e",l.id,d),null}},{peerId:l.id,signal:t.signal}).catch(d=>{this.log.error("could not load multiaddrs for peer %p - %e",l.id,d)});continue}o++,yield l}this.log("findProviders finished, found %d providers for %c",o,e)}async provide(e,t={}){if(this.routers.length===0)throw new Vo("No content routers available");await Promise.all(qs(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(qs(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(qs(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){let n=[],o;try{o=await Promise.any(qs(this.routers,"get").map(async s=>{try{return await s.get(e,t)}catch(i){this.log("router %s failed with %e",s,i),n.push(i)}}))}catch{}if(o==null)throw new nf(n,`Failed to get value key ${R(e,"base58btc")}`);return o}async findPeer(e,t){if(this.routers.length===0)throw new Vo("No peer routers available");let n=this,o=jt(...qs(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 Le("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Vo("No peer routers available");for await(let n of jt(...qs(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function qs(r,e){return r.filter(t=>t[e]!=null)}var Er=class extends Error{static name="AbortError";name="AbortError";constructor(e="The operation was aborted",...t){super(e,...t)}};async function Xt(r,e,t,n){let o=new Er(n?.errorMessage);n?.errorCode!=null&&(o.code=n.errorCode);let s=n?.errorEvent??"error";return t?.aborted===!0?Promise.reject(o):new Promise((i,a)=>{function c(){Tg(t,"abort",u),Tg(r,e,l),Tg(r,s,d)}let l=f=>{try{if(n?.filter?.(f)===!1)return}catch(h){c(),a(h);return}c(),i(f)},d=f=>{if(c(),f instanceof Error){a(f);return}a(f.detail??n?.error??new Error(`The "${n?.errorEvent}" event was emitted but the event had no '.detail' field. Pass an 'error' option to race-event to change this message.`))},u=()=>{c(),a(o)};Ig(t,"abort",u),Ig(r,e,l),Ig(r,s,d)})}function Ig(r,e,t){r!=null&&(Hy(r)?r.addEventListener(e,t):r.addListener(e,t))}function Tg(r,e,t){r!=null&&(Hy(r)?r.removeEventListener(e,t):r.removeListener(e,t))}function Hy(r){return typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"}var lf=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var uf=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Promise.withResolvers(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Er)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function uC(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var df=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=uC(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,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 Er),this.cleanup())}async join(e={}){let t=new uf(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 Pe(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)})}};function _g(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var sl=class extends ie{concurrency;maxSize;queue;pending;sort;autoStart;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.autoStart=e.autoStart??!0,this.sort=e.sort,this.queue=[],this.emitEmpty=_g(this.emitEmpty.bind(this),1),this.emitIdle=_g(this.emitIdle.bind(this),1)}[Symbol.asyncIterator](){return this.toGenerator()}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}tryToStartAnother(){if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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.safeDispatchEvent("next"),this.autoStart&&this.tryToStartAnother()}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}start(){this.autoStart===!1&&(this.autoStart=!0,this.tryToStartAnother())}pause(){this.autoStart=!1}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new lf;let n=new df(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.autoStart&&this.tryToStartAnother(),n.join(t).then(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("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Er)}),this.clear()}async onEmpty(e){this.size!==0&&await Xt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Xt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Xt(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=vt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail.result)},s=c=>{n(c.detail.error)},i=()=>{n()},a=()=>{n(new Er("Queue aborted"))};this.addEventListener("success",o),this.addEventListener("failure",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("success",o),this.removeEventListener("failure",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var ff="lock:worker:request-read",hf="lock:worker:abort-read-request",pf="lock:worker:release-read",mf="lock:master:grant-read",gf="lock:master:error-read",yf="lock:worker:request-write",wf="lock:worker:abort-write-request",bf="lock:worker:release-write",Ef="lock:master:grant-write",xf="lock:master:error-write",vf="lock:worker:finalize",Sf="mortice",qy={singleProcess:!1};var Cg=(r,e,t,n,o,s,i,a,c)=>l=>{if(l.data==null)return;let d={type:l.data.type,name:l.data.name,identifier:l.data.identifier};d.type===o&&r.safeDispatchEvent(t,{detail:{name:d.name,identifier:d.identifier,handler:async()=>{e.postMessage({type:c,name:d.name,identifier:d.identifier}),await new Promise(u=>{let f=h=>{if(h?.data==null)return;let p={type:h.data.type,name:h.data.name,identifier:h.data.identifier};p.type===a&&p.identifier===d.identifier&&(e.removeEventListener("message",f),u())};e.addEventListener("message",f)})},onError:u=>{e.postMessage({type:i,name:d.name,identifier:d.identifier,error:{message:u.message,name:u.name,stack:u.stack}})}}}),d.type===s&&r.safeDispatchEvent(n,{detail:{name:d.name,identifier:d.identifier}}),d.type===vf&&r.safeDispatchEvent("finalizeRequest",{detail:{name:d.name}})};var Wy=(r=10)=>Math.random().toString().substring(2,r+2);var Af=class{name;channel;constructor(e){this.name=e,this.channel=new BroadcastChannel(Sf)}readLock(e){return this.sendRequest(ff,hf,mf,gf,pf,e)}writeLock(e){return this.sendRequest(yf,wf,Ef,xf,bf,e)}finalize(){this.channel.postMessage({type:vf,name:this.name}),this.channel.close()}async sendRequest(e,t,n,o,s,i){i?.signal?.throwIfAborted();let a=Wy();return this.channel.postMessage({type:e,identifier:a,name:this.name}),new Promise((c,l)=>{let d=()=>{this.channel.postMessage({type:t,identifier:a,name:this.name})};i?.signal?.addEventListener("abort",d,{once:!0});let u=f=>{if(f.data?.identifier===a&&(f.data?.type===n&&(this.channel.removeEventListener("message",u),i?.signal?.removeEventListener("abort",d),c(()=>{this.channel.postMessage({type:s,identifier:a,name:this.name})})),f.data.type===o)){this.channel.removeEventListener("message",u),i?.signal?.removeEventListener("abort",d);let h=new Error;f.data.error!=null&&(h.message=f.data.error.message,h.name=f.data.error.name,h.stack=f.data.error.stack),l(h)}};this.channel.addEventListener("message",u)})}};var zy=r=>{if(r=Object.assign({},qy,r),!!globalThis.document||r.singleProcess){let t=new BroadcastChannel(Sf),n=new ie;return t.addEventListener("message",Cg(n,t,"requestReadLock","abortReadLockRequest",ff,hf,gf,pf,mf)),t.addEventListener("message",Cg(n,t,"requestWriteLock","abortWriteLockRequest",yf,wf,xf,bf,Ef)),n}return new Af(r.name)};var Ws=new Map,il;function Gy(r){return typeof r?.readLock=="function"&&typeof r?.writeLock=="function"}function dC(r){if(il==null&&(il=zy(r),!Gy(il))){let e=il;e.addEventListener("requestReadLock",t=>{let n=t.detail.name,o=t.detail.identifier,s=Ws.get(n);if(s==null)return;let i=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||i.abort()};e.addEventListener("abortReadLockRequest",a),s.readLock({signal:i.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortReadLockRequest",a)})}),e.addEventListener("requestWriteLock",t=>{let n=t.detail.name,o=t.detail.identifier,s=Ws.get(n);if(s==null)return;let i=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||i.abort()};e.addEventListener("abortWriteLockRequest",a),s.writeLock({signal:i.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortWriteLockRequest",a)})}),e.addEventListener("finalizeRequest",t=>{let n=t.detail.name,o=Ws.get(n);o?.finalize()})}return il}async function kg(r,e){let t,n,o=new Promise((i,a)=>{t=i,n=a}),s=()=>{n(new Er)};return e?.signal?.addEventListener("abort",s,{once:!0}),r.add(async()=>{await new Promise(i=>{t(()=>{e?.signal?.removeEventListener("abort",s),i()})})},{signal:e?.signal}).catch(i=>{n(i)}),o}var Yy=(r,e)=>{let t=Ws.get(r);if(t!=null)return t;let n=dC(e);if(Gy(n))return t=n,Ws.set(r,t),t;let o=new sl({concurrency:1}),s;return t={async readLock(i){if(s!=null)return kg(s,i);s=new sl({concurrency:e.concurrency,autoStart:!1});let a=s,c=kg(s,i);return o.add(async()=>{a.start(),await a.onIdle().then(()=>{s===a&&(s=null)})}),c},async writeLock(i){return s=null,kg(o,i)},finalize:()=>{Ws.delete(r)},queue:o},Ws.set(r,t),e.autoFinalize===!0&&o.addEventListener("idle",()=>{t.finalize()},{once:!0}),t};var fC={name:"lock",concurrency:1/0,singleProcess:!1,autoFinalize:!1};function al(r){let e=Object.assign({},fC,r);return Yy(e.name,e)}var If=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=al({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await at(this.child),this.started=!0}async stop(){await lt(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{yield*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 el("Block was pinned - please unpin and try again");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 el("Block was pinned - please unpin and try again");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 Pg=new Fe("/version"),jy=1;async function Xy(r){if(!await r.has(Pg)){await r.put(Pg,C(`${jy}`));return}let e=await r.get(Pg),t=R(e);if(parseInt(t,10)!==jy)throw new rf("Invalid datastore version, a datastore migration may be required")}var Dg={};et(Dg,{code:()=>Lg,decode:()=>vC,decodeOptions:()=>bC,encode:()=>xC,encodeOptions:()=>yC,name:()=>EC,toByteView:()=>Zy});var Qy=42;function Zy(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function hC(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=G.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new N(y.tag,Qy),new N(y.bytes,t)]}function pC(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function mC(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}function gC(r){for(let e of r.keys())if(typeof e!="string"||e.length===0)throw new Error("Non-string Map keys are not supported by the IPLD Data Model and cannot be encoded");return null}var Rg={float64:!0,typeEncoders:{Map:gC,Object:hC,undefined:pC,number:mC}},yC={...Rg,typeEncoders:{...Rg.typeEncoders}};function wC(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return G.decode(r.subarray(1))}var Tf={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Tf.tags[Qy]=wC;var bC={...Tf,tags:Tf.tags.slice()},EC="dag-cbor",Lg=113,xC=r=>Ko(r,Rg),vC=r=>br(Zy(r),Tf);var $g={};et($g,{code:()=>Fg,decode:()=>e9,encode:()=>Jy,format:()=>DC,name:()=>LC,parse:()=>OC,stringify:()=>DC});var Ng=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(y.equals(t.type,y.array)&&(t.elements++,t.elements!==1&&e.push([44])),y.equals(t.type,y.map)&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[y.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)}[y.negint.major](e,t){this[y.uint.major](e,t)}[y.bytes.major](e,t){throw new Error(`${bn} unsupported type: Uint8Array`)}[y.string.major](e,t){this.prefix(e);let n=ji(JSON.stringify(t.value));e.push(n.length>32?Us(n):n)}[y.array.major](e,t){this.prefix(e),this.inRecursive.push({type:y.array,elements:0}),e.push([91])}[y.map.major](e,t){this.prefix(e),this.inRecursive.push({type:y.map,elements:0}),e.push([123])}[y.tag.major](e,t){}[y.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(y.equals(i.type,y.array))e.push([93]);else if(y.equals(i.type,y.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(`${bn} 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 SC(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${bn} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==y.string||n.type!==y.string)throw new Error(`${bn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${bn} unexpected duplicate map keys, this is not supported`)}var AC={addBreakTokens:!0,mapSorter:SC};function Og(r,e){return e=Object.assign({},AC,e),Kd(r,new Ng,e)}var sa=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(`${J} 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(`${J} 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 N(y.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(`${J} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${J} 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 N(y.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new N(i>=0?y.uint:y.negint,i,this._pos-e):new N(i>=0?y.uint:y.negint,BigInt(s),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${J} 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 N(y.string,c,i)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${J} 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(`${J} 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(`${J} 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(`${J} 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(`${J} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new N(y.string,C7(t),this._pos-e);default:if(s<32)throw new Error(`${J} invalid control character at position ${this._pos}`);s<128?(t.push(s),this._pos++):o()}}throw new Error(`${J} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new N(y.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new N(y.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new N(y.null,null,4);case 102:return this.expect([102,97,108,115,101]),new N(y.false,!1,5);case 116:return this.expect([116,114,117,101]),new N(y.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(`${J} 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 N(y.break,void 0,1);if(this.ch()!==44)throw new Error(`${J} 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 N(y.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 N(y.break,void 0,1);if(this.ch()!==44)throw new Error(`${J} 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 N(y.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${J} 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(`${J} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function Mg(r,e){return e=Object.assign({tokenizer:new sa(r,e)},e),br(r,e)}function TC(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function _C(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=G.asCID(r);if(!e)return null;let t=e.toString();return[new N(y.map,1/0,1),new N(y.string,"/",1),new N(y.string,t,t.length),new N(y.break,void 0,1)]}function _f(r){let e=rt.encode(r).slice(1);return[new N(y.map,1/0,1),new N(y.string,"/",1),new N(y.map,1/0,1),new N(y.string,"bytes",5),new N(y.string,e,e.length),new N(y.break,void 0,1),new N(y.break,void 0,1)]}function Qr(r){return _f(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function CC(r){return _f(new Uint8Array(r))}function kC(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function PC(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 RC={typeEncoders:{Object:_C,Buffer:_f,Uint8Array:_f,Int8Array:Qr,Uint16Array:Qr,Int16Array:Qr,Uint32Array:Qr,Int32Array:Qr,Float32Array:Qr,Float64Array:Qr,Uint8ClampedArray:Qr,BigInt64Array:Qr,BigUint64Array:Qr,DataView:Qr,ArrayBuffer:CC,undefined:kC,number:PC}},Bg=class extends sa{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(y.equals(e.type,y.map)){let t=this._next();if(y.equals(t.type,y.string)&&t.value==="/"){let n=this._next();if(y.equals(n.type,y.string)){let o=this._next();if(!y.equals(o.type,y.break))throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new N(y.tag,42,0)}if(y.equals(n.type,y.map)){let o=this._next();if(y.equals(o.type,y.string)&&o.value==="bytes"){let s=this._next();if(y.equals(s.type,y.string)){for(let a=0;a<2;a++){let c=this._next();if(!y.equals(c.type,y.break))throw new Error("Invalid encoded Bytes form")}let i=rt.decode(`m${s.value}`);return new N(y.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Ug={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Ug.tags[42]=G.parse;var LC="dag-json",Fg=297,Jy=r=>Og(r,RC),e9=r=>{let e=TC(r),t=Object.assign(Ug,{tokenizer:new Bg(e,Ug)});return Mg(e,t)},DC=r=>NC.decode(Jy(r));var NC=new TextDecoder,OC=r=>e9(MC.encode(r)),MC=new TextEncoder;var zg={};et(zg,{code:()=>Wg,createLink:()=>u9,createNode:()=>l9,decode:()=>jC,encode:()=>YC,name:()=>GC,prepare:()=>Hg,validate:()=>qg});var BC=new TextDecoder;function Kg(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 Cf(r,e){let t;[t,e]=Kg(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 t9(r,e){let t;return[t,e]=Kg(r,e),[t&7,t>>3,e]}function UC(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=t9(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]=Cf(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]=Cf(r,n),e.Name=BC.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]=Kg(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 r9(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=t9(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]=Cf(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]=Cf(r,t),n.push(UC(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 o9=new TextEncoder,n9=2**32,FC=2**31;function $C(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=cl(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=o9.encode(r.Name);t-=n.length,e.set(n,t),t=cl(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=cl(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function s9(r){let e=VC(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=cl(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let s=$C(r.Links[o],t.subarray(0,n));n-=s,n=cl(t,n,s)-1,t[n]=18}return t}function KC(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+ia(t)}if(typeof r.Name=="string"){let t=o9.encode(r.Name).length;e+=1+t+ia(t)}return typeof r.Tsize=="number"&&(e+=1+ia(r.Tsize)),e}function VC(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+ia(t)}if(r.Links)for(let t of r.Links){let n=KC(t);e+=1+n+ia(n)}return e}function cl(r,e,t){e-=ia(t);let n=e;for(;t>=FC;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function ia(r){return r%2===0&&r++,Math.floor((HC(r)+6)/7)}function HC(r){let e=0;return r>=n9&&(r=Math.floor(r/n9),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+qC[r]}var qC=[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 WC=["Data","Links"],zC=["Hash","Name","Tsize"],Vg=new TextEncoder;function a9(r,e){if(r===e)return 0;let t=r.Name?Vg.encode(r.Name):[],n=e.Name?Vg.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 i9(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function c9(r){if(typeof r.asCID=="object"){let t=G.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=G.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=G.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=G.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 Hg(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=Vg.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(c9),e.Links.sort(a9);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function qg(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!i9(r,WC))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(!i9(t,zC))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&&a9(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function l9(r,e=[]){return Hg({Data:r,Links:e})}function u9(r,e,t){return c9({Hash:t,Name:r,Tsize:e})}function d9(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var GC="dag-pb",Wg=112;function YC(r){qg(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),s9(e)}function jC(r){let e=d9(r),t=r9(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=G.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 aa(r){return r?.then!=null}function f9(r=[],e){let t={[Wg]:zg,[Mn]:fs,[Lg]:Dg,[Fg]:$g,[l2]:Nu};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);aa(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new ol(`Could not load codec for ${n}`)}}function h9(r=[],e){let t={[ze.code]:ze,[Mu.code]:Mu,[dt.code]:dt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);aa(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new nl(`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 Rr=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var Jn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,bytes:o}of e)await this.put(n,o,t),yield n}get(e,t){throw new Error(".get is not implemented")}async*getMany(e,t){for await(let n of e)yield{cid:n,bytes: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 kf=0,ca=class extends Error{static name="IdentityHashDigestTooLongError";name="IdentityHashDigestTooLongError"},Pf=class extends Jn{child;maxDigestLength;constructor(e,t){super(),this.child=e,this.maxDigestLength=t?.maxDigestLength}put(e,t,n){if(e.multihash.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return n?.signal?.throwIfAborted(),e}return this.child==null?(n?.signal?.throwIfAborted(),e):this.child.put(e,t,n)}async*get(e,t){if(e.multihash.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted(),yield e.multihash.digest;return}if(this.child==null)throw t?.signal?.throwIfAborted(),new Rr;yield*this.child.get(e,t)}has(e,t){if(e.multihash.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return t?.signal?.throwIfAborted(),!0}return this.child==null?(t?.signal?.throwIfAborted(),!1):this.child.has(e,t)}delete(e,t){if(e.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted();return}if(this.child!=null)return this.child.delete(e,t)}async*getAll(e){this.child!=null&&(yield*this.child.getAll(e)),e?.signal?.throwIfAborted()}};function XC(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 la=XC;function QC(r){return r[Symbol.asyncIterator]!=null}function ZC(r,e){let t=0;if(QC(r))return(async function*(){for await(let c of r)await e(c,t++)&&(yield c)})();let n=la(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(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 Zr=ZC;function JC(r){return r[Symbol.asyncIterator]!=null}function p9(r){return r?.then!=null}function ek(r,e){let t=0;if(JC(r))return(async function*(){for await(let c of r){let l=e(c,t++);p9(l)&&await l,yield c}})();let n=la(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(let c of n){let l=e(c,t++);p9(l)&&await l,yield c}})();let a=e;return(function*(){yield o;for(let c of n)a(c,t++),yield c})()}var Gg=ek;var tk=128,ua=class{child;getHasher;log;logger;blockBrokers;constructor(e,t={}){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.blockBrokers=e.blockBrokers,this.child=new Pf(e.blockstore,{maxDigestLength:t.maxIdentityHashDigestLength??tk}),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.blockBrokers.map(async o=>o.announce?.(e,n))),n.onProgress?.(new H("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Zr(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=Gg(n,async({cid:s})=>{t.onProgress?.(new H("blocks:put-many:providers:notify",s)),await Promise.all(this.blockBrokers.map(async i=>i.announce?.(s,t)))});t.onProgress?.(new H("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async*get(e,t={}){let n=await this.child.has(e,t),o=t.offline===!0;if(!n){if(o)throw new tl("The block was present in the blockstore and the node is running offline so cannot fetch it");let s=await this.getHasher(e.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new H("blocks:get:providers:get",e));let i=await m9(e,this.blockBrokers,s,{...t,log:this.log});t.onProgress?.(new H("blocks:get:blockstore:put",e)),await this.child.put(e,i,t),t.onProgress?.(new H("blocks:get:providers:notify",e)),await Promise.all(this.blockBrokers.map(async a=>a.announce?.(e,t))),yield i;return}t.onProgress?.(new H("blocks:get:blockstore:get",e)),yield*this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new H("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Gg(e,async n=>{let o=await this.child.has(n,t),s=t.offline===!0;if(!o){if(s)throw new tl("The block was present in the blockstore and the node is running offline so cannot fetch it");let i=await this.getHasher(n.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new H("blocks:get-many:providers:get",n));let a=await m9(n,this.blockBrokers,i,{...t,log:this.log});t.onProgress?.(new H("blocks:get-many:blockstore:put",n)),await this.child.put(n,a,t),t.onProgress?.(new H("blocks:get-many:providers:notify",n)),await Promise.all(this.blockBrokers.map(async c=>c.announce?.(n,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)}};async function m9(r,e,t,n){let o=nk(r,t),s=new AbortController,i=le([s.signal,n.signal]);s.signal;let a=[];for(let c of e)rk(c)&&a.push(c);if(a.length===0)throw new Hs(`No block brokers capable of retrieving blocks are configured, the CID ${r} cannot be fetched from the network`);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),n.signal?.throwIfAborted(),l=!0}});return l||(await o(d),n.signal?.throwIfAborted()),d}catch(l){throw n.log.error("could not retrieve verified block for %c from %s - %e",r,c.name,l),l}}))}catch(c){throw new of(c.errors,`Failed to load block for ${r}`)}finally{s.abort(),i.clear()}}function rk(r){return typeof r.retrieve=="function"}var nk=(r,e)=>{if(e==null)throw new A(`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,{truncate:r.multihash.digest.byteLength});if(aa(o)?n=await o:n=o,!ee(n.digest,r.multihash.digest))throw new bo("Hash of downloaded block did not match multihash from passed CID")}};var Rf=class extends ua{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async addPeer(e,t){await Promise.all(this.blockBrokers.map(n=>n.addPeer(e,t)))}async put(e,t,n={}){let o=le([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async*get(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=le([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=le([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=le([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};var Lf=class extends ua{started;constructor(e,t={}){super(e,t),this.started=!1}isStarted(){return this.started}async start(){await at(this.child,...this.blockBrokers),this.started=!0}async stop(){await lt(this.child,...this.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){if(this.blockBrokers.length===0)throw new Hs("No block brokers configured");let n=this.blockBrokers.map(o=>o.createSession?.(t)).filter(o=>o!=null);if(n.length===0)throw new Hs(`No configured block brokers support sessions - tried ${this.blockBrokers.map(o=>o.name).join(", ")}`);return new Rf({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}};var zs=class extends ie{initialPeerSearchComplete;requests;logName;log;logger;minProviders;maxProviders;providers;evictionFilter;initialProviders;cidPeerFilterSize;constructor(e,t){super(),this.logName=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.logName),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.cidPeerFilterSize=t.cidPeerFilterSize??100,this.providers=[],this.evictionFilter=Et(this.maxProviders),this.initialProviders=[...t.providers??[]]}async retrieve(e,t={}){let n=rt.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o.observers++,o.promise;let s=fe(),i={promise:s.promise,observers:1,queryFilter:Et(this.cidPeerFilterSize)};this.requests.set(n,i);let a=!1;this.initialPeerSearchComplete==null&&(a=!0,this.log=this.logger.forComponent(`${this.logName}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t));let c=!1,l=new St({concurrency:this.maxProviders});l.addEventListener("failure",f=>{this.log.error("error querying provider %s, evicting from session - %e",f.detail.job.options.provider,f.detail.error),this.evict(f.detail.job.options.provider)}),l.addEventListener("success",f=>{c=!0,s.resolve(f.detail.result)}),l.addEventListener("idle",()=>{if(c){this.log.trace("session idle, found block");return}if(t.signal?.aborted===!0){this.log.trace("session idle, signal aborted");return}Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let f=0;f<this.minProviders&&this.providers.length!==0;f++){let h=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(h)}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(f=>{this.log.error("could not find new providers for %c - %e",e,f),s.reject(f)})});let d=f=>{let h=this.toFilterKey(f.detail);i.queryFilter.has(h)||(i.queryFilter.add(h),this.emitFoundProviderProgressEvent(e,f.detail,t),l.add(async()=>this.queryProvider(e,f.detail,t),{provider:f.detail}).catch(p=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,p)}))};if(this.addEventListener("provider",d),a)try{await Pe(this.initialPeerSearchComplete,t.signal),a&&this.log("found initial session peers for %c",e)}catch(f){throw a&&this.log("failed to find initial session peers for %c - %e",e,f),this.requests.delete(n),i.observers>1&&s.reject(f),f}Promise.all([...this.providers].filter(f=>{let h=this.toFilterKey(f),p=i.queryFilter.has(h);return p||i.queryFilter.add(this.toFilterKey(f)),!p}).map(async f=>l.add(async()=>this.queryProvider(e,f,t),{provider:f}))).catch(f=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,f)});let u=()=>{s.reject(new Vt(t.signal?.reason??"Session aborted")),l.abort()};t.signal?.addEventListener("abort",u);try{return await Pe(s.promise,t.signal)}finally{this.removeEventListener("provider",d),t.signal?.removeEventListener("abort",u),l.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toFilterKey(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.toFilterKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async addPeer(e,t){let n=await this.convertToProvider(e,"manually-added",t);n==null||this.hasProvider(n)||(this.providers.push(n),this.safeDispatchEvent("provider",{detail:n}))}async findProviders(e,t,n){let o=fe(),s=0;return Promise.resolve().then(async()=>{if(this.log("finding %d-%d new provider(s) for %c - %d initial providers",t,this.maxProviders,e,this.initialProviders.length),this.initialProviders.length>0)for(;s<t&&this.initialProviders.length>0;){let i=this.initialProviders.pop();if(i==null)break;let a=await this.convertToProvider(i,"manual",n);if(n.signal?.aborted===!0)break;if(a!=null&&!this.hasProvider(a)&&(this.log("found %d/%d new providers",s,this.maxProviders),this.providers.push(a),this.safeDispatchEvent("provider",{detail:a}),s++,s===t&&(this.log("session is ready with %d peer(s), only initial peers present",t),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",s);break}}if(s<this.maxProviders)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 with %d peer(s), new peers present",t),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 rl(`Found ${s} of ${t} ${this.name} providers for ${e}`)}).catch(i=>{this.log.error("error searching routing for potential session peers for %c - %e",e,i),o.reject(i)}),o.promise}};var Df=class{libp2p;blockstore;datastore;events;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??e.libp2p.logger,this.log=this.logger.forComponent("helia"),this.getHasher=h9(e.hashers,e.loadHasher),this.getCodec=f9(e.codecs,e.loadCodec),this.dns=e.dns??$u(),this.metrics=e.metrics,this.libp2p=e.libp2p,this.events=new ie;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,libp2p:this.libp2p,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new cf(t,{routers:(e.routers??[]).flatMap(o=>{typeof o=="function"&&(o=o(t));let s=[o],i=ok(o);i!=null&&s.push(i);let a=sk(o);return a!=null&&s.push(a),s}),providerLookupConcurrency:e.providerLookupConcurrency}),t.blockBrokers=e.blockBrokers.map(o=>o(t));let n=new Lf(t,e);this.pins=new af(e.datastore,n,this.getCodec),this.blockstore=new If(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore}async start(){await Xy(this.datastore),await at(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("start",{detail:this}))}async stop(){await lt(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("stop",{detail:this}))}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await er(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 - %e",i),e.onProgress?.(new H("helia:gc:error",i))}})()))}finally{t()}this.log("gc finished")}};function ok(r){return r?.[Dn]}function sk(r){return r?.[On]}function ik(r){return r[Symbol.asyncIterator]!=null}function ak(r,e){let t=0;if(ik(r))return(async function*(){for await(let c of r)yield e(c,t++)})();let n=la(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(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 Lr=ak;function ck(r){return r[Symbol.asyncIterator]!=null}function lk(r,e){return ck(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 Ho=lk;var ll="/ipfs/bitswap/1.2.0";var Ye;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Ye||(Ye={}));var Yg;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Yg||(Yg={}));(function(r){r.codec=()=>We(Yg)})(Ye||(Ye={}));var da;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),Ye.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:ae(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=Ye.codec().decode(t);break}case 5:{s.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(da||(da={}));var Nf;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let s of t.entries)n.uint32(10),da.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 Ne('Decode error - map field "entries" had too many elements');s.entries.push(da.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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Nf||(Nf={}));var fa;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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:ae(0),data:ae(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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(fa||(fa={}));var Dr;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Dr||(Dr={}));var Of;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(Of||(Of={}));(function(r){r.codec=()=>We(Of)})(Dr||(Dr={}));var ha;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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&&Of[t.type]!==0&&(n.uint32(16),Dr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:ae(0),type:Dr.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=Dr.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ha||(ha={}));var Gs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Nf.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),fa.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),ha.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=Nf.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 Ne('Decode error - map field "blocks" had too many elements');s.blocks.push(fa.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 Ne('Decode error - map field "blockPresences" had too many elements');s.blockPresences.push(ha.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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Gs||(Gs={}));function g9(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 Mf=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var uk=4193648,dk=uk+16;function*y9(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=Gs.encode(l).byteLength,{added:u,hasMore:f,newSize:h}=jg(o,l.blocks,a,e,d,fk);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=jg(n,l.blockPresences,i,e,d,hk)),i+=u,d=h;let g=f;if({added:u,hasMore:f,newSize:h}=jg(t,l.wantlist.entries,s,e,d,pk),s+=u,d=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield Gs.encode(l),c)break}}function jg(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>dk)throw new Mf("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 fk(r){return Xg(3,fa.encode(r))}function hk(r){return Xg(4,ha.encode(r))}function pk(r){return Xg(1,da.encode(r))}function Xg(r,e){let t=he(r),n=he(e.byteLength);return t+n+e.byteLength}var Bf=class extends ie{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??[ll],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 It({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"})}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,t){this.running&&Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",e.protocol,t.remotePeer);let n=()=>{e.status==="open"?e.abort(new un(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",e.status)},o=AbortSignal.timeout(this.messageReceiveTimeout);o.addEventListener("abort",n),await e.close({signal:o});let s=vt();e.addEventListener("message",i=>{s.push(i.data)}),e.addEventListener("remoteCloseWrite",()=>{s.end()}),e.addEventListener("close",i=>{i.error!=null&&s.end(i.error)});for await(let i of Ks(s,{maxDataLength:this.maxIncomingMessageSize}))try{let a=Gs.decode(i);this.log("incoming new bitswap %s message from %p on stream",e.protocol,t.remotePeer,e.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:t.remotePeer,message:a}}),o.removeEventListener("abort",n),o=AbortSignal.timeout(this.messageReceiveTimeout),o.addEventListener("abort",n)}catch(a){this.log.error("error reading incoming bitswap message from %p on stream - %e",t.remotePeer,e.id,a),e.abort(a);break}}).catch(n=>{this.log.error("error handling incoming stream from %p - %e",t.remotePeer,n),e.abort(n)})}async*findProviders(e,t){t?.onProgress?.(new H("bitswap:find-providers",e));for await(let n of this.routing.findProviders(e,t)){if(!await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})){this.log("skipping peer %p as they are not dialable - %a",n.id,n.multiaddrs);continue}t?.onProgress?.(new H("bitswap:found-provider",{type:"bitswap",cid:e,provider:n,routing:n.routing})),yield n}}async findAndConnect(e,t){t?.providers!=null&&await Promise.all(t.providers.map(async n=>this.connectTo(n).catch(o=>{this.log.error("could not connect to supplied provider - %e",o)}))),await er(Lr(Ho(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=g9(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 A("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,ll,s);await a.closeRead();try{for(let c of y9(i,this.maxOutgoingMessageSize))a.send(Qn.single(c))||await a.onDrain(s);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",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),Xt(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(ll))return!0;throw new pi(`${e} did not support ${ll}`)}})]);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)}};var w9=Symbol.for("nodejs.util.inspect.custom"),Sk=114,ul=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()})`}[ku]=!0;toString(){return this.string==null&&(this.string=De.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return G.createV1(Sk,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return ee(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return ee(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[w9](){return`PeerId(${this.toString()})`}},dl=class extends ul{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},fl=class extends ul{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},hl=class extends ul{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},Ak=2336,pl=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=dt.digest(C(this.url))}[w9](){return`PeerId(${this.url})`}[ku]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return G.createV1(Ak,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=R(e)),e.toString()===this.toString())}};var Ik=114,b9=2336;function Me(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=ke(De.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Jr(G.parse(r));if(e==null)throw new A('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=ke(e.decode(r))}return Ze(t)}function xn(r){if(r.type==="Ed25519")return new fl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new hl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new dl({multihash:r.toCID().multihash,publicKey:r});throw new Fr}function E9(r){return xn(r.publicKey)}function Ze(r){if(_k(r))return new dl({multihash:r});if(Tk(r))try{let e=sd(r);if(e.type==="Ed25519")return new fl({multihash:r,publicKey:e});if(e.type==="secp256k1")return new hl({multihash:r,publicKey:e})}catch{let t=R(r.digest);return new pl(new URL(t))}throw new bo("Supplied PeerID Multihash is invalid")}function Jr(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==Ik&&r.code!==b9)throw new Au("Supplied PeerID CID is invalid");if(r.code===b9){let e=R(r.multihash.digest);return new pl(new URL(e))}return Ze(r.multihash)}function Tk(r){return r.code===dt.code}function _k(r){return r.code===ze.code}function Ys(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 Uf(r){let e=ke(De.decode(`z${r}`));return Ze(e)}var Ut=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 Ys(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 Ys(this.map.values(),e=>e.key)}values(){return Ys(this.map.values(),e=>e.value)}get size(){return this.map.size}};var xr=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 Ys(this.set.entries(),e=>{let t=Uf(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Uf(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Ys(this.set.values(),e=>Uf(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 Qg(){return new xr}var Ff=class{filter;constructor(e,t){this.filter=Et(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 Zg(r,e=.001){return new Ff(r,e)}var Jg=class extends Ut{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 eo(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Jg({name:e,metrics:t}):n=new Ut,n}var to=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=rt.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=rt.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=rt.encode(e.multihash.bytes);this.blocks.set(n,t)}};function Ck(r){let e=new Uint8Array(r.reduce((n,o)=>n+he(o),0)),t=0;for(let n of r)e=Mt(n,e,t),t+=he(n);return e}var x9=Ck;function e3(r){return x9([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var $f=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;doNotResendBlockWindow;maxWantListSize;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,this.doNotResendBlockWindow=t.doNotResendBlockWindow??5e3,this.maxWantListSize=t.maxWantListSize??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)}removeExpiredWants(){this.wants.forEach((e,t)=>{e.expires!=null&&e.expires<Date.now()&&this.wants.delete(t)})}addWants(e){if(e==null)return;e.full===!0&&this.wants.forEach((n,o)=>{n.status==="want"&&this.wants.delete(o)});for(let n of e.entries){let o=G.decode(n.cid),s=R(o.multihash.bytes,"base64");if(n.cancel===!0)this.log("peer %p cancelled want of block for %c",this.peerId,o),this.wants.delete(s);else{n.wantType===Ye.WantHave?this.log("peer %p wanted block presence for %c",this.peerId,o):this.log("peer %p wanted block for %c",this.peerId,o);let i=this.wants.get(s);if(i!=null){let a=i.status==="sent"||i.status==="sending",c=i.wantType===Ye.WantHave&&(n.wantType==null||n.wantType===Ye.WantBlock);a&&c&&(i.status="want"),i.priority=n.priority,i.wantType=n.wantType??Ye.WantBlock,i.sendDontHave=n.sendDontHave??!1;continue}this.wants.set(s,{cid:o,priority:n.priority,wantType:n.wantType??Ye.WantBlock,sendDontHave:n.sendDontHave??!1,status:"want",created:Date.now()})}}let t=[...this.wants.entries()].filter(([n,o])=>o.status==="want");t.length>this.maxWantListSize&&this.truncateWants(t)}truncateWants(e){e=e.sort((n,o)=>n[1].created<o[1].created?-1:o[1].created<n[1].created?1:0).sort((n,o)=>n[1].haveBlock===!1?-1:o[1].haveBlock===!1?1:0).sort((n,o)=>n[1].priority<o[1].priority?-1:o[1].priority<n[1].priority?1:0);let t=e.length-this.maxWantListSize;for(let n=0;n<t;n++)this.wants.delete(e[n][0])}getWants(){return[...this.wants.values()]}hasWant(e){let t=R(e.multihash.bytes,"base64");return this.wants.has(t)}async sendBlocksToPeer(e){let t=new to,n=new Set;this.removeExpiredWants();let o=[...this.wants.entries()].filter(([s,i])=>i.status==="want");o.forEach(([s,i])=>{i.status="sending"});for(let[s,i]of o)try{let a=await Jd(this.blockstore.get(i.cid,e));if(i.status!=="sending")continue;i.wantType===Ye.WantHave?a.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(s),t.addBlock(i.cid,{data:a,prefix:e3(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Dr.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(s),t.addBlock(i.cid,{data:a,prefix:e3(i.cid)})),i.status="sent",i.expires=Date.now()+this.doNotResendBlockWindow}catch(a){if(a.name!=="NotFoundError")throw a;if(i.status="want",i.haveBlock=!1,this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDoNotHave===!0)continue;i.sentDoNotHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Dr.DoNotHaveBlock})}(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((s,i)=>s+i.data.byteLength,0)))}};var Kf=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;doNotResendBlockWindow;maxWantListSize;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.doNotResendBlockWindow=t.doNotResendBlockWindow,this.maxWantListSize=t.maxWantListSize,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=eo({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 - %e",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.removeExpiredWants(),t.getWants()}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);n==null&&(n=new $f({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock,doNotResendBlockWindow:this.doNotResendBlockWindow,maxWantListSize:this.maxWantListSize}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,s)=>o+s.data.byteLength,0)??0),n.removeExpiredWants(),n.addWants(t.wantlist),this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=[];for(let o of this.ledgerMap.values())o.hasWant(e)&&n.push(o);await Promise.all(n.map(async o=>o.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var t3=class extends zs{name="bitswap-session";wantList;network;libp2p;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network,this.libp2p=e.libp2p}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t.peerId,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{peerId:n.id,routing:n.routing}}toFilterKey(e){return e.peerId.toMultihash().bytes}equals(e,t){return e.peerId.equals(t.peerId)}async convertToProvider(e,t,n){if(Rt(e))return{peerId:e,routing:t};if(await this.libp2p.isDialable(e)!==!1)try{return{peerId:(await this.libp2p.dial(e,n)).remotePeer,routing:t}}catch{}}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new H("bitswap:found-provider",{type:"bitswap",cid:e,provider:{id:t.peerId,multiaddrs:[],routing:t.routing},routing:t.routing}))}};function v9(r,e){return new t3(r,e)}var Vf=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)}};function kk(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=hr(r);e.push(t),r=r.slice(he(t))}return e}var S9=kk;var Hf=class extends ie{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=eo({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=ot({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 - %e",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 - %e",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=R(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??Ye.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===Ye.WantHave&&t.wantType===Ye.WantBlock&&(o.wantType=Ye.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===Ye.WantBlock?(await Xt(this,"block",t?.signal,{filter:a=>ee(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await Xt(this,"presence",t?.signal,{filter:i=>ee(e.multihash.digest,i.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers - %e",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=fe(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new to;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 - %e",s)}})).catch(e=>{this.log.error("error sending messages - %e",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=R(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new to;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ye.WantHave,priority:1}),await this.network.sendMessage(t,o),(await Xt(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&ee(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:Ye.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new to;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ye.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await Xt(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&ee(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=R(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=S9(o.prefix),i=s[0],a=s[1],c=s[2],l=s[3],d=c===ze.code?ze:await this.hashLoader?.getHasher(c);if(d==null){this.log.error("unknown hash algorithm",c);continue}let u=d.digest(o.data,{truncate:l});u.then!=null&&(u=await u);let f=G.create(i===0?0:1,a,u);this.log("received block from %p for %c",e,f),this.safeDispatchEvent("block",{detail:{sender:e,cid:f,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:f,has:!0,block:o.data}});let h=R(f.multihash.bytes,"base64"),p=this.wants.get(h);p!=null&&(p.cancel=!0,n=!0)}for(let{cid:o,type:s}of t.blockPresences){let i=G.decode(o);this.log("received %s from %p for %c",s,e,i),this.safeDispatchEvent("presence",{detail:{sender:e,cid:i,has:s===Dr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new to(!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:Ye.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",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var qf=class{log;logger;stats;network;blockstore;peerWantLists;wantList;libp2p;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.libp2p=e.libp2p,this.stats=new Vf(e),this.network=new Bf(e,t),this.peerWantLists=new Kf({...e,network:this.network},t),this.wantList=new Hf({...e,network:this.network},t)}createSession(e={}){return v9({wantList:this.wantList,network:this.network,logger:this.logger,libp2p:this.libp2p},e)}async want(e,t={}){let n=new AbortController,o=le([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:o}).catch(s=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c - %e",e,s)});try{let s=await this.wantList.wantBlock(e,{...t,signal:o});return t.onProgress?.(new H("bitswap:block",{cid:e,sender:s.sender})),s.block}finally{n.abort(),o.clear()}}async notify(e,t={}){await Promise.all([this.peerWantLists.receivedBlock(e,t),this.wantList.receivedBlock(e,t)])}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 A9=(r,e={})=>new qf(r,e);var r3=class{name="bitswap";bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=A9(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){await this.bitswap.notify(e,t)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{name:"bitswap-session",addPeer:async(n,o)=>{await t.addPeer(n,o)},announce:async(n,o)=>{await this.bitswap.notify(n,o)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function n3(r={}){return e=>new r3(e,r)}var Pk=[6,53,56,54,55];function I9(r){return C9("sni",r)?.value}function T9(r){let e=C9("tcp",r)?.value;return e==null?"":`:${e}`}function C9(r,e){return e.find(t=>t.name===r)}function _9(r){return r.some(({code:e})=>e===448)}function en(r,e){let t=k9[r.name];if(t==null)throw new Error(`Can't interpret protocol ${r.name}`);let n=t(r,e);return r.code===41?`[${n}]`:n}var k9={ip4:(r,e)=>r.value,ip6:(r,e)=>e.length===0?r.value:`[${r.value}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${en(t,e)}:${r.value}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${en(t,e)}:${r.value}`},dnsaddr:(r,e)=>r.value,dns4:(r,e)=>r.value,dns6:(r,e)=>r.value,dns:(r,e)=>r.value,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${en(t,e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${en(t,e)}`},http:(r,e)=>{let t=_9(e),n=I9(e),o=T9(e);if(t&&n!=null)return`https://${n}${o}`;let s=t?"https://":"http://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=en(i,e);return a=a?.replace("tcp://",""),`${s}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=en(t,e),o=decodeURIComponent(r.value??"");return`${n}${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return en(t,e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return en(t,e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=en(t,e);return n=n?.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=_9(e),n=I9(e),o=T9(e);if(t&&n!=null)return`wss://${n}${o}`;let s=t?"wss://":"ws://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=en(i,e);return a=a?.replace("tcp://",""),`${s}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=en(t,e);return n=n?.replace("tcp://",""),`wss://${n}`}};function qo(r,e){let n=q(r).getComponents(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let s=k9[o.name];if(s==null)throw new Error(`No interpreter found for ${o.name}`);let i=s(o,n)??"";return e?.assumeHttp!==!1&&Pk.includes(o.code)&&(i=i.replace(/^.*:\/\//,""),o.value==="443"?i=`https://${i}`:i=`http://${i}`),(i.startsWith("http://")||i.startsWith("https://")||i.startsWith("ws://")||i.startsWith("wss://"))&&(i=new URL(i).toString(),i.endsWith("/")&&(i=i.substring(0,i.length-1))),i}var _e=r=>({match:e=>{let t=e[0];return t==null||t.code!==r||t.value!=null?!1:e.slice(1)}}),se=(r,e)=>({match:t=>{let n=t[0];return n?.code!==r||n.value==null||e!=null&&n.value!==e?!1:t.slice(1)}}),P9=r=>({match:e=>r.match(e)===!1?e:!1}),ge=r=>({match:e=>{let t=r.match(e);return t===!1?e:t}}),Ft=(...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}}),ve=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e}});function Ce(...r){function e(o){if(o==null)return!1;let s=o.getComponents();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{matchers:r,matches:t,exactMatch:n}}var Rk=se(421),R9=Ce(Rk),zf=se(54),Gf=se(55),Yf=se(56),s3=se(53),pX=Ce(zf,ge(se(421))),mX=Ce(Gf,ge(se(421))),gX=Ce(Yf,ge(se(421))),jf=Ce(Ft(s3,Yf,zf,Gf),ge(se(421))),L9=ve(se(4),ge(se(43))),D9=ve(ge(se(42)),se(41),ge(se(43))),i3=Ft(L9,D9),js=Ft(i3,s3,zf,Gf,Yf),N9=Ce(Ft(i3,ve(Ft(s3,Yf,zf,Gf),ge(se(421))))),a3=Ce(L9),c3=Ce(D9),O9=Ce(i3),l3=ve(js,se(6)),ml=ve(js,se(273)),Xs=Ce(ve(l3,ge(se(421)))),yX=Ce(ml),u3=ve(ml,_e(460),ge(se(421))),Xf=ve(ml,_e(461),ge(se(421))),Lk=Ft(u3,Xf),wX=Ce(u3),M9=Ce(Xf),o3=Ft(js,l3,ml,u3,Xf),B9=Ft(ve(o3,_e(477),ge(se(421)))),ro=Ce(B9),U9=Ft(ve(o3,_e(478),ge(se(421))),ve(o3,_e(448),ge(se(449)),_e(477),ge(se(421)))),Qs=Ce(U9),F9=ve(ml,_e(280),ge(se(466)),ge(se(466)),ge(se(421))),gl=Ce(F9),$9=ve(Xf,_e(465),ge(se(466)),ge(se(466)),ge(se(421))),d3=Ce($9),Wf=Ft(B9,U9,ve(l3,ge(se(421))),ve(Lk,ge(se(421))),ve(js,ge(se(421))),F9,$9,se(421)),pa=Ce(Wf),Dk=ve(ge(Wf),_e(290),P9(_e(281)),ge(se(421))),yt=Ce(Dk),Nk=Ft(ve(Wf,_e(290),_e(281),ge(se(421))),ve(Wf,_e(281),ge(se(421))),ve(_e(281),ge(se(421)))),yl=Ce(Nk),Ok=Ft(ve(js,se(6),_e(480),ge(se(421))),ve(js,_e(480),ge(se(421)))),K9=Ce(Ok),Mk=ve(js,Ft(ve(se(6,"443"),_e(480)),ve(se(6),_e(443)),ve(se(6),_e(448),_e(480)),ve(_e(448),_e(480)),_e(448),_e(443)),ge(se(421))),V9=Ce(Mk),Bk=Ft(ve(se(777),ge(se(421)))),bX=Ce(Bk),Uk=Ft(ve(se(400),ge(se(421)))),EX=Ce(Uk);function f3(r,e,t){return r.filter(n=>{if(V9.matches(n)||e&&K9.matches(n))return t||jf.matches(n)?!0:Qe(n)===!1;if(!e&&t){let{host:o}=oe(n);if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*Qf(r,e,t,n,o,s={}){for await(let i of e.findProviders(r,s)){let a=f3(i.multiaddrs,n,o);if(a.length===0)continue;let c=new URL(qo(a[0]));yield new ma(c,{logger:t,transformRequestInit:s.transformRequestInit,routing:i.routing})}}async function H9(r,e,t){let{signal:n,log:o}=t??{},s=r.headers.get("content-length");if(s!=null){let c=parseInt(s,10);if(c>e)throw o?.error("content-length header (%d) is greater than the limit (%d)",c,e),r.body!=null&&await r.body.cancel().catch(l=>{o?.error("error cancelling response body after content-length check - %e",l)}),new Error(`Content-Length header (${c}) is greater than the limit (${e}).`)}let i=r.body?.getReader();if(i==null)throw new Error("Response body is not readable");let a=new X;try{for(;;){if(n?.aborted===!0)throw new Error("Response body read was aborted.");let{done:c,value:l}=await i.read();if(c)break;if(a.append(l),a.byteLength>e)throw new Error(`Response body is greater than the limit (${e}), received ${a.byteLength} bytes.`)}}finally{i.cancel().catch(c=>{o?.error("error cancelling reader - %e",c)}).finally(()=>{i.releaseLock()})}return a.subarray()}var ma=class{url;#e=0;#t=0;#r=0;#a=0;#c=new Map;log;transformRequestInit;routing;constructor(e,{logger:t,transformRequestInit:n,routing:o}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.host}`),this.routing=o}#m(e){let t=e.multihash.bytes;return rt.encode(t)}async getRawBlock(e,{signal:t,maxSize:n=q9}={}){let o=new URL(this.url.toString());if(o.pathname=`/ipfs/${e.toString()}`,o.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 s=this.#m(e),i=new AbortController,a=()=>{i.abort()};t?.addEventListener("abort",a);try{let c=this.#c.get(s);if(c==null){this.#e++;let l={signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},d=this.transformRequestInit!=null?await this.transformRequestInit(l):l,u=new Headers(d.headers);this.log(`sending request
13
+ ${e}[Error list was empty]`,t.trim()}return Fb(r,e)}br.formatters.e=r=>r==null?"undefined":Vb(r);function CD(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 uc(r){return{forComponent(e){return rn(e,r)}}}function rn(r,e){let t=CD(`${r}:trace`);return br.enabled(`${r}:trace`)&&br.names.map(n=>n.toString()).find(n=>n.includes(":trace"))!=null&&(t=br(`${r}:trace`,e)),Object.assign(br(r,e),{error:br(`${r}:error`,e),trace:t,newScope:n=>rn(`${r}:${n}`,e)})}function $b(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var Kb=Symbol.for("sindresorhus/unlimited-timeout#brand");function Hb(r,e,...t){if(typeof r!="function")throw new TypeError("Expected callback to be a function");e??=0,e=Number(e);let n=!1,o={[Kb]:!0,id:void 0,cleared:!1,ref(){return n=!1,o.id?.ref?.(),o},unref(){return n=!0,o.id?.unref?.(),o}};if(e===Number.POSITIVE_INFINITY||e>Number.MAX_SAFE_INTEGER)return o;(!Number.isFinite(e)||e<0)&&(e=0);let i=performance.now()+e,s=a=>{o.cleared||(a<=2147483647?(o.id=globalThis.setTimeout(()=>{o.cleared||r(...t)},a),n&&o.id?.unref?.()):(o.id=globalThis.setTimeout(()=>{let c=performance.now(),l=Math.max(0,i-c);s(l)},2147483647),n&&o.id?.unref?.()))};return s(e),o}function qb(r){!r||typeof r!="object"||!r[Kb]||(r.cleared=!0,r.id!==void 0&&(globalThis.clearTimeout(r.id),r.id=void 0))}var kD=new WeakMap;function RD({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(o.reason);let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(o.reason)},u=()=>{o&&o.removeEventListener("abort",l)},d=new Promise((f,h)=>{s=()=>{u(),f(n)},a=h,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),kD.set(d,()=>{c(i),i=null,s()}),d}}var PD=RD({setTimeout:Hb,clearTimeout:qb}),zb=PD;var Kt=class extends $t{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var Fh=class extends $t{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};var dc=class{memoryStorage;points;duration;blockDuration;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new _4}consume(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);if(s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s.consumedPoints>this.points)throw this.blockDuration>0&&s.consumedPoints<=this.points+t&&(s=this.memoryStorage.set(o,s.consumedPoints,this.blockDuration)),new th("Rate limit exceeded",s);return s}penalty(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}reward(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,-t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}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)}},_4=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let i=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||i>0?(o.value+=t,{remainingPoints:0,msBeforeNext:i,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,i=this.storage.get(e);i!=null&&clearTimeout(i.timeoutId);let s={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,s),o>0&&(s.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),s.timeoutId.unref!=null&&s.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:s.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}};function fc(r,e,t){let n,o,i=!1;function s(){let l={signal:o.signal},u;t?.timeout!=null&&(u=we([o.signal,AbortSignal.timeout(t.timeout)]),l.signal=u),i=!0,Promise.resolve().then(async()=>{await r(l)}).catch(()=>{}).finally(()=>{u!=null&&(u.aborted?u.clear():u.addEventListener("abort",()=>{u.clear()},{once:!0})),i=!1,!o.signal.aborted&&(n=setTimeout(s,e))})}let a=Ro(s,t?.debounce??100),c=!1;return{setInterval:l=>{e!==l&&(e=l,n!=null&&(clearTimeout(n),n=setTimeout(s,e)))},setTimeout:l=>{t??={},t.timeout=l},run:()=>{i||(clearTimeout(n),a())},start:()=>{c||(c=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{s()}):n=setTimeout(s,e))},stop:()=>{clearTimeout(n),o?.abort(),c=!1}}}var I4=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 yt(r){let{name:e,metrics:t}=r,n;return t!=null?n=new I4({name:e,metrics:t}):n=new Map,n}var Uo="/",Wb=new TextEncoder().encode(Uo),$h=Wb[0],Ze=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=R(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]!==$h)throw new Error("Invalid key")}toString(e="utf8"){return N(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Uo))}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=Wb),this._buf[0]!==$h){let e=new Uint8Array(this._buf.byteLength+1);e.fill($h,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===$h;)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 i=t[o],s=n[o];if(i<s)return!0;if(i>s)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(Uo).slice(1)}type(){return LD(this.baseNamespace())}name(){return DD(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Uo)||(e+=Uo),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Uo):new r(e.slice(0,-1).join(Uo))}child(e){return this.toString()===Uo?e:e.toString()===Uo?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(),...ND(e.map(t=>t.namespaces()))])}};function LD(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function DD(r){let e=r.split(":");return e[e.length-1]}function ND(r){return[].concat(...r)}function OD(r){return r[Symbol.asyncIterator]!=null}function BD(r){if(OD(r))return(async()=>{let n=new Uint8Array(0);for await(let o of r)n=je([n,o],n.length+o.length);return n})();let e=[],t=0;for(let n of r)e.push(n),t+=n.byteLength;return je(e,t)}var Vh=BD;function Kh({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*MD(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=J.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*C4(n,o))}else{let t=J.asCID(e);t!=null?yield[r.join("/"),t]:yield*C4(e,r)}}function*C4(r,e){if(r==null||r instanceof Uint8Array)return;let t=J.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*MD(i,o)}}function*UD(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&J.asCID(n)==null&&(yield*k4(n,o))}else yield*k4(e,r)}function*k4(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"&&J.asCID(n)==null&&(yield*UD(o,n))}}function FD(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(s=>`[${JSON.stringify(s)}]`).join("")}`);let i=J.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var R4=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:Kh(),bytes:Kh(),value:Kh(),asBlock:Kh()})}links(){return C4(this.value,[])}tree(){return k4(this.value,[])}get(e="/"){return FD(this.value,e.split("/").filter(Boolean))}};function Gb({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 R4({cid:e,bytes:r,value:o})}var Hh=class extends Error{static name="AlreadyPinnedError";name="AlreadyPinnedError"},hu=class extends Error{static name="BlockPinnedError";name="BlockPinnedError"},qh=class extends Error{static name="InvalidDatastoreVersionError";name="InvalidDatastoreVersionError"},Vs=class extends Error{static name="InvalidConfigurationError";name="InvalidConfigurationError"},zh=class extends AggregateError{static name="GetFailedError";name="GetFailedError"},Wh=class extends AggregateError{static name="LoadBlockFailedError";name="LoadBlockFailedError"},pu=class extends Error{static name="BlockNotFoundWhileOfflineError";name="BlockNotFoundWhileOfflineError"};var Xb="/pin/",Yb="/pinned-block/",P4=Qr,jb=1;function Gh(r){return r.version===0&&(r=r.toV1()),new Ze(`${Xb}${r.toString(P4)}`)}var Yh=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=Gh(e);if(await this.datastore.has(n))throw new Hh("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new _("Depth must be greater than or equal to 0");let i=new $t({concurrency:jb});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>se(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,ac(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),i=await Vh(this.blockstore.get(e,n)),s=Gb({bytes:i,cid:e,codec:o});yield e;for(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Ze(`${Yb}${P4.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=Bo(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(i)){if(i.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,ac(i),n),n.onProgress?.(new K("helia:pin:add",e))}}async*rm(e,t={}){let n=Gh(e),o=await this.datastore.get(n,t),i=Bo(o);await this.datastore.delete(n,t);let s=new $t({concurrency:jb});for await(let a of this.#e(e,s,{...t,depth:i.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>se(l,e.bytes)),!0),{...t,depth:i.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:Xb+(e.cid!=null?`${e.cid.toString(Qr)}`:"")},e)){let o=J.parse(t.toString().substring(5),Qr),i=Bo(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new Ze(`${Yb}${P4.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=Gh(e),o=await this.datastore.get(n,t);return Bo(o)}async setMetadata(e,t,n){let o=Gh(e),i=await this.datastore.get(o,n),s=Bo(i);s.metadata=t??{},await this.datastore.put(o,ac(s),n)}};var L4=1,D4=5,N4=100;var mu=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Ci=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},gu=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},yu=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}},O4=class extends Error{static name="InvalidCodecError";constructor(e="Invalid codec"){super(e),this.name="InvalidCodecError"}};var $D=5,jh=class{name;log;routers;providerLookupConcurrency;constructor(e,t){this.name="helia",this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??$D,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await xt(...this.routers)}async stop(){await St(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Ci("No content routers available");let n=new Kt({concurrency:this.providerLookupConcurrency}),o=0,i=[],s=this,a=0;this.log("findProviders for %c start using routers %s",e,this.routers.map(l=>l.toString()).join(", "));let c=Ks(this.routers,"findProviders").map(async function*(l){let u=0;t?.onProgress?.(new K("helia:routing:find-providers:start",{routing:l.name,cid:e}));try{for await(let d of l.findProviders(e,t))u++,t?.onProgress?.(new K("helia:routing:find-providers:provider",{routing:l.name,cid:e,provider:d})),yield d}catch(d){i.push(d)}finally{s.log("router %s found %d providers for %c",l,u,e),t?.onProgress?.(new K("helia:routing:find-providers:end",{routing:l.name,cid:e,found:u})),a++,a===c.length&&n.size===0&&n.emitIdle()}});for await(let l of fr(n.toGenerator(),...c))if(l!=null){if(l.multiaddrs.length===0){if(n.find(l.id)!=null)continue;n.add(async()=>{try{let u=await this.findPeer(l.id,t);return u.multiaddrs.length===0?null:{...u,protocols:l.protocols,routing:l.routing}}catch(u){return this.log.error("could not load multiaddrs for peer %p - %e",l.id,u),null}},{peerId:l.id,signal:t.signal}).catch(u=>{this.log.error("could not load multiaddrs for peer %p - %e",l.id,u)});continue}o++,yield l}this.log("findProviders finished, found %d providers for %c",o,e)}async provide(e,t={}){if(this.routers.length===0)throw new Ci("No content routers available");await Promise.all(Ks(this.routers,"provide").map(async n=>{t?.onProgress?.(new K("helia:routing:provide:start",{routing:n.name,cid:e})),await n.provide(e,t),t?.onProgress?.(new K("helia:routing:provide:end",{routing:n.name,cid:e}))}))}async cancelReprovide(e,t={}){await Promise.all(Ks(this.routers,"cancelReprovide").map(async n=>{t?.onProgress?.(new K("helia:routing:cancel-reprovide:start",{routing:n.name,cid:e})),await n.cancelReprovide(e,t),t?.onProgress?.(new K("helia:routing:cancel-reprovide:end",{routing:n.name,cid:e}))}))}async put(e,t,n){await Promise.all(Ks(this.routers,"put").map(async o=>{n?.onProgress?.(new K("helia:routing:put:start",{routing:o.name,key:e,value:t})),await o.put(e,t,n),n?.onProgress?.(new K("helia:routing:put:end",{routing:o.name,key:e,value:t}))}))}async get(e,t){let n=[],o;try{o=await Promise.any(Ks(this.routers,"get").map(async i=>{t?.onProgress?.(new K("helia:routing:get:start",{routing:i.name,key:e}));try{return await i.get(e,t)}catch(s){this.log("router %s failed with %e",i,s),n.push(s)}finally{t?.onProgress?.(new K("helia:routing:get:end",{routing:i.name,key:e}))}}))}catch{}if(o==null)throw new zh(n,`Failed to get value key ${N(e,"base58btc")}`);return o}async findPeer(e,t){if(this.routers.length===0)throw new Ci("No peer routers available");let n=this,o=fr(...Ks(this.routers,"findPeer").map(i=>(async function*(){t?.onProgress?.(new K("helia:routing:find-peer:start",{routing:i.name,peerId:e}));try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}finally{t?.onProgress?.(new K("helia:routing:find-peer:end",{routing:i.name,peerId:e}))}})()));for await(let i of o)if(i!=null)return i;throw new We("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Ci("No peer routers available");for await(let n of fr(...Ks(this.routers,"getClosestPeers").map(async function*(o){t?.onProgress?.(new K("helia:routing:get-closest-peers:start",{routing:o.name,key:e}));try{yield*o.getClosestPeers(e,t)}finally{t?.onProgress?.(new K("helia:routing:get-closest-peers:end",{routing:o.name,key:e}))}})))n!=null&&(yield n)}};function Ks(r,e){return r.filter(t=>t[e]!=null)}var Br=class extends Error{static name="AbortError";name="AbortError";constructor(e="The operation was aborted",...t){super(e,...t)}};async function hr(r,e,t,n){let o=new Br(n?.errorMessage);n?.errorCode!=null&&(o.code=n.errorCode);let i=n?.errorEvent??"error";return t?.aborted===!0?Promise.reject(o):new Promise((s,a)=>{function c(){M4(t,"abort",d),M4(r,e,l),M4(r,i,u)}let l=f=>{try{if(n?.filter?.(f)===!1)return}catch(h){c(),a(h);return}c(),s(f)},u=f=>{if(c(),f instanceof Error){a(f);return}a(f.detail??n?.error??new Error(`The "${n?.errorEvent}" event was emitted but the event had no '.detail' field. Pass an 'error' option to race-event to change this message.`))},d=()=>{c(),a(o)};B4(t,"abort",d),B4(r,e,l),B4(r,i,u)})}function B4(r,e,t){r!=null&&(Qb(r)?r.addEventListener(e,t):r.addListener(e,t))}function M4(r,e,t){r!=null&&(Qb(r)?r.removeEventListener(e,t):r.removeListener(e,t))}function Qb(r){return typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"}var Xh=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var Qh=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Promise.withResolvers(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Br)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function VD(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Zh=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=VD(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,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 Br),this.cleanup())}async join(e={}){let t=new Qh(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 qe(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)})}};function U4(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var wu=class extends ue{concurrency;maxSize;queue;pending;sort;autoStart;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.autoStart=e.autoStart??!0,this.sort=e.sort,this.queue=[],this.emitEmpty=U4(this.emitEmpty.bind(this),1),this.emitIdle=U4(this.emitIdle.bind(this),1)}[Symbol.asyncIterator](){return this.toGenerator()}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}tryToStartAnother(){if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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.safeDispatchEvent("next"),this.autoStart&&this.tryToStartAnother()}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}start(){this.autoStart===!1&&(this.autoStart=!0,this.tryToStartAnother())}pause(){this.autoStart=!1}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new Xh;let n=new Zh(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.autoStart&&this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw 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 Br)}),this.clear()}async onEmpty(e){this.size!==0&&await hr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await hr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await hr(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=Ft({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail.result)},i=c=>{n(c.detail.error)},s=()=>{n()},a=()=>{n(new Br("Queue aborted"))};this.addEventListener("success",o),this.addEventListener("failure",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("success",o),this.removeEventListener("failure",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var Jh="lock:worker:request-read",e1="lock:worker:abort-read-request",t1="lock:worker:release-read",r1="lock:master:grant-read",n1="lock:master:error-read",o1="lock:worker:request-write",i1="lock:worker:abort-write-request",s1="lock:worker:release-write",a1="lock:master:grant-write",c1="lock:master:error-write",l1="lock:worker:finalize",u1="mortice",Zb={singleProcess:!1};var F4=(r,e,t,n,o,i,s,a,c)=>l=>{if(l.data==null)return;let u={type:l.data.type,name:l.data.name,identifier:l.data.identifier};u.type===o&&r.safeDispatchEvent(t,{detail:{name:u.name,identifier:u.identifier,handler:async()=>{e.postMessage({type:c,name:u.name,identifier:u.identifier}),await new Promise(d=>{let f=h=>{if(h?.data==null)return;let p={type:h.data.type,name:h.data.name,identifier:h.data.identifier};p.type===a&&p.identifier===u.identifier&&(e.removeEventListener("message",f),d())};e.addEventListener("message",f)})},onError:d=>{e.postMessage({type:s,name:u.name,identifier:u.identifier,error:{message:d.message,name:d.name,stack:d.stack}})}}}),u.type===i&&r.safeDispatchEvent(n,{detail:{name:u.name,identifier:u.identifier}}),u.type===l1&&r.safeDispatchEvent("finalizeRequest",{detail:{name:u.name}})};var Jb=(r=10)=>Math.random().toString().substring(2,r+2);var d1=class{name;channel;constructor(e){this.name=e,this.channel=new BroadcastChannel(u1)}readLock(e){return this.sendRequest(Jh,e1,r1,n1,t1,e)}writeLock(e){return this.sendRequest(o1,i1,a1,c1,s1,e)}finalize(){this.channel.postMessage({type:l1,name:this.name}),this.channel.close()}async sendRequest(e,t,n,o,i,s){s?.signal?.throwIfAborted();let a=Jb();return this.channel.postMessage({type:e,identifier:a,name:this.name}),new Promise((c,l)=>{let u=()=>{this.channel.postMessage({type:t,identifier:a,name:this.name})};s?.signal?.addEventListener("abort",u,{once:!0});let d=f=>{if(f.data?.identifier===a&&(f.data?.type===n&&(this.channel.removeEventListener("message",d),s?.signal?.removeEventListener("abort",u),c(()=>{this.channel.postMessage({type:i,identifier:a,name:this.name})})),f.data.type===o)){this.channel.removeEventListener("message",d),s?.signal?.removeEventListener("abort",u);let h=new Error;f.data.error!=null&&(h.message=f.data.error.message,h.name=f.data.error.name,h.stack=f.data.error.stack),l(h)}};this.channel.addEventListener("message",d)})}};var ex=r=>{if(r=Object.assign({},Zb,r),!!globalThis.document||r.singleProcess){let t=new BroadcastChannel(u1),n=new ue;return t.addEventListener("message",F4(n,t,"requestReadLock","abortReadLockRequest",Jh,e1,n1,t1,r1)),t.addEventListener("message",F4(n,t,"requestWriteLock","abortWriteLockRequest",o1,i1,c1,s1,a1)),n}return new d1(r.name)};var Hs=new Map,bu;function tx(r){return typeof r?.readLock=="function"&&typeof r?.writeLock=="function"}function KD(r){if(bu==null&&(bu=ex(r),!tx(bu))){let e=bu;e.addEventListener("requestReadLock",t=>{let n=t.detail.name,o=t.detail.identifier,i=Hs.get(n);if(i==null)return;let s=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||s.abort()};e.addEventListener("abortReadLockRequest",a),i.readLock({signal:s.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortReadLockRequest",a)})}),e.addEventListener("requestWriteLock",t=>{let n=t.detail.name,o=t.detail.identifier,i=Hs.get(n);if(i==null)return;let s=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||s.abort()};e.addEventListener("abortWriteLockRequest",a),i.writeLock({signal:s.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortWriteLockRequest",a)})}),e.addEventListener("finalizeRequest",t=>{let n=t.detail.name,o=Hs.get(n);o?.finalize()})}return bu}async function $4(r,e){let t,n,o=new Promise((s,a)=>{t=s,n=a}),i=()=>{n(new Br)};return e?.signal?.addEventListener("abort",i,{once:!0}),r.add(async()=>{await new Promise(s=>{t(()=>{e?.signal?.removeEventListener("abort",i),s()})})},{signal:e?.signal}).catch(s=>{n(s)}),o}var rx=(r,e)=>{let t=Hs.get(r);if(t!=null)return t;let n=KD(e);if(tx(n))return t=n,Hs.set(r,t),t;let o=new wu({concurrency:1}),i;return t={async readLock(s){if(i!=null)return $4(i,s);i=new wu({concurrency:e.concurrency,autoStart:!1});let a=i,c=$4(i,s);return o.add(async()=>{a.start(),await a.onIdle().then(()=>{i===a&&(i=null)})}),c},async writeLock(s){return i=null,$4(o,s)},finalize:()=>{Hs.delete(r)},queue:o},Hs.set(r,t),e.autoFinalize===!0&&o.addEventListener("idle",()=>{t.finalize()},{once:!0}),t};var HD={name:"lock",concurrency:1/0,singleProcess:!1,autoFinalize:!1};function xu(r){let e=Object.assign({},HD,r);return rx(e.name,e)}var f1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=xu({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await xt(this.child),this.started=!0}async stop(){await St(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{yield*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 hu("Block was pinned - please unpin and try again");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 i of e){if(await o.pins.isPinned(i))throw new hu("Block was pinned - please unpin and try again");yield i}})(),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 V4=new Ze("/version"),nx=1;async function ox(r){if(!await r.has(V4)){await r.put(V4,R(`${nx}`));return}let e=await r.get(V4),t=N(e);if(parseInt(t,10)!==nx)throw new qh("Invalid datastore version, a datastore migration may be required")}var n6={};ht(n6,{code:()=>r6,decode:()=>BN,decodeOptions:()=>DN,encode:()=>ON,encodeOptions:()=>PN,name:()=>NN,toByteView:()=>dE});var qD=["Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function K4(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(e==="string"||e==="number"||e==="bigint"||e==="symbol")return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(r instanceof Uint8Array)return"Uint8Array";if(r.constructor===Object)return"Object";let t=zD(r);return t||"Object"}function zD(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(qD.includes(e))return e}var I=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}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};I.uint=new I(0,"uint",!0);I.negint=new I(1,"negint",!0);I.bytes=new I(2,"bytes",!0);I.string=new I(3,"string",!0);I.array=new I(4,"array",!1);I.map=new I(5,"map",!1);I.tag=new I(6,"tag",!1);I.float=new I(7,"float",!0);I.false=new I(7,"false",!0);I.true=new I(7,"true",!0);I.null=new I(7,"null",!0);I.undefined=new I(7,"undefined",!0);I.break=new I(7,"break",!0);var X=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 Eu=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",WD=new TextEncoder;function h1(r){return Eu&&globalThis.Buffer.isBuffer(r)}function vu(r){return r instanceof Uint8Array?h1(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var GD=24,YD=200,p1=Eu?r=>r.length>=GD?globalThis.Buffer.from(r):ix(r):r=>r.length>=YD?WD.encode(r):ix(r),ro=r=>Uint8Array.from(r),sx=Eu?(r,e,t)=>h1(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),ax=Eu?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),vu(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},cx=Eu?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function m1(r,e){if(h1(r)&&h1(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 ix(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):(o>=55296&&o<=57343&&(o=65533),e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}var jD=256,Su=class{constructor(e=jD){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=cx(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=sx(n,0,this.cursor)}else t=ax(this.chunks,this.cursor);return e&&this.reset(),t}},g1=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw new Error("write out of bounds, destination buffer is too small");this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};var ae="CBOR decode error:",y1="CBOR encode error:",Au=[];Au[23]=1;Au[24]=2;Au[25]=3;Au[26]=5;Au[27]=9;function Fo(r,e,t){if(r.length-e<t)throw new Error(`${ae} not enough data for type`)}var Pt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Mr(r,e,t){Fo(r,e,1);let n=r[e];if(t.strict===!0&&n<Pt[0])throw new Error(`${ae} integer encoded in more bytes than necessary (strict decode)`);return n}function Ur(r,e,t){Fo(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<Pt[1])throw new Error(`${ae} integer encoded in more bytes than necessary (strict decode)`);return n}function Fr(r,e,t){Fo(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<Pt[2])throw new Error(`${ae} integer encoded in more bytes than necessary (strict decode)`);return n}function $r(r,e,t){Fo(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],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<Pt[3])throw new Error(`${ae} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${ae} integers outside of the safe integer range are not supported`)}function lx(r,e,t,n){return new X(I.uint,Mr(r,e+1,n),2)}function ux(r,e,t,n){return new X(I.uint,Ur(r,e+1,n),3)}function dx(r,e,t,n){return new X(I.uint,Fr(r,e+1,n),5)}function fx(r,e,t,n){return new X(I.uint,$r(r,e+1,n),9)}function nn(r,e){return tt(r,0,e.value)}function tt(r,e,t){if(t<Pt[0]){let n=Number(t);r.push([e|n])}else if(t<Pt[1]){let n=Number(t);r.push([e|24,n])}else if(t<Pt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<Pt[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<Pt[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${ae} encountered BigInt larger than allowable range`)}}nn.encodedSize=function(e){return tt.encodedSize(e.value)};tt.encodedSize=function(e){return e<Pt[0]?1:e<Pt[1]?2:e<Pt[2]?3:e<Pt[3]?5:9};nn.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function hx(r,e,t,n){return new X(I.negint,-1-Mr(r,e+1,n),2)}function px(r,e,t,n){return new X(I.negint,-1-Ur(r,e+1,n),3)}function mx(r,e,t,n){return new X(I.negint,-1-Fr(r,e+1,n),5)}var H4=BigInt(-1),gx=BigInt(1);function yx(r,e,t,n){let o=$r(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new X(I.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${ae} integers outside of the safe integer range are not supported`);return new X(I.negint,H4-BigInt(o),9)}function w1(r,e){let t=e.value,n=typeof t=="bigint"?t*H4-gx:t*-1-1;tt(r,e.type.majorEncoded,n)}w1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*H4-gx:t*-1-1;return n<Pt[0]?1:n<Pt[1]?2:n<Pt[2]?3:n<Pt[3]?5:9};w1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Tu(r,e,t,n){Fo(r,e,t+n);let o=r.slice(e+t,e+t+n);return new X(I.bytes,o,t+n)}function wx(r,e,t,n){return Tu(r,e,1,t)}function bx(r,e,t,n){return Tu(r,e,2,Mr(r,e+1,n))}function xx(r,e,t,n){return Tu(r,e,3,Ur(r,e+1,n))}function Ex(r,e,t,n){return Tu(r,e,5,Fr(r,e+1,n))}function vx(r,e,t,n){let o=$r(r,e+1,n);if(typeof o=="bigint")throw new Error(`${ae} 64-bit integer bytes lengths not supported`);return Tu(r,e,9,o)}function b1(r){return r.encodedBytes===void 0&&(r.encodedBytes=I.equals(r.type,I.string)?p1(r.value):r.value),r.encodedBytes}function hc(r,e){let t=b1(e);tt(r,e.type.majorEncoded,t.length),r.push(t)}hc.encodedSize=function(e){let t=b1(e);return tt.encodedSize(t.length)+t.length};hc.compareTokens=function(e,t){return QD(b1(e),b1(t))};function QD(r,e){return r.length<e.length?-1:r.length>e.length?1:m1(r,e)}var Sx=new TextDecoder,JD=32;function eN(r,e,t){if(t-e<JD){let o="";for(let i=e;i<t;i++){let s=r[i];if(s&128)return Sx.decode(r.subarray(e,t));o+=String.fromCharCode(s)}return o}return Sx.decode(r.subarray(e,t))}function _u(r,e,t,n,o){let i=t+n;Fo(r,e,i);let s=new X(I.string,eN(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=r.slice(e+t,e+i)),s}function Ax(r,e,t,n){return _u(r,e,1,t,n)}function Tx(r,e,t,n){return _u(r,e,2,Mr(r,e+1,n),n)}function _x(r,e,t,n){return _u(r,e,3,Ur(r,e+1,n),n)}function Ix(r,e,t,n){return _u(r,e,5,Fr(r,e+1,n),n)}function Cx(r,e,t,n){let o=$r(r,e+1,n);if(typeof o=="bigint")throw new Error(`${ae} 64-bit integer string lengths not supported`);return _u(r,e,9,o,n)}var kx=hc;function pc(r,e,t,n){return new X(I.array,n,t)}function Rx(r,e,t,n){return pc(r,e,1,t)}function Px(r,e,t,n){return pc(r,e,2,Mr(r,e+1,n))}function Lx(r,e,t,n){return pc(r,e,3,Ur(r,e+1,n))}function Dx(r,e,t,n){return pc(r,e,5,Fr(r,e+1,n))}function Nx(r,e,t,n){let o=$r(r,e+1,n);if(typeof o=="bigint")throw new Error(`${ae} 64-bit integer array lengths not supported`);return pc(r,e,9,o)}function Ox(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${ae} indefinite length items not allowed`);return pc(r,e,1,1/0)}function x1(r,e){tt(r,I.array.majorEncoded,e.value)}x1.compareTokens=nn.compareTokens;x1.encodedSize=function(e){return tt.encodedSize(e.value)};function mc(r,e,t,n){return new X(I.map,n,t)}function Bx(r,e,t,n){return mc(r,e,1,t)}function Mx(r,e,t,n){return mc(r,e,2,Mr(r,e+1,n))}function Ux(r,e,t,n){return mc(r,e,3,Ur(r,e+1,n))}function Fx(r,e,t,n){return mc(r,e,5,Fr(r,e+1,n))}function $x(r,e,t,n){let o=$r(r,e+1,n);if(typeof o=="bigint")throw new Error(`${ae} 64-bit integer map lengths not supported`);return mc(r,e,9,o)}function Vx(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${ae} indefinite length items not allowed`);return mc(r,e,1,1/0)}function E1(r,e){tt(r,I.map.majorEncoded,e.value)}E1.compareTokens=nn.compareTokens;E1.encodedSize=function(e){return tt.encodedSize(e.value)};function Kx(r,e,t,n){return new X(I.tag,t,1)}function Hx(r,e,t,n){return new X(I.tag,Mr(r,e+1,n),2)}function qx(r,e,t,n){return new X(I.tag,Ur(r,e+1,n),3)}function zx(r,e,t,n){return new X(I.tag,Fr(r,e+1,n),5)}function Wx(r,e,t,n){return new X(I.tag,$r(r,e+1,n),9)}function v1(r,e){tt(r,I.tag.majorEncoded,e.value)}v1.compareTokens=nn.compareTokens;v1.encodedSize=function(e){return tt.encodedSize(e.value)};var q4=20,z4=21,W4=22,G4=23;function Gx(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${ae} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new X(I.null,null,1):new X(I.undefined,void 0,1)}function Yx(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${ae} indefinite length items not allowed`);return new X(I.break,void 0,1)}function Y4(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${ae} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${ae} Infinity values are not supported`)}return new X(I.float,r,e)}function jx(r,e,t,n){return Y4(j4(r,e+1),3,n)}function Xx(r,e,t,n){return Y4(X4(r,e+1),5,n)}function Qx(r,e,t,n){return Y4(tE(r,e+1),9,n)}function Iu(r,e,t){let n=e.value;if(n===!1)r.push([I.float.majorEncoded|q4]);else if(n===!0)r.push([I.float.majorEncoded|z4]);else if(n===null)r.push([I.float.majorEncoded|W4]);else if(n===void 0)r.push([I.float.majorEncoded|G4]);else{let o,i=!1;(!t||t.float64!==!0)&&(Jx(n),o=j4(In,1),n===o||Number.isNaN(n)?(In[0]=249,r.push(In.slice(0,3)),i=!0):(eE(n),o=X4(In,1),n===o&&(In[0]=250,r.push(In.slice(0,5)),i=!0))),i||(iN(n),o=tE(In,1),In[0]=251,r.push(In.slice(0,9)))}}Iu.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){Jx(n);let o=j4(In,1);if(n===o||Number.isNaN(n))return 3;if(eE(n),o=X4(In,1),n===o)return 5}return 9};var Zx=new ArrayBuffer(9),on=new DataView(Zx,1),In=new Uint8Array(Zx,0);function Jx(r){if(r===1/0)on.setUint16(0,31744,!1);else if(r===-1/0)on.setUint16(0,64512,!1);else if(Number.isNaN(r))on.setUint16(0,32256,!1);else{on.setFloat32(0,r);let e=on.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)on.setUint16(0,31744,!1);else if(t===0)on.setUint16(0,(e&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?on.setUint16(0,0):o<-14?on.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):on.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function j4(r,e){if(r.length-e<2)throw new Error(`${ae} 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,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function eE(r){on.setFloat32(0,r,!1)}function X4(r,e){if(r.length-e<4)throw new Error(`${ae} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function iN(r){on.setFloat64(0,r,!1)}function tE(r,e){if(r.length-e<8)throw new Error(`${ae} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}Iu.compareTokens=nn.compareTokens;function Ne(r,e,t){throw new Error(`${ae} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function S1(r){return()=>{throw new Error(`${ae} ${r}`)}}var W=[];for(let r=0;r<=23;r++)W[r]=Ne;W[24]=lx;W[25]=ux;W[26]=dx;W[27]=fx;W[28]=Ne;W[29]=Ne;W[30]=Ne;W[31]=Ne;for(let r=32;r<=55;r++)W[r]=Ne;W[56]=hx;W[57]=px;W[58]=mx;W[59]=yx;W[60]=Ne;W[61]=Ne;W[62]=Ne;W[63]=Ne;for(let r=64;r<=87;r++)W[r]=wx;W[88]=bx;W[89]=xx;W[90]=Ex;W[91]=vx;W[92]=Ne;W[93]=Ne;W[94]=Ne;W[95]=S1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)W[r]=Ax;W[120]=Tx;W[121]=_x;W[122]=Ix;W[123]=Cx;W[124]=Ne;W[125]=Ne;W[126]=Ne;W[127]=S1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)W[r]=Rx;W[152]=Px;W[153]=Lx;W[154]=Dx;W[155]=Nx;W[156]=Ne;W[157]=Ne;W[158]=Ne;W[159]=Ox;for(let r=160;r<=183;r++)W[r]=Bx;W[184]=Mx;W[185]=Ux;W[186]=Fx;W[187]=$x;W[188]=Ne;W[189]=Ne;W[190]=Ne;W[191]=Vx;for(let r=192;r<=215;r++)W[r]=Kx;W[216]=Hx;W[217]=qx;W[218]=zx;W[219]=Wx;W[220]=Ne;W[221]=Ne;W[222]=Ne;W[223]=Ne;for(let r=224;r<=243;r++)W[r]=S1("simple values are not supported");W[244]=Ne;W[245]=Ne;W[246]=Ne;W[247]=Gx;W[248]=S1("simple values are not supported");W[249]=jx;W[250]=Xx;W[251]=Qx;W[252]=Ne;W[253]=Ne;W[254]=Ne;W[255]=Yx;var Cn=[];for(let r=0;r<24;r++)Cn[r]=new X(I.uint,r,1);for(let r=-1;r>=-24;r--)Cn[31-r]=new X(I.negint,r,1);Cn[64]=new X(I.bytes,new Uint8Array(0),1);Cn[96]=new X(I.string,"",1);Cn[128]=new X(I.array,0,1);Cn[160]=new X(I.map,0,1);Cn[244]=new X(I.false,!1,1);Cn[245]=new X(I.true,!0,1);Cn[246]=new X(I.null,null,1);function Q4(r){switch(r.type){case I.false:return ro([244]);case I.true:return ro([245]);case I.null:return ro([246]);case I.bytes:return r.value.length?void 0:ro([64]);case I.string:return r.value===""?ro([96]):void 0;case I.array:return r.value===0?ro([128]):void 0;case I.map:return r.value===0?ro([160]):void 0;case I.uint:return r.value<24?ro([Number(r.value)]):void 0;case I.negint:if(r.value>=-24)return ro([31-Number(r.value)])}}var aN={float64:!1,mapSorter:uN,quickEncodeToken:Q4},sE=Object.freeze({float64:!0,mapSorter:dN,quickEncodeToken:Q4});function cN(){let r=[];return r[I.uint.major]=nn,r[I.negint.major]=w1,r[I.bytes.major]=hc,r[I.string.major]=kx,r[I.array.major]=x1,r[I.map.major]=E1,r[I.tag.major]=v1,r[I.float.major]=Iu,r}var gc=cN(),A1=new Su,ku=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(`${y1} object contains circular references`);return new r(t,e)}},ki={null:new X(I.null,null),undefined:new X(I.undefined,void 0),true:new X(I.true,!0),false:new X(I.false,!1),emptyArray:new X(I.array,0),emptyMap:new X(I.map,0)},no={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new X(I.float,r):r>=0?new X(I.uint,r):new X(I.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new X(I.uint,r):new X(I.negint,r)},Uint8Array(r,e,t,n){return new X(I.bytes,r)},string(r,e,t,n){return new X(I.string,r)},boolean(r,e,t,n){return r?ki.true:ki.false},null(r,e,t,n){return ki.null},undefined(r,e,t,n){return ki.undefined},ArrayBuffer(r,e,t,n){return new X(I.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new X(I.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[ki.emptyArray,new X(I.break)]:ki.emptyArray;n=ku.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=T1(s,t,n);return t.addBreakTokens?[new X(I.array,r.length),o,new X(I.break)]:[new X(I.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length,a;if(s){a=new Array(s),n=ku.createCheck(n,r);let c=!o&&t.ignoreUndefinedProperties,l=0;for(let u of i){let d=o?r.get(u):r[u];c&&d===void 0||(a[l++]=[T1(u,t,n),T1(d,t,n)])}l<s&&(a.length=l)}return a?.length?(lN(a,t),t.addBreakTokens?[new X(I.map,a.length),a,new X(I.break)]:[new X(I.map,a.length),a]):t.addBreakTokens===!0?[ki.emptyMap,new X(I.break)]:ki.emptyMap}};no.Map=no.Object;no.Buffer=no.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))no[`${r}Array`]=no.DataView;function T1(r,e={},t){let n=K4(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||no[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=no[n];if(!i)throw new Error(`${y1} unsupported type: ${n}`);return i(r,n,e,t)}function lN(r,e){e.mapSorter&&r.sort(e.mapSorter)}function uN(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,i=gc[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function dN(r,e){if(r[0]instanceof X&&e[0]instanceof X){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=rE(t.value)),n._keyBytes||(n._keyBytes=rE(n.value)),m1(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function rE(r){return cE(r,gc,sE)}function Cu(r,e,t,n){if(Array.isArray(e))for(let o of e)Cu(r,o,t,n);else t[e.type.major](r,e,n)}var nE=I.uint.majorEncoded,oE=I.negint.majorEncoded,fN=I.bytes.majorEncoded,hN=I.string.majorEncoded,iE=I.array.majorEncoded,pN=I.float.majorEncoded|q4,mN=I.float.majorEncoded|z4,gN=I.float.majorEncoded|W4,yN=I.float.majorEncoded|G4,wN=BigInt(-1),bN=BigInt(1);function xN(r){return r.addBreakTokens!==!0}function aE(r,e,t,n){let o=K4(e),i=t.typeEncoders&&t.typeEncoders[o];if(i){let s=i(e,o,t,n);if(s!=null){Cu(r,s,gc,t);return}}switch(o){case"null":r.push([gN]);return;case"undefined":r.push([yN]);return;case"boolean":r.push([e?mN:pN]);return;case"number":!Number.isInteger(e)||!Number.isSafeInteger(e)?Iu(r,new X(I.float,e),t):e>=0?tt(r,nE,e):tt(r,oE,e*-1-1);return;case"bigint":e>=BigInt(0)?tt(r,nE,e):tt(r,oE,e*wN-bN);return;case"string":{let s=p1(e);tt(r,hN,s.length),r.push(s);return}case"Uint8Array":tt(r,fN,e.length),r.push(e);return;case"Array":if(!e.length){r.push([iE]);return}n=ku.createCheck(n,e),tt(r,iE,e.length);for(let s of e)aE(r,s,t,n);return;case"Object":case"Map":{let s=no.Object(e,o,t,n);Cu(r,s,gc,t)}return;default:{let s=no[o];if(!s)throw new Error(`${y1} unsupported type: ${o}`);let a=s(e,o,t,n);Cu(r,a,gc,t)}}}function cE(r,e,t,n){let o=n instanceof Uint8Array,i=o?new g1(n):A1,s=T1(r,t);if(!Array.isArray(s)&&t.quickEncodeToken){let a=t.quickEncodeToken(s);if(a)return o?(i.push(a),i.toBytes()):a;let c=e[s.type.major];if(c.encodedSize){let l=c.encodedSize(s,t);if(o||(i=new Su(l)),c(i,s,t),i.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${s} was wrong`);return o?i.toBytes():vu(i.chunks[0])}}return i.reset(),Cu(i,s,e,t),i.toBytes(!0)}function Z4(r,e){return e=Object.assign({},aN,e),xN(e)?(A1.reset(),aE(A1,r,e,void 0),A1.toBytes(!0)):cE(r,gc,e)}var EN={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},_1=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=Cn[e];if(t===void 0){let n=W[e];if(!n)throw new Error(`${ae} 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}},Ri=Symbol.for("DONE"),yc=Symbol.for("BREAK");function vN(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=Pi(e,t);if(i===yc){if(r.value===1/0)break;throw new Error(`${ae} got unexpected break to lengthed array`)}if(i===Ri)throw new Error(`${ae} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function SN(r,e,t){let n=t.useMaps===!0,o=t.rejectDuplicateMapKeys===!0,i=n?void 0:{},s=n?new Map:void 0;for(let a=0;a<r.value;a++){let c=Pi(e,t);if(c===yc){if(r.value===1/0)break;throw new Error(`${ae} got unexpected break to lengthed map`)}if(c===Ri)throw new Error(`${ae} found map but not enough entries (got ${a} [no key], expected ${r.value})`);if(!n&&typeof c!="string")throw new Error(`${ae} non-string keys not supported (got ${typeof c})`);if(o&&(n&&s.has(c)||!n&&Object.hasOwn(i,c)))throw new Error(`${ae} found repeat map key "${c}"`);let l=Pi(e,t);if(l===Ri)throw new Error(`${ae} found map but not enough entries (got ${a} [no value], expected ${r.value})`);n?s.set(c,l):i[c]=l}return n?s:i}function*AN(r,e,t){for(let n=0;n<r.value;n++){let o=Pi(e,t);if(o===yc){if(r.value===1/0)break;throw new Error(`${ae} got unexpected break to lengthed map`)}if(o===Ri)throw new Error(`${ae} found map but not enough entries (got ${n} [no key], expected ${r.value})`);let i=Pi(e,t);if(i===Ri)throw new Error(`${ae} found map but not enough entries (got ${n} [no value], expected ${r.value})`);yield[o,i]}}function TN(r,e){let t=!1,n=function(){if(t)throw new Error(`${ae} tag decode() may only be called once`);t=!0;let o=Pi(r,e);if(o===Ri)throw new Error(`${ae} tag content missing`);if(o===yc)throw new Error(`${ae} got unexpected break in tag content`);return o};return n.entries=function(){if(t)throw new Error(`${ae} tag decode() may only be called once`);t=!0;let o=r.next();if(!I.equals(o.type,I.map))throw new Error(`${ae} entries() requires map content, got ${o.type.name}`);let i=[];for(let s of AN(o,r,e))i.push(s);return i},Object.defineProperty(n,"_called",{get(){return t},enumerable:!1}),n}function Pi(r,e){if(r.done())return Ri;let t=r.next();if(I.equals(t.type,I.break))return yc;if(t.type.terminal)return t.value;if(I.equals(t.type,I.array))return vN(t,r,e);if(I.equals(t.type,I.map))return SN(t,r,e);if(I.equals(t.type,I.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=TN(r,e),o=e.tags[t.value](n);if(!n._called)throw new Error(`${ae} tag decoder must call decode() or entries()`);return o}throw new Error(`${ae} tag not supported (${t.value})`)}throw new Error("unsupported")}function lE(r,e){if(!(r instanceof Uint8Array))throw new Error(`${ae} data to decode must be a Uint8Array`);e=Object.assign({},EN,e);let t=vu(r),n=e.tokenizer||new _1(t,e),o=Pi(n,e);if(o===Ri)throw new Error(`${ae} did not find any content to decode`);if(o===yc)throw new Error(`${ae} got unexpected break`);return[o,r.subarray(n.pos())]}function J4(r,e){let[t,n]=lE(r,e);if(n.length>0)throw new Error(`${ae} too many terminals, data makes no sense`);return t}var uE=42;function dE(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function IN(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=J.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new X(I.tag,uE),new X(I.bytes,t)]}function CN(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function kN(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}function RN(r){for(let e of r.keys())if(typeof e!="string"||e.length===0)throw new Error("Non-string Map keys are not supported by the IPLD Data Model and cannot be encoded");return null}var e6={float64:!0,typeEncoders:{Map:RN,Object:IN,undefined:CN,number:kN}},PN={...e6,typeEncoders:{...e6.typeEncoders}};function LN(r){let e=r();if(e[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return J.decode(e.subarray(1))}var t6={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:{[uE]:LN}},DN={...t6,tags:{...t6.tags}},NN="dag-cbor",r6=113,ON=r=>Z4(r,e6),BN=r=>J4(dE(r),t6);var x6={};ht(x6,{code:()=>b6,decode:()=>wv,encode:()=>yv,format:()=>xO,name:()=>bO,parse:()=>vO,stringify:()=>xO});var MN=["Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function fE(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(e==="string"||e==="number"||e==="bigint"||e==="symbol")return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(r instanceof Uint8Array)return"Uint8Array";if(r.constructor===Object)return"Object";let t=UN(r);return t||"Object"}function UN(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(MN.includes(e))return e}var w=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}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};w.uint=new w(0,"uint",!0);w.negint=new w(1,"negint",!0);w.bytes=new w(2,"bytes",!0);w.string=new w(3,"string",!0);w.array=new w(4,"array",!1);w.map=new w(5,"map",!1);w.tag=new w(6,"tag",!1);w.float=new w(7,"float",!0);w.false=new w(7,"false",!0);w.true=new w(7,"true",!0);w.null=new w(7,"null",!0);w.undefined=new w(7,"undefined",!0);w.break=new w(7,"break",!0);var F=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var Ru=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",FN=new TextEncoder;function I1(r){return Ru&&globalThis.Buffer.isBuffer(r)}function zs(r){return r instanceof Uint8Array?I1(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var $N=24,VN=200,Pu=Ru?r=>r.length>=$N?globalThis.Buffer.from(r):hE(r):r=>r.length>=VN?FN.encode(r):hE(r),oo=r=>Uint8Array.from(r),mE=Ru?(r,e,t)=>I1(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),gE=Ru?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),zs(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},yE=Ru?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function C1(r,e){if(I1(r)&&I1(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 hE(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):(o>=55296&&o<=57343&&(o=65533),e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}var pE=4096;function wE(r){let e=r.length;if(e<=pE)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=pE));return t}var KN=256,Lu=class{constructor(e=KN){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=yE(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=mE(n,0,this.cursor)}else t=gE(this.chunks,this.cursor);return e&&this.reset(),t}},k1=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw new Error("write out of bounds, destination buffer is too small");this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};var Z="CBOR decode error:",$o="CBOR encode error:",Du=[];Du[23]=1;Du[24]=2;Du[25]=3;Du[26]=5;Du[27]=9;function Vo(r,e,t){if(r.length-e<t)throw new Error(`${Z} not enough data for type`)}var Lt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Vr(r,e,t){Vo(r,e,1);let n=r[e];if(t.strict===!0&&n<Lt[0])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function Kr(r,e,t){Vo(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<Lt[1])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function Hr(r,e,t){Vo(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<Lt[2])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function qr(r,e,t){Vo(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],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<Lt[3])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${Z} integers outside of the safe integer range are not supported`)}function bE(r,e,t,n){return new F(w.uint,Vr(r,e+1,n),2)}function xE(r,e,t,n){return new F(w.uint,Kr(r,e+1,n),3)}function EE(r,e,t,n){return new F(w.uint,Hr(r,e+1,n),5)}function vE(r,e,t,n){return new F(w.uint,qr(r,e+1,n),9)}function sn(r,e){return Dt(r,0,e.value)}function Dt(r,e,t){if(t<Lt[0]){let n=Number(t);r.push([e|n])}else if(t<Lt[1]){let n=Number(t);r.push([e|24,n])}else if(t<Lt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<Lt[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<Lt[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${Z} encountered BigInt larger than allowable range`)}}sn.encodedSize=function(e){return Dt.encodedSize(e.value)};Dt.encodedSize=function(e){return e<Lt[0]?1:e<Lt[1]?2:e<Lt[2]?3:e<Lt[3]?5:9};sn.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function SE(r,e,t,n){return new F(w.negint,-1-Vr(r,e+1,n),2)}function AE(r,e,t,n){return new F(w.negint,-1-Kr(r,e+1,n),3)}function TE(r,e,t,n){return new F(w.negint,-1-Hr(r,e+1,n),5)}var o6=BigInt(-1),_E=BigInt(1);function IE(r,e,t,n){let o=qr(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new F(w.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${Z} integers outside of the safe integer range are not supported`);return new F(w.negint,o6-BigInt(o),9)}function R1(r,e){let t=e.value,n=typeof t=="bigint"?t*o6-_E:t*-1-1;Dt(r,e.type.majorEncoded,n)}R1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*o6-_E:t*-1-1;return n<Lt[0]?1:n<Lt[1]?2:n<Lt[2]?3:n<Lt[3]?5:9};R1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Nu(r,e,t,n){Vo(r,e,t+n);let o=r.slice(e+t,e+t+n);return new F(w.bytes,o,t+n)}function CE(r,e,t,n){return Nu(r,e,1,t)}function kE(r,e,t,n){return Nu(r,e,2,Vr(r,e+1,n))}function RE(r,e,t,n){return Nu(r,e,3,Kr(r,e+1,n))}function PE(r,e,t,n){return Nu(r,e,5,Hr(r,e+1,n))}function LE(r,e,t,n){let o=qr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer bytes lengths not supported`);return Nu(r,e,9,o)}function P1(r){return r.encodedBytes===void 0&&(r.encodedBytes=w.equals(r.type,w.string)?Pu(r.value):r.value),r.encodedBytes}function wc(r,e){let t=P1(e);Dt(r,e.type.majorEncoded,t.length),r.push(t)}wc.encodedSize=function(e){let t=P1(e);return Dt.encodedSize(t.length)+t.length};wc.compareTokens=function(e,t){return qN(P1(e),P1(t))};function qN(r,e){return r.length<e.length?-1:r.length>e.length?1:C1(r,e)}var DE=new TextDecoder,WN=32;function GN(r,e,t){if(t-e<WN){let o="";for(let i=e;i<t;i++){let s=r[i];if(s&128)return DE.decode(r.subarray(e,t));o+=String.fromCharCode(s)}return o}return DE.decode(r.subarray(e,t))}function Ou(r,e,t,n,o){let i=t+n;Vo(r,e,i);let s=new F(w.string,GN(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=r.slice(e+t,e+i)),s}function NE(r,e,t,n){return Ou(r,e,1,t,n)}function OE(r,e,t,n){return Ou(r,e,2,Vr(r,e+1,n),n)}function BE(r,e,t,n){return Ou(r,e,3,Kr(r,e+1,n),n)}function ME(r,e,t,n){return Ou(r,e,5,Hr(r,e+1,n),n)}function UE(r,e,t,n){let o=qr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer string lengths not supported`);return Ou(r,e,9,o,n)}var FE=wc;function bc(r,e,t,n){return new F(w.array,n,t)}function $E(r,e,t,n){return bc(r,e,1,t)}function VE(r,e,t,n){return bc(r,e,2,Vr(r,e+1,n))}function KE(r,e,t,n){return bc(r,e,3,Kr(r,e+1,n))}function HE(r,e,t,n){return bc(r,e,5,Hr(r,e+1,n))}function qE(r,e,t,n){let o=qr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer array lengths not supported`);return bc(r,e,9,o)}function zE(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return bc(r,e,1,1/0)}function L1(r,e){Dt(r,w.array.majorEncoded,e.value)}L1.compareTokens=sn.compareTokens;L1.encodedSize=function(e){return Dt.encodedSize(e.value)};function xc(r,e,t,n){return new F(w.map,n,t)}function WE(r,e,t,n){return xc(r,e,1,t)}function GE(r,e,t,n){return xc(r,e,2,Vr(r,e+1,n))}function YE(r,e,t,n){return xc(r,e,3,Kr(r,e+1,n))}function jE(r,e,t,n){return xc(r,e,5,Hr(r,e+1,n))}function XE(r,e,t,n){let o=qr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer map lengths not supported`);return xc(r,e,9,o)}function QE(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return xc(r,e,1,1/0)}function D1(r,e){Dt(r,w.map.majorEncoded,e.value)}D1.compareTokens=sn.compareTokens;D1.encodedSize=function(e){return Dt.encodedSize(e.value)};function ZE(r,e,t,n){return new F(w.tag,t,1)}function JE(r,e,t,n){return new F(w.tag,Vr(r,e+1,n),2)}function ev(r,e,t,n){return new F(w.tag,Kr(r,e+1,n),3)}function tv(r,e,t,n){return new F(w.tag,Hr(r,e+1,n),5)}function rv(r,e,t,n){return new F(w.tag,qr(r,e+1,n),9)}function N1(r,e){Dt(r,w.tag.majorEncoded,e.value)}N1.compareTokens=sn.compareTokens;N1.encodedSize=function(e){return Dt.encodedSize(e.value)};var i6=20,s6=21,a6=22,c6=23;function nv(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Z} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new F(w.null,null,1):new F(w.undefined,void 0,1)}function ov(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return new F(w.break,void 0,1)}function l6(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Z} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Z} Infinity values are not supported`)}return new F(w.float,r,e)}function iv(r,e,t,n){return l6(u6(r,e+1),3,n)}function sv(r,e,t,n){return l6(d6(r,e+1),5,n)}function av(r,e,t,n){return l6(dv(r,e+1),9,n)}function O1(r,e,t){let n=e.value;if(n===!1)r.push([w.float.majorEncoded|i6]);else if(n===!0)r.push([w.float.majorEncoded|s6]);else if(n===null)r.push([w.float.majorEncoded|a6]);else if(n===void 0)r.push([w.float.majorEncoded|c6]);else{let o,i=!1;(!t||t.float64!==!0)&&(lv(n),o=u6(kn,1),n===o||Number.isNaN(n)?(kn[0]=249,r.push(kn.slice(0,3)),i=!0):(uv(n),o=d6(kn,1),n===o&&(kn[0]=250,r.push(kn.slice(0,5)),i=!0))),i||(ZN(n),o=dv(kn,1),kn[0]=251,r.push(kn.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){lv(n);let o=u6(kn,1);if(n===o||Number.isNaN(n))return 3;if(uv(n),o=d6(kn,1),n===o)return 5}return 9};var cv=new ArrayBuffer(9),an=new DataView(cv,1),kn=new Uint8Array(cv,0);function lv(r){if(r===1/0)an.setUint16(0,31744,!1);else if(r===-1/0)an.setUint16(0,64512,!1);else if(Number.isNaN(r))an.setUint16(0,32256,!1);else{an.setFloat32(0,r);let e=an.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)an.setUint16(0,31744,!1);else if(t===0)an.setUint16(0,(e&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?an.setUint16(0,0):o<-14?an.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):an.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function u6(r,e){if(r.length-e<2)throw new Error(`${Z} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function uv(r){an.setFloat32(0,r,!1)}function d6(r,e){if(r.length-e<4)throw new Error(`${Z} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function ZN(r){an.setFloat64(0,r,!1)}function dv(r,e){if(r.length-e<8)throw new Error(`${Z} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}O1.compareTokens=sn.compareTokens;function Oe(r,e,t){throw new Error(`${Z} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function B1(r){return()=>{throw new Error(`${Z} ${r}`)}}var G=[];for(let r=0;r<=23;r++)G[r]=Oe;G[24]=bE;G[25]=xE;G[26]=EE;G[27]=vE;G[28]=Oe;G[29]=Oe;G[30]=Oe;G[31]=Oe;for(let r=32;r<=55;r++)G[r]=Oe;G[56]=SE;G[57]=AE;G[58]=TE;G[59]=IE;G[60]=Oe;G[61]=Oe;G[62]=Oe;G[63]=Oe;for(let r=64;r<=87;r++)G[r]=CE;G[88]=kE;G[89]=RE;G[90]=PE;G[91]=LE;G[92]=Oe;G[93]=Oe;G[94]=Oe;G[95]=B1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)G[r]=NE;G[120]=OE;G[121]=BE;G[122]=ME;G[123]=UE;G[124]=Oe;G[125]=Oe;G[126]=Oe;G[127]=B1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)G[r]=$E;G[152]=VE;G[153]=KE;G[154]=HE;G[155]=qE;G[156]=Oe;G[157]=Oe;G[158]=Oe;G[159]=zE;for(let r=160;r<=183;r++)G[r]=WE;G[184]=GE;G[185]=YE;G[186]=jE;G[187]=XE;G[188]=Oe;G[189]=Oe;G[190]=Oe;G[191]=QE;for(let r=192;r<=215;r++)G[r]=ZE;G[216]=JE;G[217]=ev;G[218]=tv;G[219]=rv;G[220]=Oe;G[221]=Oe;G[222]=Oe;G[223]=Oe;for(let r=224;r<=243;r++)G[r]=B1("simple values are not supported");G[244]=Oe;G[245]=Oe;G[246]=Oe;G[247]=nv;G[248]=B1("simple values are not supported");G[249]=iv;G[250]=sv;G[251]=av;G[252]=Oe;G[253]=Oe;G[254]=Oe;G[255]=ov;var Rn=[];for(let r=0;r<24;r++)Rn[r]=new F(w.uint,r,1);for(let r=-1;r>=-24;r--)Rn[31-r]=new F(w.negint,r,1);Rn[64]=new F(w.bytes,new Uint8Array(0),1);Rn[96]=new F(w.string,"",1);Rn[128]=new F(w.array,0,1);Rn[160]=new F(w.map,0,1);Rn[244]=new F(w.false,!1,1);Rn[245]=new F(w.true,!0,1);Rn[246]=new F(w.null,null,1);function fv(r){switch(r.type){case w.false:return oo([244]);case w.true:return oo([245]);case w.null:return oo([246]);case w.bytes:return r.value.length?void 0:oo([64]);case w.string:return r.value===""?oo([96]):void 0;case w.array:return r.value===0?oo([128]):void 0;case w.map:return r.value===0?oo([160]):void 0;case w.uint:return r.value<24?oo([Number(r.value)]):void 0;case w.negint:if(r.value>=-24)return oo([31-Number(r.value)])}}var pv=Object.freeze({float64:!0,mapSorter:oO,quickEncodeToken:fv});function eO(){let r=[];return r[w.uint.major]=sn,r[w.negint.major]=R1,r[w.bytes.major]=wc,r[w.string.major]=FE,r[w.array.major]=L1,r[w.map.major]=D1,r[w.tag.major]=N1,r[w.float.major]=O1,r}var tO=eO(),rO=new Lu,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(`${$o} object contains circular references`);return new r(t,e)}},Li={null:new F(w.null,null),undefined:new F(w.undefined,void 0),true:new F(w.true,!0),false:new F(w.false,!1),emptyArray:new F(w.array,0),emptyMap:new F(w.map,0)},Di={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new F(w.float,r):r>=0?new F(w.uint,r):new F(w.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new F(w.uint,r):new F(w.negint,r)},Uint8Array(r,e,t,n){return new F(w.bytes,r)},string(r,e,t,n){return new F(w.string,r)},boolean(r,e,t,n){return r?Li.true:Li.false},null(r,e,t,n){return Li.null},undefined(r,e,t,n){return Li.undefined},ArrayBuffer(r,e,t,n){return new F(w.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new F(w.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Li.emptyArray,new F(w.break)]:Li.emptyArray;n=U1.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=M1(s,t,n);return t.addBreakTokens?[new F(w.array,r.length),o,new F(w.break)]:[new F(w.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length,a;if(s){a=new Array(s),n=U1.createCheck(n,r);let c=!o&&t.ignoreUndefinedProperties,l=0;for(let u of i){let d=o?r.get(u):r[u];c&&d===void 0||(a[l++]=[M1(u,t,n),M1(d,t,n)])}l<s&&(a.length=l)}return a?.length?(nO(a,t),t.addBreakTokens?[new F(w.map,a.length),a,new F(w.break)]:[new F(w.map,a.length),a]):t.addBreakTokens===!0?[Li.emptyMap,new F(w.break)]:Li.emptyMap}};Di.Map=Di.Object;Di.Buffer=Di.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Di[`${r}Array`]=Di.DataView;function M1(r,e={},t){let n=fE(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||Di[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=Di[n];if(!i)throw new Error(`${$o} unsupported type: ${n}`);return i(r,n,e,t)}function nO(r,e){e.mapSorter&&r.sort(e.mapSorter)}function oO(r,e){if(r[0]instanceof F&&e[0]instanceof F){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=hv(t.value)),n._keyBytes||(n._keyBytes=hv(n.value)),C1(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function hv(r){return f6(r,tO,pv)}function mv(r,e,t,n){if(Array.isArray(e))for(let o of e)mv(r,o,t,n);else t[e.type.major](r,e,n)}var dte=w.uint.majorEncoded,fte=w.negint.majorEncoded,hte=w.bytes.majorEncoded,pte=w.string.majorEncoded,mte=w.array.majorEncoded,gte=w.float.majorEncoded|i6,yte=w.float.majorEncoded|s6,wte=w.float.majorEncoded|a6,bte=w.float.majorEncoded|c6,xte=BigInt(-1),Ete=BigInt(1);function f6(r,e,t,n){let o=n instanceof Uint8Array,i=o?new k1(n):rO,s=M1(r,t);if(!Array.isArray(s)&&t.quickEncodeToken){let a=t.quickEncodeToken(s);if(a)return o?(i.push(a),i.toBytes()):a;let c=e[s.type.major];if(c.encodedSize){let l=c.encodedSize(s,t);if(o||(i=new Lu(l)),c(i,s,t),i.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${s} was wrong`);return o?i.toBytes():zs(i.chunks[0])}}return i.reset(),mv(i,s,e,t),i.toBytes(!0)}var iO={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},F1=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=Rn[e];if(t===void 0){let n=G[e];if(!n)throw new Error(`${Z} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},Ni=Symbol.for("DONE"),Ec=Symbol.for("BREAK");function sO(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=Oi(e,t);if(i===Ec){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed array`)}if(i===Ni)throw new Error(`${Z} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function aO(r,e,t){let n=t.useMaps===!0,o=t.rejectDuplicateMapKeys===!0,i=n?void 0:{},s=n?new Map:void 0;for(let a=0;a<r.value;a++){let c=Oi(e,t);if(c===Ec){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed map`)}if(c===Ni)throw new Error(`${Z} found map but not enough entries (got ${a} [no key], expected ${r.value})`);if(!n&&typeof c!="string")throw new Error(`${Z} non-string keys not supported (got ${typeof c})`);if(o&&(n&&s.has(c)||!n&&Object.hasOwn(i,c)))throw new Error(`${Z} found repeat map key "${c}"`);let l=Oi(e,t);if(l===Ni)throw new Error(`${Z} found map but not enough entries (got ${a} [no value], expected ${r.value})`);n?s.set(c,l):i[c]=l}return n?s:i}function*cO(r,e,t){for(let n=0;n<r.value;n++){let o=Oi(e,t);if(o===Ec){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed map`)}if(o===Ni)throw new Error(`${Z} found map but not enough entries (got ${n} [no key], expected ${r.value})`);let i=Oi(e,t);if(i===Ni)throw new Error(`${Z} found map but not enough entries (got ${n} [no value], expected ${r.value})`);yield[o,i]}}function lO(r,e){let t=!1,n=function(){if(t)throw new Error(`${Z} tag decode() may only be called once`);t=!0;let o=Oi(r,e);if(o===Ni)throw new Error(`${Z} tag content missing`);if(o===Ec)throw new Error(`${Z} got unexpected break in tag content`);return o};return n.entries=function(){if(t)throw new Error(`${Z} tag decode() may only be called once`);t=!0;let o=r.next();if(!w.equals(o.type,w.map))throw new Error(`${Z} entries() requires map content, got ${o.type.name}`);let i=[];for(let s of cO(o,r,e))i.push(s);return i},Object.defineProperty(n,"_called",{get(){return t},enumerable:!1}),n}function Oi(r,e){if(r.done())return Ni;let t=r.next();if(w.equals(t.type,w.break))return Ec;if(t.type.terminal)return t.value;if(w.equals(t.type,w.array))return sO(t,r,e);if(w.equals(t.type,w.map))return aO(t,r,e);if(w.equals(t.type,w.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=lO(r,e),o=e.tags[t.value](n);if(!n._called)throw new Error(`${Z} tag decoder must call decode() or entries()`);return o}throw new Error(`${Z} tag not supported (${t.value})`)}throw new Error("unsupported")}function h6(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Z} data to decode must be a Uint8Array`);e=Object.assign({},iO,e);let t=zs(r),n=e.tokenizer||new F1(t,e),o=Oi(n,e);if(o===Ni)throw new Error(`${Z} did not find any content to decode`);if(o===Ec)throw new Error(`${Z} got unexpected break`);return[o,r.subarray(n.pos())]}function p6(r,e){let[t,n]=h6(r,e);if(n.length>0)throw new Error(`${Z} too many terminals, data makes no sense`);return t}var m6=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(w.equals(t.type,w.array)&&(t.elements++,t.elements!==1&&e.push([44])),w.equals(t.type,w.map)&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[w.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i);e.push(o)}[w.negint.major](e,t){this[w.uint.major](e,t)}[w.bytes.major](e,t){throw new Error(`${$o} unsupported type: Uint8Array`)}[w.string.major](e,t){this.prefix(e);let n=Pu(JSON.stringify(t.value));e.push(n.length>32?zs(n):n)}[w.array.major](e,t){this.prefix(e),this.inRecursive.push({type:w.array,elements:0}),e.push([91])}[w.map.major](e,t){this.prefix(e),this.inRecursive.push({type:w.map,elements:0}),e.push([123])}[w.tag.major](e,t){}[w.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(w.equals(s.type,w.array))e.push([93]);else if(w.equals(s.type,w.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(`${$o} 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=[],i=!1;for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s),!i&&(o[s]===46||o[s]===101||o[s]===69)&&(i=!0);i||(o.push(46),o.push(48)),e.push(o)}};function uO(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${$o} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==w.string||n.type!==w.string)throw new Error(`${$o} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${$o} unexpected duplicate map keys, this is not supported`)}var dO={addBreakTokens:!0,mapSorter:uO};function g6(r,e){return e=Object.assign({},dO,e),f6(r,new m6,e)}var vc=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${Z} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${Z} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new F(w.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${Z} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Z} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let i=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(i);return n?new F(w.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new F(s>=0?w.uint:w.negint,s,this._pos-e):new F(s>=0?w.uint:w.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Z} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let i=this._pos,s=0;i<this.data.length&&s<65536;i++,s++){let a=this.data[i];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,i));return this._pos=i+1,new F(w.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Z} unexpected end of unicode escape sequence at position ${this._pos}`);let i=0;for(let s=0;s<4;s++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${Z} unexpected unicode escape character at position ${this._pos}`);i=i*16+a,this._pos++}return i},o=()=>{let i=this.ch(),s=null,a=i>239?4:i>223?3:i>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Z} unexpected unicode sequence at position ${this._pos}`);let c,l,u,d;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(d=(i&31)<<6|c&63,d>127&&(s=d));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(d=(i&15)<<12|(c&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],u=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(d=(i&15)<<18|(c&63)<<12|(l&63)<<6|u&63,d>65535&&d<1114112&&(s=d))}s===null?(s=65533,a=1):s>65535&&(s-=65536,t.push(s>>>10&1023|55296),s=56320|s&1023),t.push(s),this._pos+=a};for(;!this.done();){let i=this.ch(),s;switch(i){case 92:if(this._pos++,this.done())throw new Error(`${Z} unexpected string termination at position ${this._pos}`);switch(s=this.ch(),this._pos++,s){case 34:case 39:case 92:case 47:t.push(s);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${Z} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new F(w.string,wE(t),this._pos-e);default:if(i<32)throw new Error(`${Z} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${Z} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new F(w.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new F(w.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new F(w.null,null,4);case 102:return this.expect([102,97,108,115,101]),new F(w.false,!1,5);case 116:return this.expect([116,114,117,101]),new F(w.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${Z} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new F(w.break,void 0,1);if(this.ch()!==44)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new F(w.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new F(w.break,void 0,1);if(this.ch()!==44)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new F(w.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${Z} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function y6(r,e){return e=Object.assign({tokenizer:new vc(r,e)},e),p6(r,e)}function hO(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function pO(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=J.asCID(r);if(!e)return null;let t=e.toString();return[new F(w.map,1/0,1),new F(w.string,"/",1),new F(w.string,t,t.length),new F(w.break,void 0,1)]}function $1(r){let e=mt.encode(r).slice(1);return[new F(w.map,1/0,1),new F(w.string,"/",1),new F(w.map,1/0,1),new F(w.string,"bytes",5),new F(w.string,e,e.length),new F(w.break,void 0,1),new F(w.break,void 0,1)]}function Pn(r){return $1(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function mO(r){return $1(new Uint8Array(r))}function gO(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function yO(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 wO={typeEncoders:{Object:pO,Buffer:$1,Uint8Array:$1,Int8Array:Pn,Uint16Array:Pn,Int16Array:Pn,Uint32Array:Pn,Int32Array:Pn,Float32Array:Pn,Float64Array:Pn,Uint8ClampedArray:Pn,BigInt64Array:Pn,BigUint64Array:Pn,DataView:Pn,ArrayBuffer:mO,undefined:gO,number:yO}},w6=class extends vc{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(w.equals(e.type,w.map)){let t=this._next();if(w.equals(t.type,w.string)&&t.value==="/"){let n=this._next();if(w.equals(n.type,w.string)){let o=this._next();if(!w.equals(o.type,w.break))throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new F(w.tag,42,0)}if(w.equals(n.type,w.map)){let o=this._next();if(w.equals(o.type,w.string)&&o.value==="bytes"){let i=this._next();if(w.equals(i.type,w.string)){for(let a=0;a<2;a++){let c=this._next();if(!w.equals(c.type,w.break))throw new Error("Invalid encoded Bytes form")}let s=mt.decode(`m${i.value}`);return new F(w.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},gv={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:{42:r=>J.parse(r())}},bO="dag-json",b6=297,yv=r=>g6(r,wO),wv=r=>{let e=hO(r),t=Object.assign(gv,{tokenizer:new w6(e,gv)});return y6(e,t)},xO=r=>EO.decode(yv(r));var EO=new TextDecoder,vO=r=>wv(SO.encode(r)),SO=new TextEncoder;var _6={};ht(_6,{code:()=>T6,createLink:()=>Cv,createNode:()=>Iv,decode:()=>BO,encode:()=>OO,name:()=>NO,prepare:()=>S6,validate:()=>A6});var AO=new TextDecoder;function E6(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 V1(r,e){let t;[t,e]=E6(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 bv(r,e){let t;return[t,e]=E6(r,e),[t&7,t>>3,e]}function TO(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=bv(r,n),i===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]=V1(r,n)}else if(i===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 s;[s,n]=V1(r,n),e.Name=AO.decode(s)}else if(i===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]=E6(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${i}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function xv(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=bv(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(i)throw new Error("protobuf: (PBNode) duplicate Data section");[i,t]=V1(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]=V1(r,t),n.push(TO(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 s={};return i&&(s.Data=i),s.Links=n||[],s}var vv=new TextEncoder,Ev=2**32,_O=2**31;function IO(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=Bu(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=vv.encode(r.Name);t-=n.length,e.set(n,t),t=Bu(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=Bu(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function Sv(r){let e=kO(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=Bu(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=IO(r.Links[o],t.subarray(0,n));n-=i,n=Bu(t,n,i)-1,t[n]=18}return t}function CO(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Sc(t)}if(typeof r.Name=="string"){let t=vv.encode(r.Name).length;e+=1+t+Sc(t)}return typeof r.Tsize=="number"&&(e+=1+Sc(r.Tsize)),e}function kO(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Sc(t)}if(r.Links)for(let t of r.Links){let n=CO(t);e+=1+n+Sc(n)}return e}function Bu(r,e,t){e-=Sc(t);let n=e;for(;t>=_O;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Sc(r){return r%2===0&&r++,Math.floor((RO(r)+6)/7)}function RO(r){let e=0;return r>=Ev&&(r=Math.floor(r/Ev),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+PO[r]}var PO=[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 LO=["Data","Links"],DO=["Hash","Name","Tsize"],v6=new TextEncoder;function Tv(r,e){if(r===e)return 0;let t=r.Name?v6.encode(r.Name):[],n=e.Name?v6.encode(e.Name):[],o=t.length,i=n.length;for(let s=0,a=Math.min(o,i);s<a;++s)if(t[s]!==n[s]){o=t[s],i=n[s];break}return o<i?-1:i<o?1:0}function Av(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function _v(r){if(typeof r.asCID=="object"){let t=J.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=J.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=J.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=J.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 S6(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=v6.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(_v),e.Links.sort(Tv);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function A6(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!Av(r,LO))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(!Av(t,DO))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&&Tv(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function Iv(r,e=[]){return S6({Data:r,Links:e})}function Cv(r,e,t){return _v({Hash:t,Name:r,Tsize:e})}function kv(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var NO="dag-pb",T6=112;function OO(r){A6(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),Sv(e)}function BO(r){let e=kv(r),t=xv(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=J.decode(o.Hash)}catch{}if(!i.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(i.Name=o.Name),o.Tsize!==void 0&&(i.Tsize=o.Tsize),i})),n}function Ac(r){return r?.then!=null}function Rv(r=[],e){let t={[T6]:_6,[Eo]:us,[r6]:n6,[b6]:x6,[Ag]:xf};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ac(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new yu(`Could not load codec for ${n}`)}}function Pv(r=[],e){let t={[st.code]:st,[vf.code]:vf,[Tt.code]:Tt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ac(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new gu(`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 cn=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 Ko=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,bytes:o}of e)await this.put(n,o,t),yield n}get(e,t){throw new Error(".get is not implemented")}async*getMany(e,t){for await(let n of e)yield{cid:n,bytes: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 K1=0,Tc=class extends Error{static name="IdentityHashDigestTooLongError";name="IdentityHashDigestTooLongError"},H1=class extends Ko{child;maxDigestLength;constructor(e,t){super(),this.child=e,this.maxDigestLength=t?.maxDigestLength}put(e,t,n){if(e.multihash.code===K1){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new Tc(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return n?.signal?.throwIfAborted(),e}return this.child==null?(n?.signal?.throwIfAborted(),e):this.child.put(e,t,n)}async*get(e,t){if(e.multihash.code===K1){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new Tc(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted(),yield e.multihash.digest;return}if(this.child==null)throw t?.signal?.throwIfAborted(),new cn;yield*this.child.get(e,t)}has(e,t){if(e.multihash.code===K1){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new Tc(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return t?.signal?.throwIfAborted(),!0}return this.child==null?(t?.signal?.throwIfAborted(),!1):this.child.has(e,t)}delete(e,t){if(e.code===K1){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new Tc(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted();return}if(this.child!=null)return this.child.delete(e,t)}async*getAll(e){this.child!=null&&(yield*this.child.getAll(e)),e?.signal?.throwIfAborted()}};function MO(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 _c=MO;function UO(r){return r[Symbol.asyncIterator]!=null}function FO(r,e){let t=0;if(UO(r))return(async function*(){for await(let c of r)await e(c,t++)&&(yield c)})();let n=_c(r),{value:o,done:i}=n.next();if(i===!0)return(function*(){})();let s=e(o,t++);if(typeof s.then=="function")return(async function*(){await s&&(yield o);for(let c of n)await e(c,t++)&&(yield c)})();let a=e;return(function*(){s===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)})()}var Ln=FO;function $O(r){return r[Symbol.asyncIterator]!=null}function Lv(r){return r?.then!=null}function VO(r,e){let t=0;if($O(r))return(async function*(){for await(let c of r){let l=e(c,t++);Lv(l)&&await l,yield c}})();let n=_c(r),{value:o,done:i}=n.next();if(i===!0)return(function*(){})();let s=e(o,t++);if(typeof s?.then=="function")return(async function*(){await s,yield o;for(let c of n){let l=e(c,t++);Lv(l)&&await l,yield c}})();let a=e;return(function*(){yield o;for(let c of n)a(c,t++),yield c})()}var I6=VO;var KO=128,Ic=class{child;getHasher;log;logger;blockBrokers;constructor(e,t={}){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.blockBrokers=e.blockBrokers,this.child=new H1(e.blockstore,{maxDigestLength:t.maxIdentityHashDigestLength??KO}),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new K("blocks:put:duplicate",e)),e):(n.onProgress?.(new K("blocks:put:providers:notify",e)),await Promise.all(this.blockBrokers.map(async o=>o.announce?.(e,n))),n.onProgress?.(new K("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Ln(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new K("blocks:put-many:duplicate",i)),!s}),o=I6(n,async({cid:i})=>{t.onProgress?.(new K("blocks:put-many:providers:notify",i)),await Promise.all(this.blockBrokers.map(async s=>s.announce?.(i,t)))});t.onProgress?.(new K("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async*get(e,t={}){let n=await this.child.has(e,t),o=t.offline===!0;if(!n){if(o)throw new pu("The block was present in the blockstore and the node is running offline so cannot fetch it");let i=await this.getHasher(e.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new K("blocks:get:providers:get",e));let s=await Dv(e,this.blockBrokers,i,{...t,log:this.log});t.onProgress?.(new K("blocks:get:blockstore:put",e)),await this.child.put(e,s,t),t.onProgress?.(new K("blocks:get:providers:notify",e)),await Promise.all(this.blockBrokers.map(async a=>a.announce?.(e,t))),yield s;return}t.onProgress?.(new K("blocks:get:blockstore:get",e)),yield*this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new K("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(I6(e,async n=>{let o=await this.child.has(n,t),i=t.offline===!0;if(!o){if(i)throw new pu("The block was present in the blockstore and the node is running offline so cannot fetch it");let s=await this.getHasher(n.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new K("blocks:get-many:providers:get",n));let a=await Dv(n,this.blockBrokers,s,{...t,log:this.log});t.onProgress?.(new K("blocks:get-many:blockstore:put",n)),await this.child.put(n,a,t),t.onProgress?.(new K("blocks:get-many:providers:notify",n)),await Promise.all(this.blockBrokers.map(async c=>c.announce?.(n,t)))}}))}async delete(e,t={}){t.onProgress?.(new K("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new K("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 K("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}};async function Dv(r,e,t,n){let o=qO(r,t),i=new AbortController,s=we([i.signal,n.signal]);i.signal;let a=[];for(let c of e)HO(c)&&a.push(c);if(a.length===0)throw new Vs(`No block brokers capable of retrieving blocks are configured, the CID ${r} cannot be fetched from the network`);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:s,validateFn:async d=>{await o(d),n.signal?.throwIfAborted(),l=!0}});return l||(await o(u),n.signal?.throwIfAborted()),u}catch(l){throw n.log.error("could not retrieve verified block for %c from %s - %e",r,c.name,l),l}}))}catch(c){throw new Wh(c.errors,`Failed to load block for ${r}`)}finally{i.abort(),s.clear()}}function HO(r){return typeof r.retrieve=="function"}var qO=(r,e)=>{if(e==null)throw new _(`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,{truncate:r.multihash.digest.byteLength});if(Ac(o)?n=await o:n=o,!se(n.digest,r.multihash.digest))throw new si("Hash of downloaded block did not match multihash from passed CID")}};var q1=class extends Ic{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async addPeer(e,t){await Promise.all(this.blockBrokers.map(n=>n.addPeer(e,t)))}async put(e,t,n={}){let o=we([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=we([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async*get(e,t={}){let n=we([this.closeController.signal,t.signal]);try{yield*super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=we([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=we([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=we([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=we([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=we([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};var z1=class extends Ic{started;constructor(e,t={}){super(e,t),this.started=!1}isStarted(){return this.started}async start(){await xt(this.child,...this.blockBrokers),this.started=!0}async stop(){await St(this.child,...this.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){if(this.blockBrokers.length===0)throw new Vs("No block brokers configured");let n=this.blockBrokers.map(o=>o.createSession?.(t)).filter(o=>o!=null);if(n.length===0)throw new Vs(`No configured block brokers support sessions - tried ${this.blockBrokers.map(o=>o.name).join(", ")}`);return new q1({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}};var Gs=class extends ue{initialPeerSearchComplete;requests;logName;log;logger;minProviders;maxProviders;providers;evictionFilter;initialProviders;cidPeerFilterSize;constructor(e,t){super(),this.logName=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.logName),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.cidPeerFilterSize=t.cidPeerFilterSize??100,this.providers=[],this.evictionFilter=Mt(this.maxProviders),this.initialProviders=[...t.providers??[]]}async retrieve(e,t={}){let n=mt.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o.observers++,o.promise;let i=Se(),s={promise:i.promise,observers:1,queryFilter:Mt(this.cidPeerFilterSize)};this.requests.set(n,s);let a=!1;this.initialPeerSearchComplete==null&&(a=!0,this.log=this.logger.forComponent(`${this.logName}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t));let c=!1,l=new $t({concurrency:this.maxProviders});l.addEventListener("failure",f=>{this.log.error("error querying provider %s, evicting from session - %e",f.detail.job.options.provider,f.detail.error),this.evict(f.detail.job.options.provider)}),l.addEventListener("success",f=>{c=!0,i.resolve(f.detail.result)}),l.addEventListener("idle",()=>{if(c){this.log.trace("session idle, found block");return}if(t.signal?.aborted===!0){this.log.trace("session idle, signal aborted");return}Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let f=0;f<this.minProviders&&this.providers.length!==0;f++){let h=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(h)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),i.resolve(await this.retrieve(e,t))}).catch(f=>{this.log.error("could not find new providers for %c - %e",e,f),i.reject(f)})});let u=f=>{let h=this.toFilterKey(f.detail);s.queryFilter.has(h)||(s.queryFilter.add(h),this.emitFoundProviderProgressEvent(e,f.detail,t),l.add(async()=>this.queryProvider(e,f.detail,t),{provider:f.detail}).catch(p=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,p)}))};if(this.addEventListener("provider",u),a)try{await qe(this.initialPeerSearchComplete,t.signal),a&&this.log("found initial session peers for %c",e)}catch(f){throw a&&this.log("failed to find initial session peers for %c - %e",e,f),this.requests.delete(n),s.observers>1&&i.reject(f),f}Promise.all([...this.providers].filter(f=>{let h=this.toFilterKey(f),p=s.queryFilter.has(h);return p||s.queryFilter.add(this.toFilterKey(f)),!p}).map(async f=>l.add(async()=>this.queryProvider(e,f,t),{provider:f}))).catch(f=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,f)});let d=()=>{i.reject(new sr(t.signal?.reason??"Session aborted")),l.abort()};t.signal?.addEventListener("abort",d);try{return await qe(i.promise,t.signal)}finally{this.removeEventListener("provider",u),t.signal?.removeEventListener("abort",d),l.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toFilterKey(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.toFilterKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async addPeer(e,t){let n=await this.convertToProvider(e,"manually-added",t);n==null||this.hasProvider(n)||(this.providers.push(n),this.safeDispatchEvent("provider",{detail:n}))}async findProviders(e,t,n){let o=Se(),i=0;return Promise.resolve().then(async()=>{if(this.log("finding %d-%d new provider(s) for %c - %d initial providers",t,this.maxProviders,e,this.initialProviders.length),this.initialProviders.length>0)for(;i<t&&this.initialProviders.length>0;){let s=this.initialProviders.pop();if(s==null)break;let a=await this.convertToProvider(s,"manual",n);if(n.signal?.aborted===!0)break;if(a!=null&&!this.hasProvider(a)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(a),this.safeDispatchEvent("provider",{detail:a}),i++,i===t&&(this.log("session is ready with %d peer(s), only initial peers present",t),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(i<this.maxProviders)for await(let s of this.findNewProviders(e,n)){if(i===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),i++,i===t&&(this.log("session is ready with %d peer(s), new peers present",t),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(this.log("found %d/%d new session peers",i,this.maxProviders),i<t)throw new mu(`Found ${i} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c - %e",e,s),o.reject(s)}),o.promise}};var W1=class{libp2p;blockstore;datastore;events;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??e.libp2p.logger,this.log=this.logger.forComponent("helia"),this.getHasher=Pv(e.hashers,e.loadHasher),this.getCodec=Rv(e.codecs,e.loadCodec),this.dns=e.dns??_f(),this.metrics=e.metrics,this.libp2p=e.libp2p,this.events=new ue;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,libp2p:this.libp2p,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new jh(t,{routers:(e.routers??[]).flatMap(o=>{typeof o=="function"&&(o=o(t));let i=[o],s=zO(o);s!=null&&i.push(s);let a=WO(o);return a!=null&&i.push(a),i}),providerLookupConcurrency:e.providerLookupConcurrency}),t.blockBrokers=e.blockBrokers.map(o=>o(t));let n=new z1(t,e);this.pins=new Yh(e.datastore,n,this.getCodec),this.blockstore=new f1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore}async start(){await ox(this.datastore),await xt(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("start",{detail:this}))}async stop(){await St(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("stop",{detail:this}))}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await yr(o.deleteMany((async function*(){for await(let{cid:i}of o.getAll())try{if(await n.pins.isPinned(i,e))continue;yield i,e.onProgress?.(new K("helia:gc:deleted",i))}catch(s){n.log.error("error during gc - %e",s),e.onProgress?.(new K("helia:gc:error",s))}})()))}finally{t()}this.log("gc finished")}};function zO(r){return r?.[wo]}function WO(r){return r?.[xo]}function GO(r){return r[Symbol.asyncIterator]!=null}function YO(r,e){let t=0;if(GO(r))return(async function*(){for await(let c of r)yield e(c,t++)})();let n=_c(r),{value:o,done:i}=n.next();if(i===!0)return(function*(){})();let s=e(o,t++);if(typeof s.then=="function")return(async function*(){yield await s;for(let c of n)yield e(c,t++)})();let a=e;return(function*(){yield s;for(let c of n)yield a(c,t++)})()}var ln=YO;function jO(r){return r[Symbol.asyncIterator]!=null}function XO(r,e){return jO(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 Bi=XO;var Mu="/ipfs/bitswap/1.2.0";var it;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(it||(it={}));var C6;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(C6||(C6={}));(function(r){r.codec=()=>lt(C6)})(it||(it={}));var Ys;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.cid!=null&&i.cid.byteLength>0&&(s.uint32(10),s.bytes(i.cid)),i.priority!=null&&i.priority!==0&&(s.uint32(16),s.int32(i.priority)),i.cancel!=null&&(s.uint32(24),s.bool(i.cancel)),i.wantType!=null&&(s.uint32(32),it.codec().encode(i.wantType,s)),i.sendDontHave!=null&&(s.uint32(40),s.bool(i.sendDontHave)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={cid:de(0),priority:0},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.cid=i.bytes();break}case 2:{c.priority=i.int32();break}case 3:{c.cancel=i.bool();break}case 4:{c.wantType=it.codec().decode(i);break}case 5:{c.sendDontHave=i.bool();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.cid`,value:i.bytes()};break}case 2:{yield{field:`${a}.priority`,value:i.int32()};break}case 3:{yield{field:`${a}.cancel`,value:i.bool()};break}case 4:{yield{field:`${a}.wantType`,value:it.codec().decode(i)};break}case 5:{yield{field:`${a}.sendDontHave`,value:i.bool()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Ys||(Ys={}));var Uu;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.entries!=null&&i.entries.length>0)for(let c of i.entries)s.uint32(10),Ys.codec().encode(c,s);i.full!=null&&(s.uint32(16),s.bool(i.full)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={entries:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{if(a.limits?.entries!=null&&c.entries.length===a.limits.entries)throw new Ee('Decode error - repeated field "entries" had too many elements');c.entries.push(Ys.codec().decode(i,i.uint32(),{limits:a.limits?.entries$}));break}case 2:{c.full=i.bool();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={entries:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{if(c.limits?.entries!=null&&l.entries===c.limits.entries)throw new Ee('Streaming decode error - repeated field "entries" had too many elements');for(let f of Ys.codec().stream(i,i.uint32(),`${a}.entries[]`,{limits:c.limits?.entries$}))yield{...f,index:l.entries};l.entries++;break}case 2:{yield{field:`${a}.full`,value:i.bool()};break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Uu||(Uu={}));var js;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.prefix!=null&&i.prefix.byteLength>0&&(s.uint32(10),s.bytes(i.prefix)),i.data!=null&&i.data.byteLength>0&&(s.uint32(18),s.bytes(i.data)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={prefix:de(0),data:de(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.prefix=i.bytes();break}case 2:{c.data=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.prefix`,value:i.bytes()};break}case 2:{yield{field:`${a}.data`,value:i.bytes()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(js||(js={}));var zr;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(zr||(zr={}));var G1;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(G1||(G1={}));(function(r){r.codec=()=>lt(G1)})(zr||(zr={}));var Xs;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.cid!=null&&i.cid.byteLength>0&&(s.uint32(10),s.bytes(i.cid)),i.type!=null&&G1[i.type]!==0&&(s.uint32(16),zr.codec().encode(i.type,s)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={cid:de(0),type:zr.HaveBlock},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.cid=i.bytes();break}case 2:{c.type=zr.codec().decode(i);break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.cid`,value:i.bytes()};break}case 2:{yield{field:`${a}.type`,value:zr.codec().decode(i)};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Xs||(Xs={}));var Qs;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.wantlist!=null&&(s.uint32(10),Uu.codec().encode(i.wantlist,s)),i.blocks!=null&&i.blocks.length>0)for(let c of i.blocks)s.uint32(26),js.codec().encode(c,s);if(i.blockPresences!=null&&i.blockPresences.length>0)for(let c of i.blockPresences)s.uint32(34),Xs.codec().encode(c,s);i.pendingBytes!=null&&i.pendingBytes!==0&&(s.uint32(40),s.int32(i.pendingBytes)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={blocks:[],blockPresences:[],pendingBytes:0},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.wantlist=Uu.codec().decode(i,i.uint32(),{limits:a.limits?.wantlist});break}case 3:{if(a.limits?.blocks!=null&&c.blocks.length===a.limits.blocks)throw new Ee('Decode error - repeated field "blocks" had too many elements');c.blocks.push(js.codec().decode(i,i.uint32(),{limits:a.limits?.blocks$}));break}case 4:{if(a.limits?.blockPresences!=null&&c.blockPresences.length===a.limits.blockPresences)throw new Ee('Decode error - repeated field "blockPresences" had too many elements');c.blockPresences.push(Xs.codec().decode(i,i.uint32(),{limits:a.limits?.blockPresences$}));break}case 5:{c.pendingBytes=i.int32();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={blocks:0,blockPresences:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{yield*Uu.codec().stream(i,i.uint32(),`${a}.wantlist`,{limits:c.limits?.wantlist});break}case 3:{if(c.limits?.blocks!=null&&l.blocks===c.limits.blocks)throw new Ee('Streaming decode error - repeated field "blocks" had too many elements');for(let f of js.codec().stream(i,i.uint32(),`${a}.blocks[]`,{limits:c.limits?.blocks$}))yield{...f,index:l.blocks};l.blocks++;break}case 4:{if(c.limits?.blockPresences!=null&&l.blockPresences===c.limits.blockPresences)throw new Ee('Streaming decode error - repeated field "blockPresences" had too many elements');for(let f of Xs.codec().stream(i,i.uint32(),`${a}.blockPresences[]`,{limits:c.limits?.blockPresences$}))yield{...f,index:l.blockPresences};l.blockPresences++;break}case 5:{yield{field:`${a}.pendingBytes`,value:i.int32()};break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Qs||(Qs={}));function Nv(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 Y1=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var QO=4193648,ZO=QO+16;function*Ov(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],i=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},u=Qs.encode(l).byteLength,{added:d,hasMore:f,newSize:h}=k6(o,l.blocks,a,e,u,JO);a+=d,u=h;let p=f;({added:d,hasMore:f,newSize:h}=k6(n,l.blockPresences,s,e,u,eB)),s+=d,u=h;let y=f;if({added:d,hasMore:f,newSize:h}=k6(t,l.wantlist.entries,i,e,u,tB),i+=d,u=h,c=!p&&!y&&!f,c||(l.wantlist.full=!1),yield Qs.encode(l),c)break}}function k6(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=i(l);if(u>ZO)throw new Y1("Cannot send block as after encoding it is over the max message size");let d=o+u;if(d>n){a=!0;break}e.push(l),s++,o=d}return{hasMore:a,added:s,newSize:o}}function JO(r){return R6(3,js.encode(r))}function eB(r){return R6(4,Xs.encode(r))}function tB(r){return R6(1,Ys.encode(r))}function R6(r,e){let t=ye(r),n=ye(e.byteLength);return t+n+e.byteLength}var j1=class extends ue{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??[Mu],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 Kt({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"})}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,t){this.running&&Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",e.protocol,t.remotePeer);let n=()=>{e.status==="open"?e.abort(new zn(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",e.status)},o=AbortSignal.timeout(this.messageReceiveTimeout);o.addEventListener("abort",n),await e.close({signal:o});let i=Ft();e.addEventListener("message",s=>{i.push(s.data)}),e.addEventListener("remoteCloseWrite",()=>{i.end()}),e.addEventListener("close",s=>{s.error!=null&&i.end(s.error)});for await(let s of Fs(i,{maxDataLength:this.maxIncomingMessageSize}))try{let a=Qs.decode(s);this.log("incoming new bitswap %s message from %p on stream",e.protocol,t.remotePeer,e.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:t.remotePeer,message:a}}),o.removeEventListener("abort",n),o=AbortSignal.timeout(this.messageReceiveTimeout),o.addEventListener("abort",n)}catch(a){this.log.error("error reading incoming bitswap message from %p on stream - %e",t.remotePeer,e.id,a),e.abort(a);break}}).catch(n=>{this.log.error("error handling incoming stream from %p - %e",t.remotePeer,n),e.abort(n)})}async*findProviders(e,t){t?.onProgress?.(new K("bitswap:find-providers",e));for await(let n of this.routing.findProviders(e,t)){if(!await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})){this.log("skipping peer %p as they are not dialable - %a",n.id,n.multiaddrs);continue}t?.onProgress?.(new K("bitswap:found-provider",{type:"bitswap",cid:e,provider:n,routing:n.routing})),yield n}}async findAndConnect(e,t){t?.providers!=null&&await Promise.all(t.providers.map(async n=>this.connectTo(n).catch(o=>{this.log.error("could not connect to supplied provider - %e",o)}))),await yr(ln(Bi(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(i=>e.equals(i.options.peerId)&&i.status==="queued");if(o!=null){o.options.message=Nv(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async i=>{let s=i?.message;if(s==null)throw new _("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new K("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,Mu,i);await a.closeRead();try{for(let c of Ov(s,this.maxOutgoingMessageSize))a.send(Mo.single(c))||await a.onDrain(i);await a.close(i)}catch(c){i?.onProgress?.(new K("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p - %e",e,c),a.abort(c)}this._updateSentStats(s.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new pn("Network isn't running");t?.onProgress?.(new K("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),hr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(Mu))return!0;throw new Sa(`${e} did not support ${Mu}`)}})]);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)}};var Bv=Symbol.for("nodejs.util.inspect.custom"),uB=114,Fu=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()})`}[mf]=!0;toString(){return this.string==null&&(this.string=Ge.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return J.createV1(uB,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return se(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return se(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[Bv](){return`PeerId(${this.toString()})`}},$u=class extends Fu{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Vu=class extends Fu{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Ku=class extends Fu{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},dB=2336,Hu=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Tt.digest(R(this.url))}[Bv](){return`PeerId(${this.url})`}[mf]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return J.createV1(dB,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=N(e)),e.toString()===this.toString())}};var fB=114,Mv=2336;function Xe(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=He(Ge.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Dn(J.parse(r));if(e==null)throw new _('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=He(e.decode(r))}return dt(t)}function io(r){if(r.type==="Ed25519")return new Vu({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Ku({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new $u({multihash:r.toCID().multihash,publicKey:r});throw new mn}function Uv(r){return io(r.publicKey)}function dt(r){if(pB(r))return new $u({multihash:r});if(hB(r))try{let e=Wf(r);if(e.type==="Ed25519")return new Vu({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Ku({multihash:r,publicKey:e})}catch{let t=N(r.digest);return new Hu(new URL(t))}throw new si("Supplied PeerID Multihash is invalid")}function Dn(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==fB&&r.code!==Mv)throw new uf("Supplied PeerID CID is invalid");if(r.code===Mv){let e=N(r.multihash.digest);return new Hu(new URL(e))}return dt(r.multihash)}function hB(r){return r.code===Tt.code}function pB(r){return r.code===st.code}function Zs(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 X1(r){let e=He(Ge.decode(`z${r}`));return dt(e)}var er=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 Zs(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 Zs(this.map.values(),e=>e.key)}values(){return Zs(this.map.values(),e=>e.value)}get size(){return this.map.size}};var Wr=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 Zs(this.set.entries(),e=>{let t=X1(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=X1(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Zs(this.set.values(),e=>X1(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 P6(){return new Wr}var Q1=class{filter;constructor(e,t){this.filter=Mt(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 L6(r,e=.001){return new Q1(r,e)}var D6=class extends er{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 Ho(r){let{name:e,metrics:t}=r,n;return t!=null?n=new D6({name:e,metrics:t}):n=new er,n}var qo=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=mt.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=mt.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=mt.encode(e.multihash.bytes);this.blocks.set(n,t)}};function mB(r){let e=new Uint8Array(r.reduce((n,o)=>n+ye(o),0)),t=0;for(let n of r)e=Zt(n,e,t),t+=ye(n);return e}var Fv=mB;function N6(r){return Fv([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var Z1=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;doNotResendBlockWindow;maxWantListSize;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,this.doNotResendBlockWindow=t.doNotResendBlockWindow??5e3,this.maxWantListSize=t.maxWantListSize??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)}removeExpiredWants(){this.wants.forEach((e,t)=>{e.expires!=null&&e.expires<Date.now()&&this.wants.delete(t)})}addWants(e){if(e==null)return;e.full===!0&&this.wants.forEach((n,o)=>{n.status==="want"&&this.wants.delete(o)});for(let n of e.entries){let o=J.decode(n.cid),i=N(o.multihash.bytes,"base64");if(n.cancel===!0)this.log("peer %p cancelled want of block for %c",this.peerId,o),this.wants.delete(i);else{n.wantType===it.WantHave?this.log("peer %p wanted block presence for %c",this.peerId,o):this.log("peer %p wanted block for %c",this.peerId,o);let s=this.wants.get(i);if(s!=null){let a=s.status==="sent"||s.status==="sending",c=s.wantType===it.WantHave&&(n.wantType==null||n.wantType===it.WantBlock);a&&c&&(s.status="want"),s.priority=n.priority,s.wantType=n.wantType??it.WantBlock,s.sendDontHave=n.sendDontHave??!1;continue}this.wants.set(i,{cid:o,priority:n.priority,wantType:n.wantType??it.WantBlock,sendDontHave:n.sendDontHave??!1,status:"want",created:Date.now()})}}let t=[...this.wants.entries()].filter(([n,o])=>o.status==="want");t.length>this.maxWantListSize&&this.truncateWants(t)}truncateWants(e){e=e.sort((n,o)=>n[1].created<o[1].created?-1:o[1].created<n[1].created?1:0).sort((n,o)=>n[1].haveBlock===!1?-1:o[1].haveBlock===!1?1:0).sort((n,o)=>n[1].priority<o[1].priority?-1:o[1].priority<n[1].priority?1:0);let t=e.length-this.maxWantListSize;for(let n=0;n<t;n++)this.wants.delete(e[n][0])}getWants(){return[...this.wants.values()]}hasWant(e){let t=N(e.multihash.bytes,"base64");return this.wants.has(t)}async sendBlocksToPeer(e){let t=new qo,n=new Set;this.removeExpiredWants();let o=[...this.wants.entries()].filter(([i,s])=>s.status==="want");o.forEach(([i,s])=>{s.status="sending"});for(let[i,s]of o)try{let a=await Vh(this.blockstore.get(s.cid,e));if(s.status!=="sending")continue;s.wantType===it.WantHave?a.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",s.cid),n.add(i),t.addBlock(s.cid,{data:a,prefix:N6(s.cid)})):(this.log("sending have for %c",s.cid),t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:zr.HaveBlock})):(this.log("sending block for %c",s.cid),n.add(i),t.addBlock(s.cid,{data:a,prefix:N6(s.cid)})),s.status="sent",s.expires=Date.now()+this.doNotResendBlockWindow}catch(a){if(a.name!=="NotFoundError")throw a;if(s.status="want",s.haveBlock=!1,this.log("do not have block for %c",s.cid),!s.sendDontHave||s.sentDoNotHave===!0)continue;s.sentDoNotHave=!0,t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:zr.DoNotHaveBlock})}(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((i,s)=>i+s.data.byteLength,0)))}};var J1=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;doNotResendBlockWindow;maxWantListSize;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.doNotResendBlockWindow=t.doNotResendBlockWindow,this.maxWantListSize=t.maxWantListSize,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=Ho({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 - %e",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.removeExpiredWants(),t.getWants()}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);n==null&&(n=new Z1({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock,doNotResendBlockWindow:this.doNotResendBlockWindow,maxWantListSize:this.maxWantListSize}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,i)=>o+i.data.byteLength,0)??0),n.removeExpiredWants(),n.addWants(t.wantlist),this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=[];for(let o of this.ledgerMap.values())o.hasWant(e)&&n.push(o);await Promise.all(n.map(async o=>o.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var O6=class extends Gs{name="bitswap-session";wantList;network;libp2p;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network,this.libp2p=e.libp2p}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t.peerId,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{peerId:n.id,routing:n.routing,toString:()=>`Bitswap(${n.id})`}}toFilterKey(e){return e.peerId.toMultihash().bytes}equals(e,t){return e.peerId.equals(t.peerId)}async convertToProvider(e,t,n){if(Gt(e))return{peerId:e,routing:t,toString:()=>`Bitswap(${e})`};if(await this.libp2p.isDialable(e)!==!1)try{let o=await this.libp2p.dial(e,n);return{peerId:o.remotePeer,routing:t,toString:()=>`Bitswap(${o.remotePeer})`}}catch{}}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new K("bitswap:found-provider",{type:"bitswap",cid:e,provider:{id:t.peerId,multiaddrs:[],routing:t.routing},routing:t.routing}))}};function $v(r,e){return new O6(r,e)}var ep=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)}};function gB(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Rr(r);e.push(t),r=r.slice(ye(t))}return e}var Vv=gB;var tp=class extends ue{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=Ho({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=yt({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 - %e",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 - %e",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=N(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??it.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===it.WantHave&&t.wantType===it.WantBlock&&(o.wantType=it.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===it.WantBlock?(await hr(this,"block",t?.signal,{filter:a=>se(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await hr(this,"presence",t?.signal,{filter:s=>se(e.multihash.digest,s.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",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=Se(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new qo;for(let[i,s]of this.wants.entries())t.has(i)||s.cancel||(n.add(i),o.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let i of n)t.add(i)}catch(i){this.log.error("error sending full wantlist to new peer - %e",i)}})).catch(e=>{this.log.error("error sending messages - %e",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=N(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new qo;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:it.WantHave,priority:1}),await this.network.sendMessage(t,o),(await hr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&se(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:it.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new qo;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:it.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await hr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&se(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=N(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 i=Vv(o.prefix),s=i[0],a=i[1],c=i[2],l=i[3],u=c===st.code?st:await this.hashLoader?.getHasher(c);if(u==null){this.log.error("unknown hash algorithm",c);continue}let d=u.digest(o.data,{truncate:l});d.then!=null&&(d=await d);let f=J.create(s===0?0:1,a,d);this.log("received block from %p for %c",e,f),this.safeDispatchEvent("block",{detail:{sender:e,cid:f,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:f,has:!0,block:o.data}});let h=N(f.multihash.bytes,"base64"),p=this.wants.get(h);p!=null&&(p.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=J.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===zr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new qo(!0);for(let[o,i]of this.wants.entries())i.cancel||(t.add(o),n.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:1,wantType:it.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",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var rp=class{log;logger;stats;network;blockstore;peerWantLists;wantList;libp2p;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.libp2p=e.libp2p,this.stats=new ep(e),this.network=new j1(e,t),this.peerWantLists=new J1({...e,network:this.network},t),this.wantList=new tp({...e,network:this.network},t)}createSession(e={}){return $v({wantList:this.wantList,network:this.network,logger:this.logger,libp2p:this.libp2p},e)}async want(e,t={}){let n=new AbortController,o=we([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:o}).catch(i=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c - %e",e,i)});try{let i=await this.wantList.wantBlock(e,{...t,signal:o});return t.onProgress?.(new K("bitswap:block",{cid:e,sender:i.sender})),i.block}finally{n.abort(),o.clear()}}async notify(e,t={}){await Promise.all([this.peerWantLists.receivedBlock(e,t),this.wantList.receivedBlock(e,t)])}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 Kv=(r,e={})=>new rp(r,e);var B6=class{name="bitswap";bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=Kv(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){await this.bitswap.notify(e,t)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{name:"bitswap-session",addPeer:async(n,o)=>{await t.addPeer(n,o)},announce:async(n,o)=>{await this.bitswap.notify(n,o)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function M6(r={}){return e=>new B6(e,r)}var yB=[6,53,56,54,55];function Hv(r){return Wv("sni",r)?.value}function qv(r){let e=Wv("tcp",r)?.value;return e==null?"":`:${e}`}function Wv(r,e){return e.find(t=>t.name===r)}function zv(r){return r.some(({code:e})=>e===448)}function Nn(r,e){let t=Gv[r.name];if(t==null)throw new Error(`Can't interpret protocol ${r.name}`);let n=t(r,e);return r.code===41?`[${n}]`:n}var Gv={ip4:(r,e)=>r.value,ip6:(r,e)=>e.length===0?r.value:`[${r.value}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${Nn(t,e)}:${r.value}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${Nn(t,e)}:${r.value}`},dnsaddr:(r,e)=>r.value,dns4:(r,e)=>r.value,dns6:(r,e)=>r.value,dns:(r,e)=>r.value,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Nn(t,e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Nn(t,e)}`},http:(r,e)=>{let t=zv(e),n=Hv(e),o=qv(e);if(t&&n!=null)return`https://${n}${o}`;let i=t?"https://":"http://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=Nn(s,e);return a=a?.replace("tcp://",""),`${i}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Nn(t,e),o=decodeURIComponent(r.value??"");return`${n}${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Nn(t,e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Nn(t,e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Nn(t,e);return n=n?.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=zv(e),n=Hv(e),o=qv(e);if(t&&n!=null)return`wss://${n}${o}`;let i=t?"wss://":"ws://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=Nn(s,e);return a=a?.replace("tcp://",""),`${i}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Nn(t,e);return n=n?.replace("tcp://",""),`wss://${n}`}};function Mi(r,e){let n=j(r).getComponents(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=Gv[o.name];if(i==null)throw new Error(`No interpreter found for ${o.name}`);let s=i(o,n)??"";return e?.assumeHttp!==!1&&yB.includes(o.code)&&(s=s.replace(/^.*:\/\//,""),o.value==="443"?s=`https://${s}`:s=`http://${s}`),(s.startsWith("http://")||s.startsWith("https://")||s.startsWith("ws://")||s.startsWith("wss://"))&&(s=new URL(s).toString(),s.endsWith("/")&&(s=s.substring(0,s.length-1))),s}var Ve=r=>({match:e=>{let t=e[0];return t==null||t.code!==r||t.value!=null?!1:e.slice(1)}}),le=(r,e)=>({match:t=>{let n=t[0];return n?.code!==r||n.value==null||e!=null&&n.value!==e?!1:t.slice(1)}}),Yv=r=>({match:e=>r.match(e)===!1?e:!1}),_e=r=>({match:e=>{let t=r.match(e);return t===!1?e:t}}),tr=(...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}}),Be=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e}});function Ke(...r){function e(o){if(o==null)return!1;let i=o.getComponents();for(let s of r){let a=s.match(i);if(a===!1)return!1;i=a}return i}function t(o){return e(o)!==!1}function n(o){let i=e(o);return i===!1?!1:i.length===0}return{matchers:r,matches:t,exactMatch:n}}var wB=le(421),jv=Ke(wB),op=le(54),ip=le(55),sp=le(56),F6=le(53),xie=Ke(op,_e(le(421))),Eie=Ke(ip,_e(le(421))),vie=Ke(sp,_e(le(421))),ap=Ke(tr(F6,sp,op,ip),_e(le(421))),Xv=Be(le(4),_e(le(43))),Qv=Be(_e(le(42)),le(41),_e(le(43))),$6=tr(Xv,Qv),Js=tr($6,F6,op,ip,sp),Zv=Ke(tr($6,Be(tr(F6,sp,op,ip),_e(le(421))))),V6=Ke(Xv),K6=Ke(Qv),Jv=Ke($6),H6=Be(Js,le(6)),qu=Be(Js,le(273)),ea=Ke(Be(H6,_e(le(421)))),Sie=Ke(qu),q6=Be(qu,Ve(460),_e(le(421))),cp=Be(qu,Ve(461),_e(le(421))),bB=tr(q6,cp),Aie=Ke(q6),eS=Ke(cp),U6=tr(Js,H6,qu,q6,cp),tS=tr(Be(U6,Ve(477),_e(le(421)))),zo=Ke(tS),rS=tr(Be(U6,Ve(478),_e(le(421))),Be(U6,Ve(448),_e(le(449)),Ve(477),_e(le(421)))),ta=Ke(rS),nS=Be(qu,Ve(280),_e(le(466)),_e(le(466)),_e(le(421))),zu=Ke(nS),oS=Be(cp,Ve(465),_e(le(466)),_e(le(466)),_e(le(421))),z6=Ke(oS),np=tr(tS,rS,Be(H6,_e(le(421))),Be(bB,_e(le(421))),Be(Js,_e(le(421))),nS,oS,le(421)),Cc=Ke(np),xB=Be(_e(np),Ve(290),Yv(Ve(281)),_e(le(421))),Nt=Ke(xB),EB=tr(Be(np,Ve(290),Ve(281),_e(le(421))),Be(np,Ve(281),_e(le(421))),Be(Ve(281),_e(le(421)))),Wu=Ke(EB),vB=tr(Be(Js,le(6),Ve(480),_e(le(421))),Be(Js,Ve(480),_e(le(421)))),iS=Ke(vB),SB=Be(Js,tr(Be(le(6,"443"),Ve(480)),Be(le(6),Ve(443)),Be(le(6),Ve(448),Ve(480)),Be(Ve(448),Ve(480)),Ve(448),Ve(443)),_e(le(421))),sS=Ke(SB),AB=tr(Be(le(777),_e(le(421)))),Tie=Ke(AB),TB=tr(Be(le(400),_e(le(421)))),_ie=Ke(TB);function W6(r,e,t){return r.filter(n=>{if(sS.matches(n)||e&&iS.matches(n))return t||ap.matches(n)?!0:ut(n)===!1;if(!e&&t){let{host:o}=ce(n);if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*lp(r,e,t,n,o,i={}){for await(let s of e.findProviders(r,i)){let a=W6(s.multiaddrs,n,o);if(a.length===0)continue;let c=new URL(Mi(a[0]));yield new kc(c,{logger:t,transformRequestInit:i.transformRequestInit,routing:s.routing})}}async function aS(r,e,t){let{signal:n,log:o}=t??{},i=r.headers.get("content-length");if(i!=null){let c=parseInt(i,10);if(c>e)throw o?.error("content-length header (%d) is greater than the limit (%d)",c,e),r.body!=null&&await r.body.cancel().catch(l=>{o?.error("error cancelling response body after content-length check - %e",l)}),new Error(`Content-Length header (${c}) is greater than the limit (${e}).`)}let s=r.body?.getReader();if(s==null)throw new Error("Response body is not readable");let a=new ne;try{for(;;){if(n?.aborted===!0)throw new Error("Response body read was aborted.");let{done:c,value:l}=await s.read();if(c)break;if(a.append(l),a.byteLength>e)throw new Error(`Response body is greater than the limit (${e}), received ${a.byteLength} bytes.`)}}finally{s.cancel().catch(c=>{o?.error("error cancelling reader - %e",c)}).finally(()=>{s.releaseLock()})}return a.subarray()}var kc=class{url;#e=0;#t=0;#r=0;#a=0;#c=new Map;log;transformRequestInit;routing;constructor(e,{logger:t,transformRequestInit:n,routing:o}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.host}`),this.routing=o}#m(e){let t=e.multihash.bytes;return mt.encode(t)}async getRawBlock(e,{signal:t,maxSize:n=cS}={}){let o=new URL(this.url.toString());if(o.pathname=`/ipfs/${e.toString()}`,o.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 i=this.#m(e),s=new AbortController,a=()=>{s.abort()};t?.addEventListener("abort",a);try{let c=this.#c.get(i);if(c==null){this.#e++;let l={signal:s.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},u=this.transformRequestInit!=null?await this.transformRequestInit(l):l,d=new Headers(u.headers);this.log(`sending request
14
14
  %s %s HTTP/1.1
15
15
  %s
16
- `,d.method??"GET",o,[...u.entries()].map(([f,h])=>`${f}: ${h}`).join(`
17
- `)),c=fetch(o.toString(),d).then(async f=>{if(this.log(`received response
16
+ `,u.method??"GET",o,[...d.entries()].map(([f,h])=>`${f}: ${h}`).join(`
17
+ `)),c=fetch(o.toString(),u).then(async f=>{if(this.log(`received response
18
18
  HTTP/1.1 %d %s
19
19
  %s
20
- `,f.status,f.statusText,[...f.headers.entries()].map(([p,g])=>`${p}: ${g}`).join(`
21
- `)),!f.ok)throw this.#t++,new Error(`Unable to fetch raw block for CID ${e} from gateway ${this.url}, received ${f.status} ${f.statusText}`);let h=await H9(f,n,{signal:i.signal,log:this.log});return this.#a++,h}),this.#c.set(s,c)}return await c}catch(c){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} - ${c.message}`))}finally{t?.removeEventListener("abort",a),this.#c.delete(s)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#a/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#a,pendingResponses:this.#c.size}}toString(){return`TrustlessGateway(${this.url})`}};var h3=class extends zs{name="trustless-gateway-session";routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Zf,this.allowLocal=t.allowLocal??Jf,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*Qf(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toFilterKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}async convertToProvider(e,t,n){if(Rt(e))return;let o=f3(Array.isArray(e)?e:[e],this.allowInsecure,this.allowLocal);if(o.length===0)return;let s=qo(o[0]);return new ma(s,{logger:this.logger,transformRequestInit:this.transformRequestInit,routing:t})}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new H("trustless-gateway:found-provider",{type:"trustless-gateway",cid:e,url:t.url.toJSON(),routing:t.routing}))}};function W9(r,e){return new h3(r,e)}var eh=class{name="trustless-gateway";allowInsecure;allowLocal;transformRequestInit;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??Zf,this.allowLocal=t.allowLocal??Jf,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of Qf(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){this.log("getting block for %c from %s",e,o.url);try{let s=await o.getRawBlock(e,t);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",e,o.url,i);continue}return s}catch(s){if(this.log.error("failed to get block for %c from %s - %e",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 W9({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var Zf=!1,Jf=!1,q9=2097152;function p3(r={}){return e=>new eh(e,r)}async function*wl(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 qk=Ln(th(),1);var tn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},rh=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},ga=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},nh=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},oh=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},sh=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},bl=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=()=>We(t)})(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(or||(or={}));var Fk=Pr("ipns:utils"),z9=C("/ipns/");var $k=0,Kk=18;function G9(r){let e;if(r.pubKey!=null)try{e=tt(r.pubKey)}catch(t){throw Fk.error(t),t}if(e!=null)return e}function Y9(r){let e=C("ipns-signature:");return Oe([e,r])}function El(r){return"signatureV1"in r?or.encode({value:C(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:C(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 vn(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 tn("Missing data or signatureV2");let t=j9(e.data),n=Vk(t.Value),o=R(t.Validity);if(e.value!=null&&e.signatureV1!=null)return Hk(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 xl(r){return Oe([z9,r.bytes])}function ya(r){let e=ke(r.slice(z9.length));if(!ih(e,$k)&&!ih(e,Kk))throw new bo("Multihash in IPNS key was not identity or sha2-256");return e}function j9(r){let e=br(r);if(e.ValidityType===0)e.ValidityType=or.ValidityType.EOL;else throw new ga("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 Vk(r){let e=R(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${G.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${G.parse(e).toV1().toString()}`}catch{}throw new oh("Value must be a valid content path starting with /")}function Hk(r){if(r.data==null)throw new sh("Record data is missing");let e=j9(r.data);if(!ee(e.Value,r.value??new Uint8Array(0)))throw new tn('Field "value" did not match between protobuf and CBOR');if(!ee(e.Validity,r.validity??new Uint8Array(0)))throw new tn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new tn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new tn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new tn('Field "ttl" did not match between protobuf and CBOR')}function ih(r,e){return r.code===e}var mQ=Pr("ipns"),gQ=300*1e9,Wk="/ipns/",yQ=Wk.length;var X9=Ln(th(),1);var ah=Pr("ipns:validator"),zk=1024*10;async function Gk(r,e){let t=vn(e),n;try{let o=Y9(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw ah.error("record signature verification failed"),new tn("Record signature verification failed");if(t.validityType===or.ValidityType.EOL){if(X9.default.fromString(t.validity).toDate().getTime()<Date.now())throw ah.error("record has expired"),new rh("record has expired")}else if(t.validityType!=null)throw ah.error("the validity type is unsupported"),new ga("The validity type is unsupported");ah("ipns record for %s is valid",t.value)}async function ch(r,e){if(e.byteLength>zk)throw new nh("The record is too large");let t=ya(r),n;ih(t,0)&&(n=sd(t));let o=vn(e),s=G9(o)??n;if(s==null)throw new bl("Could not extract public key from IPNS record or routing key");let i=xl(s.toMultihash());if(!ee(i,r))throw new bl("Embedded public key did not match routing key");await Gk(s,e)}var lh=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*wa(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let s of r){if(typeof s=="string"&&(s=new TextEncoder().encode(s)),bi(s)&&(s=s.subarray()),o+=n.decode(s,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new lh("Incoming message too long");let i=o.split(t);o=i.pop()??"";for(let a=0;a<i.length;a++)yield JSON.parse(i[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var Zs=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},Nr=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function Yk(r){return r[Symbol.asyncIterator]!=null}function jk(r){if(Yk(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var Q9=jk;var Z9=C("/ipns/");function J9(r){return ee(r.subarray(0,Z9.byteLength),Z9)}var uh=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){try{yield*Lr(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[],routing:"delegated-http-routing-v1"}))}catch(n){if(n instanceof Le)return;throw n}}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!J9(e))return;let o=ya(e),s=G.createV1(114,o),i=vn(t);await this.client.putIPNS(s,i,n)}async get(e,t){if(!J9(e))throw new Le("Not found");let n=ya(e),o=G.createV1(114,n);try{let s=await this.client.getIPNS(o,t);return El(s)}catch(s){throw s.name==="BadResponseError"?new Le("Not found"):s}}toString(){return`DelegatedRoutingV1HttpApiClientContentRouting(${this.client.url})`}},dh=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await Q9(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Le("Not found")}async*getClosestPeers(e,t={}){let n;try{n=G.decode(e)}catch{try{n=Ze(He.decode(e))}catch{n=G.createV1(Mn,dt.digest(e))}}for await(let o of this.client.getClosestPeers(n,t))yield{id:o.ID,multiaddrs:o.Addrs??[]}}toString(){return`DelegatedRoutingV1HttpApiClientPeerRouting(${this.client.url})`}};var fh={concurrentRequests:4,timeout:3e4,cacheTTL:300*1e3,cacheName:"delegated-routing-v1-cache"},hh=class{url;started;httpQueue;shutDownController;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;log;constructor(e,t){this.log=e.logger.forComponent("delegated-routing-v1-http-api-client"),this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new ds({concurrency:t.concurrentRequests??fh.concurrentRequests}),this.inFlightRequests=new Map,this.url=t.url instanceof URL?t.url:new URL(t.url),this.timeout=t.timeout??fh.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new uh(this),this.peerRouting=new dh(this),this.cacheName=t.cacheName??fh.cacheName,this.cacheTTL=t.cacheTTL??fh.cacheTTL}get[Dn](){return this.contentRouting}get[On](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&this.log("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){this.log("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe(),a=0;this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let c=new URL(`${this.url}routing/v1/providers/${e}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{accept:"application/x-ndjson, application/json;q=0.8"},signal:o},d=await this.#r(c.toString(),l);if(!d.ok){if(d.status===404)return;throw d.status===422?new Zs("Request does not conform to schema or semantic constraints"):new Nr(`Unexpected status code: ${d.status}`)}let u=d.headers.get("Content-Type");if(u==null)throw new Nr("No Content-Type header received");if(d.body==null){if(u!=="application/x-ndjson")throw new Nr("Routing response had no body");return}if(u.startsWith("application/json")){let h=(await d.json()).Providers??[];for(let p of h){let g=this.#e(p);g!=null&&(a++,yield g)}}else if(u.includes("application/x-ndjson"))for await(let f of wa(wl(d.body))){let h=this.#e(f);h!=null&&(a++,yield h)}else throw new Nr(`Unsupported Content-Type: ${u}`)}finally{o.clear(),i.resolve(),this.log("getProviders finished found %d providers for %c",a,e)}}async*getPeers(e,t={}){this.log("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=new URL(`${this.url}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)return;if(l.status===422)throw new Zs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new Nr("Routing response had no body");if(l.headers.get("Content-Type")?.startsWith("application/json")){let f=(await l.json()).Peers??[];for(let h of f){let p=this.#e(h);p!=null&&(yield p)}}else for await(let u of wa(wl(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){this.log.error("getPeers errored - %e",a)}finally{o.clear(),i.resolve(),this.log("getPeers finished: %c",e)}}async*getClosestPeers(e,t={}){let n;if(Rt(e))n=e.toCID().toString();else if(G.asCID(e)===e||e instanceof G)n=e.toV1().toString();else throw new A("Key must be CID or PeerId");this.log("getClosestPeers starts: %s",n);let o=AbortSignal.timeout(this.timeout),s=le([this.shutDownController.signal,o,t.signal]);let i=fe(),a=fe();this.httpQueue.add(async()=>(i.resolve(),a.promise));try{await i.promise;let c=new URL(`${this.url}routing/v1/dht/closest/peers/${n}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{Accept:"application/x-ndjson"},signal:s},d=await this.#r(c.toString(),l);if(d.status===404)return;if(d.status===422)throw new Zs("Request does not conform to schema or semantic constraints");if(d.body==null)throw new Nr("Routing response had no body");if(d.headers.get("Content-Type")?.startsWith("application/json")){let h=(await d.json()).Peers??[];for(let p of h){let g=this.#e(p);g!=null&&(yield g)}}else for await(let f of wa(wl(d.body))){let h=this.#e(f);h!=null&&(yield h)}}catch(c){this.log.error("getClosestPeers errored - %e",c)}finally{s.clear(),a.resolve(),this.log("getClosestPeers finished: %s",n)}}async getIPNS(e,t={}){this.log("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.url}routing/v1/ipns/${e}`;try{await s.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(this.log("getIPNS GET %s %d",a,l.status),l.status===404)throw new Le("No matching records found");if(l.status===422)throw new Zs("Request does not conform to schema or semantic constraints");if(!l.ok)throw new Nr(`Unexpected status code: ${l.status}`);let d=l.headers.get("Content-Type");if(d==null||!d.includes("application/vnd.ipfs.ipns-record"))throw new Le("No matching records found");if(l.body==null)throw new Nr("GET ipns response had no body");let u=await l.arrayBuffer(),f=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await ch(xl(e.multihash),f),vn(f)}catch(c){throw this.log.error("getIPNS GET %s error - %e",a,c),c}finally{o.clear(),i.resolve(),this.log("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){this.log("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=le([this.shutDownController.signal,o,n.signal]);let i=fe(),a=fe();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.url}routing/v1/ipns/${e}`;try{await i.promise;let l=El(t),d={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s},u=await this.#r(c,d);if(this.log("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new Nr("PUT ipns response had status other than 200")}catch(l){throw this.log.error("putIPNS PUT %s error - %e",c,l.stack),l}finally{s.clear(),a.resolve(),this.log("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(q)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Me(e.ID),Addrs:n,Protocols:t}}catch(t){this.log.error("could not conform record to peer schema - %e",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return this.log("returning cached response for %s",o),this.logResponse(c),c;this.log("evicting cached response for %s",o),await this.cache?.delete(e)}else this.cache!=null&&this.log("cache miss for %s",o)}let s=this.inFlightRequests.get(o);if(s!=null){let c=await s;return this.log("deduplicating outgoing request for %s",o),c.clone()}this.log("outgoing request:"),this.logRequest(e,t);let i=fetch(e,t).then(async c=>{if(this.log("incoming response:"),this.logResponse(c),this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,d=new Headers(c.headers);d.set("x-cache-expires",l.toString());let u=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:d});await this.cache.put(e,u)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,i),await i}toString(){return`DefaultDelegatedRoutingV1HttpApiClient(${this.url})`}logRequest(e,t){let n=new Headers(t.headers);this.log("%s %s HTTP/1.1",t.method??"GET",e);for(let[o,s]of n.entries())this.log("%s: %s",o,s)}logResponse(e){this.log("HTTP/1.1 %d %s",e.status,e.statusText);for(let[t,n]of e.headers.entries())this.log("%s: %s",t,n)}};function ew(r){return e=>new hh(e,r)}function g3(r){return{url:"https://delegated-ipfs.dev",filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var tw="[a-fA-F\\d:]",Wo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${tw})|(?<=${tw})(?=\\s|$))`:"",rn="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",st="[a-fA-F\\d]{1,4}",ph=`
20
+ `,f.status,f.statusText,[...f.headers.entries()].map(([p,y])=>`${p}: ${y}`).join(`
21
+ `)),!f.ok)throw this.#t++,new Error(`Unable to fetch raw block for CID ${e} from gateway ${this.url}, received ${f.status} ${f.statusText}`);let h=await aS(f,n,{signal:s.signal,log:this.log});return this.#a++,h}),this.#c.set(i,c)}return await c}catch(c){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} - ${c.message}`))}finally{t?.removeEventListener("abort",a),this.#c.delete(i)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#a/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#a,pendingResponses:this.#c.size}}toString(){return`TrustlessGateway(${this.url})`}};var G6=class extends Gs{name="trustless-gateway-session";routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??up,this.allowLocal=t.allowLocal??dp,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*lp(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toFilterKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}async convertToProvider(e,t,n){if(Gt(e))return;let o=W6(Array.isArray(e)?e:[e],this.allowInsecure,this.allowLocal);if(o.length===0)return;let i=Mi(o[0]);return new kc(i,{logger:this.logger,transformRequestInit:this.transformRequestInit,routing:t})}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new K("trustless-gateway:found-provider",{type:"trustless-gateway",cid:e,url:t.url.toJSON(),routing:t.routing}))}};function lS(r,e){return new G6(r,e)}var fp=class{name="trustless-gateway";allowInsecure;allowLocal;transformRequestInit;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??up,this.allowLocal=t.allowLocal??dp,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of lp(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){this.log("getting block for %c from %s",e,o.url);try{let i=await o.getRawBlock(e,t);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(i)}catch(s){this.log.error("failed to validate block for %c from %s - %e",e,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s - %e",e,o.url,i),i instanceof Error?n.push(i):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 lS({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var up=!1,dp=!1,cS=2097152;function Y6(r={}){return e=>new fp(e,r)}async function*Gu(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 FB=yo(hp(),1);var On=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},pp=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},Rc=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},mp=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},gp=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},yp=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},Yu=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var X6=new Float32Array([-0]),Ui=new Uint8Array(X6.buffer);function uS(r,e,t){X6[0]=r,e[t]=Ui[0],e[t+1]=Ui[1],e[t+2]=Ui[2],e[t+3]=Ui[3]}function dS(r,e){return Ui[0]=r[e],Ui[1]=r[e+1],Ui[2]=r[e+2],Ui[3]=r[e+3],X6[0]}var Q6=new Float64Array([-0]),rr=new Uint8Array(Q6.buffer);function fS(r,e,t){Q6[0]=r,e[t]=rr[0],e[t+1]=rr[1],e[t+2]=rr[2],e[t+3]=rr[3],e[t+4]=rr[4],e[t+5]=rr[5],e[t+6]=rr[6],e[t+7]=rr[7]}function hS(r,e){return rr[0]=r[e],rr[1]=r[e+1],rr[2]=r[e+2],rr[3]=r[e+3],rr[4]=r[e+4],rr[5]=r[e+5],rr[6]=r[e+6],rr[7]=r[e+7],Q6[0]}var _B=BigInt(Number.MAX_SAFE_INTEGER),IB=BigInt(Number.MIN_SAFE_INTEGER),Gr=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 ra;if(e<_B&&e>IB)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>pS&&(o=0n,++n>pS&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return ra;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):ra}},ra=new Gr(0,0);ra.toBigInt=function(){return 0n};ra.zzEncode=ra.zzDecode=function(){return this};ra.length=function(){return 1};var pS=4294967296n;function mS(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 gS(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(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,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function Z6(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,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 Bn(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function wp(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var J6=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,Bn(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 Bn(this,4);return wp(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Bn(this,4);return wp(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Bn(this,4);let e=dS(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Bn(this,4);let e=hS(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 Bn(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return gS(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Bn(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Bn(this);while((this.buf[this.pos++]&128)!==0);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 Gr(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 Bn(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 Bn(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 Bn(this,8);let e=wp(this.buf,this.pos+=4),t=wp(this.buf,this.pos+=4);return new Gr(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=Ts(this.buf,this.pos);return this.pos+=ye(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 e8(r){return new J6(r instanceof Uint8Array?r:r.subarray())}function t8(r,e,t){let n=e8(r);return e.decode(n,void 0,t)}function r8(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Re(s);o+s>e&&(n=Re(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var na=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function n8(){}var i8=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},CB=r8();function kB(r){return globalThis.Buffer!=null?Re(r):CB(r)}var Xu=class{len;head;tail;states;constructor(){this.len=0,this.head=new na(n8,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new na(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new s8((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(bp,10,Gr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Gr.fromBigInt(e);return this._push(bp,t.length(),t)}uint64Number(e){return this._push(Xn,ye(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=Gr.fromBigInt(e).zzEncode();return this._push(bp,t.length(),t)}sint64Number(e){let t=Gr.fromNumber(e).zzEncode();return this._push(bp,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(o8,1,e?1:0)}fixed32(e){return this._push(ju,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Gr.fromBigInt(e);return this._push(ju,4,t.lo)._push(ju,4,t.hi)}fixed64Number(e){let t=Gr.fromNumber(e);return this._push(ju,4,t.lo)._push(ju,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(uS,4,e)}double(e){return this._push(fS,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(o8,1,0):this.uint32(t)._push(PB,t,e)}string(e){let t=mS(e);return t!==0?this.uint32(t)._push(Z6,t,e):this._push(o8,1,0)}fork(){return this.states=new i8(this),this.head=this.tail=new na(n8,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 na(n8,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=kB(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function o8(r,e,t){e[t]=r&255}function RB(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var s8=class extends na{next;constructor(e,t){super(RB,e,t),this.next=void 0}};function bp(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 ju(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 PB(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Xu.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(LB,e,r),this},Xu.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(DB,e,r),this});function LB(r,e,t){e.set(r,t)}function DB(r,e,t){r.length<40?Z6(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(R(r),t)}function a8(){return new Xu}function c8(r,e){let t=a8();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Pc;(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"})(Pc||(Pc={}));function xp(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function l8(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let a=e(i);s.int32(a)},n=function(i){let s=i.int32();return e(s)};return xp("enum",Pc.VARINT,t,n)}function u8(r,e){return xp("message",Pc.LENGTH_DELIMITED,r,e)}var Er;(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=()=>l8(t)})(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=u8((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.value!=null&&(i.uint32(10),i.bytes(o.value)),o.signatureV1!=null&&(i.uint32(18),i.bytes(o.signatureV1)),o.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(o.validityType,i)),o.validity!=null&&(i.uint32(34),i.bytes(o.validity)),o.sequence!=null&&(i.uint32(40),i.uint64(o.sequence)),o.ttl!=null&&(i.uint32(48),i.uint64(o.ttl)),o.pubKey!=null&&(i.uint32(58),i.bytes(o.pubKey)),o.signatureV2!=null&&(i.uint32(66),i.bytes(o.signatureV2)),o.data!=null&&(i.uint32(74),i.bytes(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;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=>c8(o,r.codec()),r.decode=(o,i)=>t8(o,r.codec(),i)})(Er||(Er={}));var NB=rn("ipns:utils"),wS=R("/ipns/");var OB=0,BB=18;function bS(r){let e;if(r.pubKey!=null)try{e=pt(r.pubKey)}catch(t){throw NB.error(t),t}if(e!=null)return e}function xS(r){let e=R("ipns-signature:");return je([e,r])}function Qu(r){return"signatureV1"in r?Er.encode({value:R(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:R(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):Er.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function so(r){let e=Er.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 On("Missing data or signatureV2");let t=ES(e.data),n=MB(t.Value),o=N(t.Validity);if(e.value!=null&&e.signatureV1!=null)return UB(e),{value:n,validityType:Er.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:Er.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 Zu(r){return je([wS,r.bytes])}function Lc(r){let e=He(r.slice(wS.length));if(!Ep(e,OB)&&!Ep(e,BB))throw new si("Multihash in IPNS key was not identity or sha2-256");return e}function ES(r){let e=Bo(r);if(e.ValidityType===0)e.ValidityType=Er.ValidityType.EOL;else throw new Rc("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 MB(r){let e=N(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${J.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${J.parse(e).toV1().toString()}`}catch{}throw new gp("Value must be a valid content path starting with /")}function UB(r){if(r.data==null)throw new yp("Record data is missing");let e=ES(r.data);if(!se(e.Value,r.value??new Uint8Array(0)))throw new On('Field "value" did not match between protobuf and CBOR');if(!se(e.Validity,r.validity??new Uint8Array(0)))throw new On('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new On('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new On('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new On('Field "ttl" did not match between protobuf and CBOR')}function Ep(r,e){return r.code===e}var Zse=rn("ipns"),Jse=300*1e9,$B="/ipns/",eae=$B.length;var vS=yo(hp(),1);var vp=rn("ipns:validator"),VB=1024*10;async function KB(r,e){let t=so(e),n;try{let o=xS(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw vp.error("record signature verification failed"),new On("Record signature verification failed");if(t.validityType===Er.ValidityType.EOL){if(vS.default.fromString(t.validity).toDate().getTime()<Date.now())throw vp.error("record has expired"),new pp("record has expired")}else if(t.validityType!=null)throw vp.error("the validity type is unsupported"),new Rc("The validity type is unsupported");vp("ipns record for %s is valid",t.value)}async function Sp(r,e){if(e.byteLength>VB)throw new mp("The record is too large");let t=Lc(r),n;Ep(t,0)&&(n=Wf(t));let o=so(e),i=bS(o)??n;if(i==null)throw new Yu("Could not extract public key from IPNS record or routing key");let s=Zu(i.toMultihash());if(!se(s,r))throw new Yu("Embedded public key did not match routing key");await KB(i,e)}var Ap=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Dc(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let i of r){if(typeof i=="string"&&(i=new TextEncoder().encode(i)),ka(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new Ap("Incoming message too long");let s=o.split(t);o=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var oa=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},un=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function HB(r){return r[Symbol.asyncIterator]!=null}function qB(r){if(HB(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var SS=qB;var AS=R("/ipns/");function TS(r){return se(r.subarray(0,AS.byteLength),AS)}var Tp=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){try{yield*ln(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[],routing:"delegated-http-routing-v1"}))}catch(n){if(n instanceof We)return;throw n}}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!TS(e))return;let o=Lc(e),i=J.createV1(114,o),s=so(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!TS(e))throw new We("Not found");let n=Lc(e),o=J.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return Qu(i)}catch(i){throw i.name==="BadResponseError"?new We("Not found"):i}}toString(){return`DelegatedRoutingV1HttpApiClientContentRouting(${this.client.url})`}},_p=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await SS(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new We("Not found")}async*getClosestPeers(e,t={}){let n;try{n=J.decode(e)}catch{try{n=dt(nt.decode(e))}catch{n=J.createV1(Eo,Tt.digest(e))}}for await(let o of this.client.getClosestPeers(n,t))yield{id:o.ID,multiaddrs:o.Addrs??[]}}toString(){return`DelegatedRoutingV1HttpApiClientPeerRouting(${this.client.url})`}};var Ip={concurrentRequests:4,timeout:3e4,cacheTTL:300*1e3,cacheName:"delegated-routing-v1-cache"},Cp=class{url;started;httpQueue;shutDownController;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;log;constructor(e,t){this.log=e.logger.forComponent("delegated-routing-v1-http-api-client"),this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new ls({concurrency:t.concurrentRequests??Ip.concurrentRequests}),this.inFlightRequests=new Map,this.url=t.url instanceof URL?t.url:new URL(t.url),this.timeout=t.timeout??Ip.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new Tp(this),this.peerRouting=new _p(this),this.cacheName=t.cacheName??Ip.cacheName,this.cacheTTL=t.cacheTTL??Ip.cacheTTL}get[wo](){return this.contentRouting}get[xo](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&this.log("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){this.log("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=we([this.shutDownController.signal,n,t.signal]);let i=Se(),s=Se(),a=0;this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let c=new URL(`${this.url}routing/v1/providers/${e}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{accept:"application/x-ndjson, application/json;q=0.8"},signal:o},u=await this.#r(c.toString(),l);if(!u.ok){if(u.status===404)return;throw u.status===422?new oa("Request does not conform to schema or semantic constraints"):new un(`Unexpected status code: ${u.status}`)}let d=u.headers.get("Content-Type");if(d==null)throw new un("No Content-Type header received");if(u.body==null){if(d!=="application/x-ndjson")throw new un("Routing response had no body");return}if(d.startsWith("application/json")){let h=(await u.json()).Providers??[];for(let p of h){let y=this.#e(p);y!=null&&(a++,yield y)}}else if(d.includes("application/x-ndjson"))for await(let f of Dc(Gu(u.body))){let h=this.#e(f);h!=null&&(a++,yield h)}else throw new un(`Unsupported Content-Type: ${d}`)}finally{o.clear(),s.resolve(),this.log("getProviders finished found %d providers for %c",a,e)}}async*getPeers(e,t={}){this.log("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=we([this.shutDownController.signal,n,t.signal]);let i=Se(),s=Se();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.url}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)return;if(l.status===422)throw new oa("Request does not conform to schema or semantic constraints");if(l.body==null)throw new un("Routing response had no body");if(l.headers.get("Content-Type")?.startsWith("application/json")){let f=(await l.json()).Peers??[];for(let h of f){let p=this.#e(h);p!=null&&(yield p)}}else for await(let d of Dc(Gu(l.body))){let f=this.#e(d);f!=null&&(yield f)}}catch(a){this.log.error("getPeers errored - %e",a)}finally{o.clear(),s.resolve(),this.log("getPeers finished: %c",e)}}async*getClosestPeers(e,t={}){let n;if(Gt(e))n=e.toCID().toString();else if(J.asCID(e)===e||e instanceof J)n=e.toV1().toString();else throw new _("Key must be CID or PeerId");this.log("getClosestPeers starts: %s",n);let o=AbortSignal.timeout(this.timeout),i=we([this.shutDownController.signal,o,t.signal]);let s=Se(),a=Se();this.httpQueue.add(async()=>(s.resolve(),a.promise));try{await s.promise;let c=new URL(`${this.url}routing/v1/dht/closest/peers/${n}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{Accept:"application/x-ndjson"},signal:i},u=await this.#r(c.toString(),l);if(u.status===404)return;if(u.status===422)throw new oa("Request does not conform to schema or semantic constraints");if(u.body==null)throw new un("Routing response had no body");if(u.headers.get("Content-Type")?.startsWith("application/json")){let h=(await u.json()).Peers??[];for(let p of h){let y=this.#e(p);y!=null&&(yield y)}}else for await(let f of Dc(Gu(u.body))){let h=this.#e(f);h!=null&&(yield h)}}catch(c){this.log.error("getClosestPeers errored - %e",c)}finally{i.clear(),a.resolve(),this.log("getClosestPeers finished: %s",n)}}async getIPNS(e,t={}){this.log("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=we([this.shutDownController.signal,n,t.signal]);let i=Se(),s=Se();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.url}routing/v1/ipns/${e}`;try{await i.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(this.log("getIPNS GET %s %d",a,l.status),l.status===404)throw new We("No matching records found");if(l.status===422)throw new oa("Request does not conform to schema or semantic constraints");if(!l.ok)throw new un(`Unexpected status code: ${l.status}`);let u=l.headers.get("Content-Type");if(u==null||!u.includes("application/vnd.ipfs.ipns-record"))throw new We("No matching records found");if(l.body==null)throw new un("GET ipns response had no body");let d=await l.arrayBuffer(),f=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await Sp(Zu(e.multihash),f),so(f)}catch(c){throw this.log.error("getIPNS GET %s error - %e",a,c),c}finally{o.clear(),s.resolve(),this.log("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){this.log("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=we([this.shutDownController.signal,o,n.signal]);let s=Se(),a=Se();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.url}routing/v1/ipns/${e}`;try{await s.promise;let l=Qu(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},d=await this.#r(c,u);if(this.log("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new un("PUT ipns response had status other than 200")}catch(l){throw this.log.error("putIPNS PUT %s error - %e",c,l.stack),l}finally{i.clear(),a.resolve(),this.log("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(j)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Xe(e.ID),Addrs:n,Protocols:t}}catch(t){this.log.error("could not conform record to peer schema - %e",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return this.log("returning cached response for %s",o),this.logResponse(c),c;this.log("evicting cached response for %s",o),await this.cache?.delete(e)}else this.cache!=null&&this.log("cache miss for %s",o)}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return this.log("deduplicating outgoing request for %s",o),c.clone()}this.log("outgoing request:"),this.logRequest(e,t);let s=fetch(e,t).then(async c=>{if(this.log("incoming response:"),this.logResponse(c),this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,u=new Headers(c.headers);u.set("x-cache-expires",l.toString());let d=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:u});await this.cache.put(e,d)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}toString(){return`DefaultDelegatedRoutingV1HttpApiClient(${this.url})`}logRequest(e,t){let n=new Headers(t.headers);this.log("%s %s HTTP/1.1",t.method??"GET",e);for(let[o,i]of n.entries())this.log("%s: %s",o,i)}logResponse(e){this.log("HTTP/1.1 %d %s",e.status,e.statusText);for(let[t,n]of e.headers.entries())this.log("%s: %s",t,n)}};function _S(r){return e=>new Cp(e,r)}function d8(r){return{url:"https://delegated-ipfs.dev",filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var IS="[a-fA-F\\d:]",Fi=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${IS})|(?<=${IS})(?=\\s|$))`:"",Mn="(?: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}",wt="[a-fA-F\\d]{1,4}",kp=`
22
22
  (?:
23
- (?:${st}:){7}(?:${st}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
24
- (?:${st}:){6}(?:${rn}|:${st}|:)| // 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
25
- (?:${st}:){5}(?::${rn}|(?::${st}){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
26
- (?:${st}:){4}(?:(?::${st}){0,1}:${rn}|(?::${st}){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
27
- (?:${st}:){3}(?:(?::${st}){0,2}:${rn}|(?::${st}){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
28
- (?:${st}:){2}(?:(?::${st}){0,3}:${rn}|(?::${st}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
29
- (?:${st}:){1}(?:(?::${st}){0,4}:${rn}|(?::${st}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
30
- (?::(?:(?::${st}){0,5}:${rn}|(?::${st}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
23
+ (?:${wt}:){7}(?:${wt}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
24
+ (?:${wt}:){6}(?:${Mn}|:${wt}|:)| // 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
25
+ (?:${wt}:){5}(?::${Mn}|(?::${wt}){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
26
+ (?:${wt}:){4}(?:(?::${wt}){0,1}:${Mn}|(?::${wt}){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
27
+ (?:${wt}:){3}(?:(?::${wt}){0,2}:${Mn}|(?::${wt}){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
28
+ (?:${wt}:){2}(?:(?::${wt}){0,3}:${Mn}|(?::${wt}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
29
+ (?:${wt}:){1}(?:(?::${wt}){0,4}:${Mn}|(?::${wt}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
30
+ (?::(?:(?::${wt}){0,5}:${Mn}|(?::${wt}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
31
31
  )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
32
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),Xk=new RegExp(`(?:^${rn}$)|(?:^${ph}$)`),Qk=new RegExp(`^${rn}$`),Zk=new RegExp(`^${ph}$`),y3=r=>r&&r.exact?Xk:new RegExp(`(?:${Wo(r)}${rn}${Wo(r)})|(?:${Wo(r)}${ph}${Wo(r)})`,"g");y3.v4=r=>r&&r.exact?Qk:new RegExp(`${Wo(r)}${rn}${Wo(r)}`,"g");y3.v6=r=>r&&r.exact?Zk:new RegExp(`${Wo(r)}${ph}${Wo(r)}`,"g");var w3=y3;function b3(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function rw(){return!1}var{toString:Jk}=Object.prototype;function E3(r){return Jk.call(r)==="[object RegExp]"}var nw={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function x3(r,e={}){if(!E3(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(nw).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?nw[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function v3(r,e,{timeout:t}={}){try{return b3(()=>x3(r).test(e),{timeout:t})()}catch(n){if(rw(n))return!1;throw n}}var eP=15,tP=45,ow={timeout:400};function S3(r){return r.length>tP?!1:v3(w3.v6({exact:!0}),r,ow)}function sw(r){return r.length>eP?!1:v3(w3.v4({exact:!0}),r,ow)}var iw={http:"80",https:"443",ws:"80",wss:"443"},rP=["http","https","ws","wss"];function mh(r,e){e=e??{};let t=e.defaultDnsType??"dns",{scheme:n,hostname:o,port:s,path:i}=nP(r),a=[oP(o,t),sP(s,n),iP(n)];i!=null&&a.push(aP(i));let c="/"+a.filter(l=>!!l).reduce((l,d)=>l.concat(d),[]).join("/");return q(c)}function nP(r){let[e]=r.split(":");rP.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o,pathname:s,search:i}=new URL(r);if(o==null||o===""){let c=cP(e);c!=null&&(o=c),c==null&&t==="http:"&&(o="80")}let a;return s!=null&&s!==""&&s!=="/"&&(s.startsWith("/")&&(s=s.substring(1)),a=s),i!=null&&i!==""&&(a=a??"",a+=i),{scheme:e,hostname:n,port:o,path:a}}function oP(r,e){if(!(r==null||r==="")){if(sw(r))return["ip4",r];if(S3(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(S3(t))return["ip6",t]}return[e,r]}}function sP(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function iP(r){if(r.match(/^tcp$|^udp$/)==null)return r==="https"?["/tls/http"]:r==="wss"?["/tls/ws"]:[r]}function aP(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function cP(r){if(!(r==null||r===""||iw[r]==null))return iw[r]}var lP=["https://trustless-gateway.link","https://4everland.io"],uP=2336;function dP(r){return r=r.toString(),{id:Jr(G.createV1(uP,dt.digest(C(r)))),multiaddrs:[mh(r)]}}function fP(r){return new URL(R(r.id.toMultihash().digest))}var A3=class{gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??lP).map(t=>dP(t)),this.shuffle=e.shuffle??!0}async*findProviders(e,t){yield*(this.shuffle?this.gateways.toSorted(()=>Math.random()>.5?1:-1):this.gateways).map(n=>({...n,protocols:["transport-ipfs-gateway-http"],routing:"http-gateway-routing"}))}toString(){return`HTTPGatewayRouter([${this.gateways.map(e=>fP(e)).join(", ")}])`}};function I3(r={}){return new A3(r)}var T3=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(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)}toString(){return"Libp2pRouter()"}};function _3(r){return new T3(r)}function hP(r){return r[Symbol.asyncIterator]!=null}function pP(r){if(hP(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 no=pP;function mP(r){return typeof r?.then=="function"}var vl=class extends Jn{data;constructor(){super(),this.data=new Map}put(e,t,n){n?.signal?.throwIfAborted();let o;if(t instanceof Uint8Array)o=[t];else{let s=no(t);if(mP(s))return s.then(i=>this._put(e,i,n));o=s}return this._put(e,o,n)}_put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(ut.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(ut.encode(e.multihash.bytes));if(n==null)throw new Rr;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(ut.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(ut.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:G.createV1(Mn,ke(ut.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var sJ=Pr("blockstore:core:tiered");var aw="SHARDING";function yP(r){return r[Symbol.asyncIterator]!=null}function wP(r,e){return yP(r)?(async function*(){yield*(await no(r)).sort(e)})():(function*(){yield*no(r).sort(e)})()}var gh=wP;var oo=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 er(this.putMany(e,n)),e=[],await er(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=Zr(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Zr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>gh(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=Zr(n,()=>o++>=s)}return e.limit!=null&&(n=Ho(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Zr(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Zr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>gh(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=Zr(n,()=>s++>=o)}return e.limit!=null&&(n=Ho(n,e.limit)),n}};var Js=class extends oo{data;constructor(){super(),this.data=new Map}put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(e.toString(),t),e}get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(e.toString());if(n==null)throw new Rr;return n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(e.toString())}delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(e.toString())}*_all(e,t){t?.signal?.throwIfAborted();for(let[n,o]of this.data.entries())yield{key:new Fe(n),value:o},t?.signal?.throwIfAborted()}*_allKeys(e,t){t?.signal?.throwIfAborted();for(let n of this.data.keys())yield new Fe(n),t?.signal?.throwIfAborted()}};var BJ=new Fe(aw);var QJ=Pr("datastore:core:tiered");async function lw(r){if(r.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new A("Private network is enforced, but no protector was provided");return r}var Sl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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:ae(0),payloadType:ae(0),payload:ae(0),signature:ae(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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Sl||(Sl={}));var yh=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var vr=class r{static createFromProtobuf=e=>{let t=Sl.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,n)=>{if(t==null)throw new Error("Missing private key");let o=e.domain,s=e.codec,i=e.marshal(),a=uw(o,s,i),c=await t.sign(a.subarray(),n);return new r({publicKey:t.publicKey,payloadType:s,payload:i,signature:c})};static openAndCertify=async(e,t,n)=>{let o=r.createFromProtobuf(e);if(!await o.validate(t,n))throw new yh("Envelope signature is not valid for the given domain");return o};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=Sl.encode({publicKey:ft(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return e==null?!1:ee(this.marshal(),e.marshal())}async validate(e,t){let n=uw(e,this.payloadType,this.payload);return this.publicKey.verify(n.subarray(),this.signature,t)}},uw=(r,e,t)=>{let n=C(r),o=Mt(n.byteLength),s=Mt(e.length),i=Mt(t.length);return new X(o,n,s,e,i,t)};var dw="libp2p-peer-record",fw=Uint8Array.from([3,1]);var Al;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=ne((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:ae(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=>re(s,n.codec()),n.decode=(s,i)=>te(s,n.codec(),i)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((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:ae(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 Ne('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=>re(n,r.codec()),r.decode=(n,o)=>te(n,r.codec(),o)})(Al||(Al={}));function hw(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 Qt=class r{static createFromProtobuf=e=>{let t=Al.decode(e),n=Ze(ke(t.peerId)),o=(t.addresses??[]).map(i=>q(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=dw;static CODEC=fw;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=Al.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||!hw(this.multiaddrs,e.multiaddrs))}};var so;(function(r){let e;(function(o){let s;o.codec=()=>(s==null&&(s=ne((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:ae(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=>re(i,o.codec()),o.decode=(i,a)=>te(i,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let s;o.codec=()=>(s==null&&(s=ne((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),bh.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=bh.codec().decode(i,i.uint32(),{limits:c.limits?.value});break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>re(i,o.codec()),o.decode=(i,a)=>te(i,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.addresses!=null)for(let a of o.addresses)s.uint32(10),wh.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);o.updated!=null&&(s.uint32(64),s.uint64Number(o.updated)),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 Ne('Decode error - map field "addresses" had too many elements');a.addresses.push(wh.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 Ne('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 Ac('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 Ac('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}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(so||(so={}));var wh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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)),t.observed!=null&&(n.uint32(24),n.uint64Number(t.observed)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={multiaddr:ae(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}case 3:{s.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(wh||(wh={}));var bh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(bh||(bh={}));function bP(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;r.type==="RSA"&&(t=r.toMultihash());let n=tt(e.publicKey,t);return xn(n)}function pw(r,e,t){let n=so.decode(e);return ba(r,n,t)}function ba(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[s,i]of e.tags.entries())i.expiry!=null&&i.expiry<o||n.set(s,i);return{...e,id:bP(r,e),addresses:e.addresses.filter(({observed:s})=>s!=null&&s>Date.now()-t).map(({multiaddr:s,isCertified:i})=>({multiaddr:q(s),isCertified:i??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function mw(r,e){return EP(r.addresses,e.addresses)&&xP(r.protocols,e.protocols)&&vP(r.publicKey,e.publicKey)&&SP(r.peerRecordEnvelope,e.peerRecordEnvelope)&&AP(r.metadata,e.metadata)&&IP(r.tags,e.tags)}function EP(r,e){return yw(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!ee(t.multiaddr,n.multiaddr)))}function xP(r,e){return yw(r,e,(t,n)=>t===n)}function vP(r,e){return gw(r,e)}function SP(r,e){return gw(r,e)}function AP(r,e){return ww(r,e,(t,n)=>ee(t,n))}function IP(r,e){return ww(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function gw(r,e){return r==null&&e==null?!0:r!=null&&e!=null?ee(r,e):!1}function yw(r,e,t){if(r.length!==e.length)return!1;for(let n=0;n<r.length;n++)if(!t(r[n],e[n]))return!1;return!0}function ww(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let s=e.get(n);if(s==null||!t(o,s))return!1}return!0}var C3="/peers/";function Il(r){if(!Rt(r)||r.type==null)throw new A("Invalid PeerId");let e=r.toCID().toString();return new Fe(`${C3}${e}`)}async function bw(r,e,t,n,o){let s=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=q(i.multiaddr)),!yn(i.multiaddr))throw new A("Multiaddr was invalid");if(!await e(r,i.multiaddr,o))continue;let a=i.isCertified??!1,c=i.multiaddr.toString(),l=s.get(c);l!=null?i.isCertified=l.isCertified||a:s.set(c,{multiaddr:i.multiaddr,isCertified:a})}return[...s.values()].sort((i,a)=>i.multiaddr.toString().localeCompare(a.multiaddr.toString())).map(({isCertified:i,multiaddr:a})=>{let c=a.getComponents().find(l=>l.code===421)?.value;return r.equals(c)&&(a=a.decapsulate(q(`/p2p/${r}`))),{isCertified:i,multiaddr:a.bytes}})}async function xh(r,e,t,n){if(e==null)throw new A("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new A("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new A("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=Eh(f,{validate:Ew})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Eh(f,{validate:xw,map:vw})}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=Eh([...a.entries()],{validate:Ew})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,g]of f)g==null?h.delete(p):h.set(p,g);c=Eh([...h.entries()],{validate:xw,map:vw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d;o?.id.publicKey!=null?d=ft(o.id.publicKey):e.publicKey!=null?d=ft(e.publicKey):r.publicKey!=null&&(d=ft(r.publicKey));let u={addresses:await bw(r,n.addressFilter??(async()=>!0),s,n.existingPeer?.peerPB.addresses,n),protocols:[...i.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:d,peerRecordEnvelope:l};return u.addresses.forEach(f=>{f.observed=n.existingPeer?.peerPB.addresses?.find(h=>ee(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete u.publicKey,u}function Eh(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 Ew(r,e){if(typeof r!="string")throw new A("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new A("Metadata value must be a Uint8Array")}function xw(r,e){if(typeof r!="string")throw new A("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new A("Tag value must be an integer");if(e.value<0||e.value>100)throw new A("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new A("Tag ttl must be an integer");if(e.ttl<0)throw new A("Tag ttl must be between greater than 0")}}function vw(r,e){let t;e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl)));let n={value:e.value??0};return t!=null&&(n.expiry=t),n}function Sw(r){let e=r.toString().split("/")[2],t=G.parse(e,ut);return Jr(t)}function k3(r,e,t){let n=Sw(r);return pw(n,e,t)}function TP(r,e){return{prefix:C3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(k3(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(k3(n.key,n.value,e),k3(o.key,o.value,e)))}}var vh=class{peerId;datastore;locks;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.locks=eo({name:"libp2p_peer_store_locks",metrics:e.metrics}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}getLock(e){let t=this.locks.get(e);return t==null&&(t={refs:0,lock:al({name:e.toString(),singleProcess:!0})},this.locks.set(e,t)),t.refs++,t}maybeRemoveLock(e,t){t.refs--,t.refs===0&&(t.lock.finalize(),this.locks.delete(e))}async getReadLock(e,t){let n=this.getLock(e);try{let o=await n.lock.readLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async getWriteLock(e,t){let n=this.getLock(e);try{let o=await n.lock.writeLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async has(e,t){try{return await this.load(e,t),!0}catch(n){if(n.name!=="NotFoundError")throw n}return!1}async delete(e,t){this.peerId.equals(e)||await this.datastore.delete(Il(e),t)}async load(e,t){let n=Il(e),o=await this.datastore.get(n,t),s=so.decode(o);if(this.#r(e,s))throw await this.datastore.delete(n,t),new Le;return ba(e,s,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t,n){let o=await this.#e(e,n),s=await xh(e,t,"patch",{...n,addressFilter:this.addressFilter});return this.#t(e,s,o)}async patch(e,t,n){let o=await this.#e(e,n),s=await xh(e,t,"patch",{...n,addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,o)}async merge(e,t,n){let o=await this.#e(e,n),s=await xh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(TP(e??{},this.maxAddressAge),e)){let o=Sw(t);if(o.equals(this.peerId))continue;let s=so.decode(n);if(this.#r(o,s)){await this.datastore.delete(t,e);continue}yield ba(o,s,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e,t){try{let n=Il(e),o=await this.datastore.get(n,t),s=so.decode(o);if(this.#r(e,s))throw await this.datastore.delete(n,t),new Le;return{peerPB:s,peer:ba(e,s,this.maxAddressAge)}}catch(n){n.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",n)}}async#t(e,t,n,o){t.updated=Date.now();let s=so.encode(t);return await this.datastore.put(Il(e),s,o),{peer:ba(e,t,this.maxAddressAge),previous:n?.peer,updated:n==null||!mw(t,n.peerPB)}}#r(e,t){if(t.updated==null)return!0;if(this.peerId.equals(e))return!1;let n=t.updated<Date.now()-this.maxPeerAge,o=Date.now()-this.maxAddressAge,s=t.addresses.filter(i=>i.observed!=null&&i.observed>o);return n&&s.length===0}};var P3=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 vh(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){for await(let n of this.store.all(t))e(n)}async all(e){return no(this.store.all(e))}async delete(e,t){let n=await this.store.getReadLock(e,t);try{await this.store.delete(e,t)}finally{n()}}async has(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.has(e,t)}finally{this.log.trace("has release read lock"),n?.()}}async get(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.load(e,t)}finally{n?.()}}async getInfo(e,t){let n=await this.get(e,t);return{id:n.id,multiaddrs:n.addresses.map(({multiaddr:o})=>o)}}async save(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.save(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async patch(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.patch(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async merge(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.merge(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async consumePeerRecord(e,t,n){let o=Rt(t)?t:Rt(t?.expectedPeer)?t.expectedPeer:void 0,s=Rt(t)||t===void 0?n:t,i=await vr.openAndCertify(e,Qt.DOMAIN,s),a=Jr(i.publicKey.toCID());if(o?.equals(a)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",o,a),!1;let c=Qt.createFromProtobuf(i.payload),l;try{l=await this.get(a,s)}catch(d){if(d.name!=="NotFoundError")throw d}if(l?.peerRecordEnvelope!=null){let d=vr.createFromProtobuf(l.peerRecordEnvelope),u=Qt.createFromProtobuf(d.payload);if(u.seqNumber>=c.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,c.seqNumber),!1}return await this.patch(c.peerId,{peerRecordEnvelope:e,addresses:c.multiaddrs.map(d=>({isCertified:!0,multiaddr:d}))},s),!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 Aw(r,e={}){return new P3(r,e)}var Iw=864e13;var Sh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=ot({name:"libp2p_address_manager_dns_mappings",metrics:e.metrics})}has(e){let t=oe(e),n=t.host;(t.type==="ip4"||t.type==="ip6")&&t.sni!=null&&(n=t.sni);for(let o of this.mappings.values())if(o.domain===n)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Ki(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?Iw-Date.now():0,lastVerified:o?Iw-Date.now():void 0})})}remove(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,s]of this.mappings.entries())s.domain===t.sni&&(this.log("removing %s to %s DNS mapping %e",o,s.domain),this.mappings.delete(o),n=n||s.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n].multiaddr;if(!xt(o))continue;let s=oe(o);for(let[i,a]of this.mappings.entries()){if(s.host!==i)continue;let c=this.maybeAddSNIComponent(o,a.domain);c!=null&&(e.splice(n,1),n--,t.push({multiaddr:c,verified:a.verified,type:"dns-mapping",expires:a.expires,lastVerified:a.lastVerified}))}}return t}maybeAddSNIComponent(e,t){let n=e.getComponents();for(let o=0;o<n.length;o++)if(n[o].code===448&&n[o+1]?.code!==449)return n.splice(o+1,0,{name:"sni",code:449,value:t}),q(n)}confirm(e,t){let n=oe(e),o=n.host;(n.type==="ip4"||n.type==="ip6")&&n.sni!=null&&(o=n.sni);let s=!1;for(let[i,a]of this.mappings.entries())a.domain===o&&(this.log("marking %s to %s DNS mapping as verified",i,a.domain),s=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return s}unconfirm(e,t){let n=oe(e);if(n.type!=="ip4"&&n.type!=="ip6")return!1;let o=n.sni??n.host,s=!1;for(let[i,a]of this.mappings.entries())a.domain===o&&(this.log("removing verification of %s to %s DNS mapping",i,a.domain),s=s||a.verified,a.verified=!1,a.expires=Date.now()+t);return s}};var Ah=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=ot({name:"libp2p_address_manager_ip_mappings",metrics:e.metrics})}has(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t.host)return!0;return!1}add(e,t,n,o=t,s="tcp"){let i=`${e}-${t}-${s}`,a=this.mappings.get(i)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:zr(n)?4:6,protocol:s,verified:!1,expires:0};a.push(c),this.mappings.set(i,a)}remove(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,s]of this.mappings.entries()){for(let i=0;i<s.length;i++){let a=s[i];a.externalIp===t.host&&a.externalPort===t.port&&a.protocol===t.protocol&&(this.log("removing %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,t.host,t.port,t.protocol),n=n||a.verified,s.splice(i,1),i--)}s.length===0&&this.mappings.delete(o)}return n}getAll(e){let t=[];for(let{multiaddr:n}of e){if(!xt(n))continue;let o=oe(n);if(o.type!=="ip4"&&o.type!=="ip6")continue;let s;if(o.protocol==="tcp"?s=`${o.host}-${o.port}-tcp`:o.protocol==="udp"&&(s=`${o.host}-${o.port}-udp`),s==null)continue;let i=this.mappings.get(s);if(i!=null)for(let a of i)t.push({multiaddr:this.maybeOverrideIp(n,a.externalIp,a.externalFamily,a.protocol,a.externalPort),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}maybeOverrideIp(e,t,n,o,s){let i=e.getComponents(),a=i.findIndex(l=>l.code===4||l.code===41),c=i.findIndex(l=>l.name===o);return a>-1&&c>-1?(i[a].value=t,i[a].code=n===4?4:41,i[c].value=`${s}`,q(i)):e}confirm(e,t){if(!xt(e))return!1;let n=oe(e),o=!1;for(let s of this.mappings.values())for(let i of s)i.externalIp===n.host&&(this.log("marking %s to %s IP mapping as verified",i.internalIp,i.externalIp),o=i.verified,i.verified=!0,i.expires=Date.now()+t,i.lastVerified=Date.now());return o}unconfirm(e,t){if(!xt(e))return!1;let n=oe(e),o=!1;for(let s of this.mappings.values())for(let i=0;i<s.length;i++){let a=s[i];a.externalIp===n.host&&a.externalPort===n.port&&a.protocol===n.protocol&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,n.host,n.port,n.protocol),o=o||a.verified,a.verified=!1,a.expires=Date.now()+t)}return o}};var _P={maxObservedAddresses:10},Ih=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=ot({name:"libp2p_address_manager_observed_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??_P.maxObservedAddresses}has(e){return this.addresses.has(e.toString())}removePrefixed(e){for(let t of this.addresses.keys())t.toString().startsWith(e)&&this.addresses.delete(t)}add(e){this.addresses.size!==this.maxObservedAddresses&&(Qe(e)||o7(e)||(this.log("adding observed address %a",e),this.addresses.set(e.toString(),{verified:!1,expires:0})))}getAll(){return Array.from(this.addresses).map(([e,t])=>({multiaddr:q(e),verified:t.verified,type:"observed",expires:t.expires,lastVerified:t.lastVerified}))}remove(e){let t=this.addresses.get(e.toString())?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(e.toString()),t}confirm(e,t){let n=e.toString(),o=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},s=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,o),s}};var CP={maxObservedAddresses:10},Th=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=ot({name:"libp2p_address_manager_transport_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??CP.maxObservedAddresses}get(e,t){if(Qe(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),o=this.addresses.get(n);return o==null&&(o={verified:!xt(e),expires:0},this.addresses.set(n,o)),{multiaddr:e,verified:o.verified,type:"transport",expires:o.expires,lastVerified:o.lastVerified}}has(e){let t=this.toKey(e);return this.addresses.has(t)}remove(e){let t=this.toKey(e),n=this.addresses.get(t)?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(t),n}confirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},s=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),s}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},s=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),s}toKey(e){if(!xt(e))return e.toString();let t=oe(e);return`${t.host}-${t.port}-${t.protocol}`}};var Tw=6e4,_w={maxObservedAddresses:10,addressVerificationTTL:Tw*10,addressVerificationRetry:Tw*5},kP=r=>r;function R3(r,e){let t=r.getComponents().findLast(n=>n.code===421)?.value;return t!=null&&Me(t).equals(e)&&(r=r.decapsulate(q(`/p2p/${e.toString()}`))),r}var _h=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:s=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(i=>i.toString()),this.announce=new Set(o.map(i=>i.toString())),this.appendAnnounce=new Set(s.map(i=>i.toString())),this.observed=new Ih(e,t),this.dnsMappings=new Sh(e,t),this.ipMappings=new Ah(e,t),this.transportAddresses=new Th(e,t),this.announceFilter=t.announceFilter??kP,this.observedAddressFilter=Et(1024),this.addressVerificationTTL=t.addressVerificationTTL??_w.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??_w.addressVerificationRetry,this._updatePeerStoreAddresses=Wn(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.getAddresses().map(t=>t.getComponents().findLast(n=>n.code===421)?.value===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 - %e",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>q(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>q(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>q(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=oe(e),n;switch(t.type){case"ip4":{n=`${t.host}:${t.port}`;break}case"ip6":{n=`[${t.host}]:${t.port}`;break}default:return}this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=R3(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=R3(e,this.components.peerId);let n=!0;(t?.type==="transport"||this.transportAddresses.has(e))&&!this.transportAddresses.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="dns-mapping"||this.dnsMappings.has(e))&&!this.dnsMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="ip-mapping"||this.ipMappings.has(e))&&!this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="observed"||this.observed.has(e))&&(this.maybeUpgradeToIPMapping(e)?(this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL),n=!1):!this.observed.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1)),n||this._updatePeerStoreAddresses()}removeObservedAddr(e,t){e=R3(e,this.components.peerId);let n=!1;this.observed.has(e)&&!this.observed.remove(e)&&n&&(n=!1),this.transportAddresses.has(e)&&!this.transportAddresses.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.dnsMappings.has(e)&&!this.dnsMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.ipMappings.has(e)&&!this.ipMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),n&&this._updatePeerStoreAddresses()}getAddresses(){let e=new Set,t=this.getAddressesWithMetadata().filter(n=>{if(!n.verified)return!1;let o=n.multiaddr.toString();return e.has(o)?!1:(e.add(o),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let o=q(n);return o.getComponents().pop()?.value===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(e)}),e.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];t=t.concat(this.components.transportManager.getAddrs().map(o=>this.transportAddresses.get(o,this.addressVerificationTTL)));let n=this.getAppendAnnounceAddrs();return n.length>0&&(this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(n)}),t=t.concat(n.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()})))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove(q(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,s="tcp"){this.ipMappings.add(e,t,n,o,s),this.observed.removePrefixed(`/ip${zr(n)?4:6}/${n}/${s}/${o}`)}removePublicAddressMapping(e,t,n,o=t,s="tcp"){this.ipMappings.remove(q(`/ip${zr(n)?4:6}/${n}/${s}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e)||!xt(e))return!1;let t=oe(e);if(t.type!=="ip4"||Ki(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[s=>ro.exactMatch(s)||Qs.exactMatch(s),s=>Xs.exactMatch(s),s=>M9.exactMatch(s)];for(let s of o){if(!s(e))continue;let i=n.filter(l=>l.getAddrs().filter(d=>oe(d).type==="ip4"&&s(d)).length>0);if(i.length!==1)continue;let a=i[0].getAddrs().filter(l=>!Oc(l)).pop();if(a==null)continue;let c=oe(a);return c.port==null?!1:(this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.protocol),!0)}return!1}};var Cw;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Cw||(Cw={}));var Ch=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},kh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},Ea=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},Tl=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Ph=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Rh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Lh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},_l=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Dh=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},Nh=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},Oh=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Mh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},Bh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},zo=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},ei=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Uh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}},Fh=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}};var L3=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=ra())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Pu(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")}},PP=["metrics","connectionProtector","dns"],RP=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function kw(r={}){let e=new L3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!RP.includes(o)){let i=e.components[o];if(i==null&&!PP.includes(o))throw new Ch(`${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 Pw(r){let e={};for(let t of Object.values(r.components))for(let n of LP(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of DP(t))if(e[n]!==!0)throw new kh(`Service "${NP(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function LP(r){return Array.isArray(r?.[me])?r[me]:[]}function DP(r){return Array.isArray(r?.[ur])?r[ur]:[]}function NP(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function Rw(r={}){return r.denyDialMultiaddr==null&&(r.denyDialMultiaddr=e=>ro.matches(e)?!0:Qe(e)),r}var OP=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 MP(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!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}=OP(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function Cl(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=MP(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function $h(r){if(Rt(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getComponents().findLast(o=>o.code===421)?.value;t=n==null?void 0:Me(n),e.forEach(o=>{if(!yn(o))throw new ln("Invalid multiaddr");let s=o.getComponents().findLast(i=>i.code===421)?.value;if(s==null){if(t!=null)throw new A("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Me(s);if(t?.equals(i)!==!0)throw new A("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!R9.exactMatch(n)),{peerId:t,multiaddrs:e}}var BP=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function Lw(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??BP;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}function kl(r){let e=oe(r),t=e.cidr;if(e.type!=="ip4"&&e.type!=="ip6")throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`);if(t==null)switch(e.type){case"ip4":{t=32;break}case"ip6":{t=128;break}default:throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`)}return new Ns(e.host,t)}function D3(r){return!yt.exactMatch(r)}function Kh(r,e,t){if(r==null||e==null)return;let n=e.sort((s,i)=>s.direct?-1:i.direct?1:0).find(s=>s.limits==null);if(n==null||n.direct||t==null)return n;if(!t.some(s=>D3(s)))return n}var Vh=class{connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.allow=(t.allow??[]).map(n=>kl(n)),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,n=this.connectionManager.getMaxConnections();if(this.log("checking max connections limit %d/%d",t,n),t<=n)return;let o=new Ut;for(let c of e){let l=c.remotePeer;if(!o.has(l)){o.set(l,0);try{let d=await this.peerStore.get(l);o.set(l,[...d.tags.values()].reduce((u,f)=>u+f.value,0))}catch(d){d.name!=="NotFoundError"&&this.log.error("error loading peer tags - %e",d)}}}let s=this.sortConnections(e,o),i=Math.max(t-n,0),a=[];for(let c of s)if(this.log("too many connections open - closing a connection to %p",c.remotePeer),this.allow.some(d=>{if(xt(c.remoteAddr)){let u=oe(c.remoteAddr);return d.contains(u.host)}return!0})||a.push(c),a.length===i)break;await Promise.all(a.map(async c=>{await Lw(c,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:a})}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 Dw="last-dial-failure",Nw="last-dial-success";var Ow=100,Hh=50;function UP(r,e){let t=Xs.exactMatch(r.multiaddr),n=Xs.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Qs.exactMatch(r.multiaddr),s=Qs.exactMatch(e.multiaddr);if(o&&!s)return-1;if(!o&&s)return 1;let i=ro.exactMatch(r.multiaddr),a=ro.exactMatch(e.multiaddr);if(i&&!a)return-1;if(!i&&a)return 1;let c=yl.exactMatch(r.multiaddr),l=yl.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let d=gl.exactMatch(r.multiaddr),u=gl.exactMatch(e.multiaddr);if(d&&!u)return-1;if(!d&&u)return 1;let f=d3.exactMatch(r.multiaddr),h=d3.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function FP(r,e){let t=Oc(r.multiaddr),n=Oc(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function $P(r,e){let t=Qe(r.multiaddr),n=Qe(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function KP(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function VP(r,e){let t=yt.exactMatch(r.multiaddr),n=yt.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Mw(r){return r.sort(UP).sort(KP).sort(VP).sort($P).sort(FP)}var N3=class{dns;canResolve(e){return e.getComponents().some(({name:t})=>t==="dnsaddr")}async resolve(e,t){let n=e.getComponents().find(c=>c.name==="dnsaddr")?.value;if(n==null)return[e];let s=await this.getDNS(t).query(`_dnsaddr.${n}`,{signal:t?.signal,types:[dr.TXT]}),i=e.getComponents().find(c=>c.name==="p2p")?.value,a=[];for(let c of s.Answer){let l=c.data.replace(/["']/g,"").trim().split("=")[1];l!=null&&(i!=null&&!l.includes(i)||a.push(q(l)))}return a}getDNS(e){return e.dns!=null?e.dns:(this.dns==null&&(this.dns=$u()),this.dns)}},Pl=new N3;async function O3(r,e,t){let n=t.depth??0;if(n>(t.maxRecursiveDepth??32))throw new Fh("Max recursive depth reached");let o=!1,s=[];for(let i of Object.values(e))if(i.canResolve(r)){o=!0;let a=await i.resolve(r,t);for(let c of a)s.push(...await O3(c,e,{...t,depth:n+1}))}return o===!1&&s.push(r),s}var Rl={maxParallelDials:Hh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:Pl}},qh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;resolvers;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Rl.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Rl.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Rl.dialTimeout,this.connections=t.connections??new Ut,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.resolvers=t.resolvers??Rl.resolvers,this.shutDownController=new AbortController,this.shutDownController.signal,this.queue=new Qd({concurrency:t.maxParallelDials??Rl.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("failure",n=>{n.detail?.error.name!==Vt.name&&this.log.error("error in dial queue - %e",n.detail.error)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=$h(e);if(n!=null&&t.force!==!0){let i=Kh(n,this.connections.get(n),o);if(i!=null)return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),i}let s=this.queue.queue.find(i=>{if(n?.equals(i.options.peerId)===!0)return!0;let a=i.options.multiaddrs;if(a==null)return!1;for(let c of o)if(a.has(c.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let i of o)s.options.multiaddrs.add(i.toString());return t.onProgress?.(new H("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Eo("Dial queue is full");return this.log("creating dial target for %p",n,o.map(i=>i.toString())),t.onProgress?.(new H("dial-queue:add-to-dial-queue")),this.queue.add(async i=>{i.onProgress?.(new H("dial-queue:start-dial"));let a=le([this.shutDownController.signal,i.signal]);try{return await this.dialPeer(i,a)}finally{a.clear()}},{peerId:n,priority:t.priority??F3,multiaddrs:new Set(o.map(i=>i.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,s=new Set,i=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);i||o.size>0;){c++,i=!1;let d=[],u=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...u]);let f=await this.calculateMultiaddrs(n,u,{...e,signal:t});for(let h of f){if(s.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}d.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,d.map(h=>h.multiaddr.toString())),e?.onProgress?.(new H("dial-queue:calculated-addresses",d));for(let h of d){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Eo("Peer had more than maxPeerAddrsToDial");a++;try{let p=await this.components.transportManager.dial(h.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",h.multiaddr);try{await this.components.peerStore.merge(p.remotePeer,{multiaddrs:[p.remoteAddr],metadata:{[Nw]:C(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p - %e",n,g)}return p}catch(p){if(this.log.error("dial failed to %a - %e",h.multiaddr,p),s.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[Dw]:C(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p - %e",n,g)}if(t.aborted)throw new un(p.message);l.push(p)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:q(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Eo("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new _l("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,n);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("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,u)}}}let s=(await Promise.all(o.map(async u=>{let f=await O3(u.multiaddr,this.resolvers,{dns:this.components.dns,log:this.log,...n});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.getComponents().pop()?.name!=="p2p"?{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.getComponents().findLast(h=>h.code===421)?.value;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 Oh("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?Mw(l):l.sort(this.addressSorter);if(d.length===0)throw new _l("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=>!yt.matches(o.multiaddr))!=null:!0}catch{}return!1}};var HP=Object.prototype.toString,qP=r=>HP.call(r)==="[object Error]",WP=new Set(["network error","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]);function $3(r){if(!(r&&qP(r)&&r.name==="TypeError"&&typeof r.message=="string"))return!1;let{message:t,stack:n}=r;return t==="Load failed"?n===void 0||"__sentry_captured__"in r:t.startsWith("error sending request for url")||t==="Failed to fetch"||t.startsWith("Failed to fetch (")&&t.endsWith(")")?!0:WP.has(t)}function zP(r){if(typeof r=="number"){if(r<0)throw new TypeError("Expected `retries` to be a non-negative number.");if(Number.isNaN(r))throw new TypeError("Expected `retries` to be a valid number or Infinity, got NaN.")}else if(r!==void 0)throw new TypeError("Expected `retries` to be a number or Infinity.")}function Wh(r,e,{min:t=0,allowInfinity:n=!1}={}){if(e!==void 0){if(typeof e!="number"||Number.isNaN(e))throw new TypeError(`Expected \`${r}\` to be a number${n?" or Infinity":""}.`);if(!n&&!Number.isFinite(e))throw new TypeError(`Expected \`${r}\` to be a finite number.`);if(e<t)throw new TypeError(`Expected \`${r}\` to be \u2265 ${t}.`)}}var K3=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}};function GP(r,e){let t=Math.max(1,r+1),n=e.randomize?Math.random()+1:1,o=Math.round(n*e.minTimeout*e.factor**(t-1));return o=Math.min(o,e.maxTimeout),o}function Bw(r,e){return Number.isFinite(e)?e-(performance.now()-r):e}async function YP({error:r,attemptNumber:e,retriesConsumed:t,startTime:n,options:o}){let s=r instanceof Error?r:new TypeError(`Non-error was thrown: "${r}". You should only throw errors.`);if(s instanceof K3)throw s.originalError;let i=Number.isFinite(o.retries)?Math.max(0,o.retries-t):o.retries,a=o.maxRetryTime??Number.POSITIVE_INFINITY,c=Object.freeze({error:s,attemptNumber:e,retriesLeft:i,retriesConsumed:t});if(await o.onFailedAttempt(c),Bw(n,a)<=0)throw s;let l=await o.shouldConsumeRetry(c),d=Bw(n,a);if(d<=0||i<=0)throw s;if(s instanceof TypeError&&!$3(s)){if(l)throw s;return o.signal?.throwIfAborted(),!1}if(!await o.shouldRetry(c))throw s;if(!l)return o.signal?.throwIfAborted(),!1;let u=GP(t,o),f=Math.min(u,d);return o.signal?.throwIfAborted(),f>0&&await new Promise((h,p)=>{let g=()=>{clearTimeout(m),o.signal?.removeEventListener("abort",g),p(o.signal.reason)},m=setTimeout(()=>{o.signal?.removeEventListener("abort",g),h()},f);o.unref&&m.unref?.(),o.signal?.addEventListener("abort",g,{once:!0})}),o.signal?.throwIfAborted(),!0}async function V3(r,e={}){if(e={...e},zP(e.retries),Object.hasOwn(e,"forever"))throw new Error("The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.");e.retries??=10,e.factor??=2,e.minTimeout??=1e3,e.maxTimeout??=Number.POSITIVE_INFINITY,e.maxRetryTime??=Number.POSITIVE_INFINITY,e.randomize??=!1,e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.shouldConsumeRetry??=()=>!0,Wh("factor",e.factor,{min:0,allowInfinity:!1}),Wh("minTimeout",e.minTimeout,{min:0,allowInfinity:!1}),Wh("maxTimeout",e.maxTimeout,{min:0,allowInfinity:!0}),Wh("maxRetryTime",e.maxRetryTime,{min:0,allowInfinity:!0}),e.factor>0||(e.factor=1),e.signal?.throwIfAborted();let t=0,n=0,o=performance.now();for(;!Number.isFinite(e.retries)||n<=e.retries;){t++;try{e.signal?.throwIfAborted();let s=await r(t);return e.signal?.throwIfAborted(),s}catch(s){await YP({error:s,attemptNumber:t,retriesConsumed:n,startTime:o,options:e})&&n++}}throw new Error("Retry attempts exhausted without throwing an error.")}var zh=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;events;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new It({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,this.events=e.events,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,o)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);Uw(t)&&(this.queue.has(e)||this.queue.add(async n=>{await V3(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",e,o,this.retries,s),s}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(async n=>{this.log.error("failed to reconnect to %p - %e",e,n);let o={};[...t.tags.keys()].forEach(s=>{s.startsWith(us)&&(o[s]=void 0)}),await this.peerStore.merge(e,{tags:o}),this.events.safeDispatchEvent("peer:reconnect-failure",{detail:e})}).catch(async n=>{this.log.error("failed to remove keep-alive tag from %p - %e",e,n)}))}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>Uw(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error("could not open connection to keepalive peer - %e",n)})}))}).catch(e=>{this.log.error("error reconnect to peers after start - %e",e)})}stop(){this.started=!1,this.queue.abort()}};function Uw(r){for(let e of r.tags.keys())if(e.startsWith(us))return!0;return!1}var F3=50,H3={maxConnections:Ow,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},Gh=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 A("Connection Manager maxConnections must be greater than 0");this.connections=new Ut,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=>kl(q(n))),this.deny=(t.deny??[]).map(n=>kl(q(n))),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??H3.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new na({points:t.inboundConnectionThreshold??H3.inboundConnectionThreshold,duration:1}),this.connectionPruner=new Vh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{allow:t.allow?.map(n=>q(n))}),this.dialQueue=new qh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Hh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:Pl},connections:this.connections}),this.reconnectQueue=new zh({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 at(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 lt(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push(Promise.all([Cl(n,"close",{signal:AbortSignal.timeout(500)}),n.close({signal:AbortSignal.timeout(500)})]).catch(o=>{n.abort(o)}));this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}setMaxConnections(e){if(e<1)throw new A("Connection Manager maxConnections must be greater than 0");let t=!1;e<this.maxConnections&&(t=!0),this.maxConnections=e,t&&this.connectionPruner.maybePruneConnections()}onConnect(e){this._onConnect(e).catch(t=>{this.log.error("could not connect - %e",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.trace("peer %p disconnected, removing connection map entry",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:n}))}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,multiaddrs:o}=$h(e);if(this.peerId.equals(n))throw new hi("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let c=Kh(n,this.getConnections(n),o);if(c!=null)return this.log("had an existing connection to %p as %a",n,c.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),c}let s=await this.dialQueue.dial(e,{...t,priority:t.priority??F3});if(s.status!=="open")throw new is("Remote closed connection during opening");let i=this.connections.get(s.remotePeer);i==null&&(i=[],this.connections.set(s.remotePeer,i));let a=!1;for(let c of i)if(c.id===s.id&&(a=!0),t.force!==!0&&c.id!==s.id&&c.remoteAddr.equals(s.remoteAddr))return s.abort(new ln("Duplicate multiaddr connection")),c;return a||i.push(s),s}finally{this.outboundPendingConnections--}}async openStream(e,t,n={}){return(await this.openConnection(e,n)).newStream(t,n)}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await Promise.all([Cl(o,"close",t),o.close(t)])}catch(s){o.abort(s)}}))}acceptIncomingConnection(e){if(this.deny.some(o=>{if(xt(e.remoteAddr)){let s=oe(e.remoteAddr);return o.contains(s.host)}return!1}))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>{if(xt(e.remoteAddr)){let s=oe(e.remoteAddr);return o.contains(s.host)}return!0}))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(xt(e.remoteAddr)){let o=oe(e.remoteAddr);try{this.inboundConnectionRateLimiter.consume(o.host,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o.host),!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=>q(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var QP=1e4,ZP="1.0.0",JP="ping",eR="ipfs",Fw=32,tR=!0,Yh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??eR}/${JP}/${ZP}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??QP,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??tR,this.timeout=new Gr({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[me]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,this.abortController.signal,this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now(),n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal});try{let o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),s=Cd(o);t=Date.now(),await Promise.all([s.write(Yt(Fw),{signal:n}),s.read({bytes:Fw,signal:n})]),e.rtt=Date.now()-t,await o.close({signal:n})}catch(o){if(o.name!=="UnsupportedProtocolError")throw o;e.rtt=(Date.now()-t)/2}finally{this.timeout.cleanUp(n)}}).catch(t=>{this.log.error("error during heartbeat - %e",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 jh=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:R(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:R(n,"base36")})})??this.get}[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 Ea("No content routers available");let n=this,o=new xr;for await(let s of jt(...n.routers.filter(i=>i.findProviders instanceof Function).map(i=>i.findProviders(e,t))))s!=null&&(s.multiaddrs.length>0&&await this.components.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),!o.has(s.id)&&(o.add(s.id),yield s))}async provide(e,t={}){if(this.routers.length===0)throw new Ea("No content routers available");await Promise.all(this.routers.filter(n=>n.provide instanceof Function).map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new Ea("No content routers available");await Promise.all(this.routers.filter(n=>n.cancelReprovide instanceof Function).map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new Ur;await Promise.all(this.routers.filter(o=>o.put instanceof Function).map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Ur;return Promise.any(this.routers.filter(n=>n.get instanceof Function).map(async n=>n.get(e,t)))}};var Xh=globalThis.CustomEvent??Event;async function*io(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,s=[],i=fe(),a=fe(),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=fe(),await i.promise),d)break;let g={done:!1};s.push(g),p().then(m=>{g.done=!0,g.ok=!0,g.value=m,o.dispatchEvent(new Xh("task-complete"))},m=>{g.done=!0,g.err=m,o.dispatchEvent(new Xh("task-complete"))})}c=!0,o.dispatchEvent(new Xh("task-complete"))}catch(p){l=p,o.dispatchEvent(new Xh("task-complete"))}});function u(){return n?s[0]?.done:!!s.find(p=>p.done)}function*f(){for(;s.length>0&&s[0].done;){let p=s[0];if(s.shift(),p.ok)yield p.value;else throw d=!0,i.resolve(),p.err;i.resolve()}}function*h(){for(;u();)for(let p=0;p<s.length;p++)if(s[p].done){let g=s[p];if(s.splice(p,1),p--,g.ok)yield g.value;else throw d=!0,i.resolve(),g.err;i.resolve()}}for(;;){if(u()||(a=fe(),await a.promise),l!=null||(n?yield*f():yield*h(),l!=null))throw l;if(c&&s.length===0)break}}var Qh=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??[],this.findPeer=e.metrics?.traceFunction("libp2p.peerRouting.findPeer",this.findPeer.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,key:R(n,"base36")}),getAttributesFromYieldedValue:(n,o)=>({...o,peers:[...Array.isArray(o.peers)?o.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new Tl("No peer routers available");if(e.toString()===this.peerId.toString())throw new Ph("Should not try to find self");let n=this,o=jt(...this.routers.filter(s=>s.findPeer instanceof Function).map(s=>(async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error("router failed to find peer - %e",i)}})()));for await(let s of o)if(s!=null)return s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),s;throw new Le}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Tl("No peer routers available");let n=this,o=Et(1024);for await(let s of io((async function*(){let i=jt(...n.routers.filter(a=>a.getClosestPeers instanceof Function).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 - %e",c);return}return a}})()))s!=null&&(s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),!o.has(s.id.toMultihash().bytes)&&(o.add(s.id.toMultihash().bytes),yield s))}};var Zh=class extends ie{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,this.shutdownController.signal}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,this.shutdownController.signal}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=le([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=fe(),yield(await Cl(this,"walk:peer",{signal:t,rejectionEvents:["walk:error"]})).detail}catch(n){throw n.detail!=null?n.detail:n}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,this.walkController.signal;let e=le([this.walkController.signal,this.shutdownController.signal]);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=Yt(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 Pe(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("random walk errored - %e",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored - %e",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var q3=32,W3=64,Jh=class{log;topologies;handlers;components;middleware;constructor(e){this.components=e,this.log=e.logger.forComponent("libp2p:registrar"),this.middleware=new Map,this.topologies=new Map,e.metrics?.registerMetricGroup("libp2p_registrar_topologies",{calculate:()=>{let t={};for(let[n,o]of this.topologies)t[n]=o.size;return t}}),this.handlers=ot({name:"libp2p_registrar_protocol_handlers",metrics:e.metrics}),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 Rh(`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)&&n?.force!==!0)throw new Lh(`Handler already registered for protocol ${e}`);this.handlers.set(e,{handler:t,options:{maxInboundStreams:q3,maxOutboundStreams:W3,...n}}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]},n)}async unhandle(e,t){(Array.isArray(e)?e:[e]).forEach(o=>{this.handlers.delete(o)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()},t)}async register(e,t){if(t==null)throw new A("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))}use(e,t){this.middleware.set(e,t)}unuse(e){this.middleware.delete(e)}getMiddleware(e){return this.middleware.get(e)??[]}async _onDisconnect(e){let t=e.detail,n={signal:AbortSignal.timeout(5e3)};try{let o=await this.components.peerStore.get(t,n);for(let s of o.protocols){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{a.filter?.has(t)!==!1&&(a.filter?.remove(t),await a.onDisconnect?.(t))}))}}catch(o){if(o.name==="NotFoundError")return;this.log.error("could not inform topologies of disconnecting peer %p - %e",t,o)}}async _onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(s=>!t.protocols.includes(s));try{for(let s of o){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),await a.onDisconnect?.(t.id))}))}}catch(s){this.log.error("could not inform topologies of updated peer %p - %e",t.id,s)}}async _onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;try{for(let s of t){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),await a.onConnect?.(o,n))}))}}catch(s){this.log.error("could not inform topologies of updated peer after identify %p - %e",o,s)}}};var e1=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=ot({name:"libp2p_transport_manager_transports",metrics:this.components.metrics}),this.listeners=ot({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Xa.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new A("Transport must have a valid tag");if(this.transports.has(t))throw new A(`There is already a transport with the tag ${t}`);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new Uh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new H("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new Ur("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t={errors:new Map,ipv4:{success:0,attempts:0},ipv6:{success:0,attempts:0}};e.forEach(s=>{t.errors.set(s.toString(),new Dh)});let n=[];for(let[s,i]of this.transports.entries()){let a=i.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",s,c);let l=i.createListener({upgrader:this.components.upgrader}),d=this.listeners.get(s)??[];d==null&&(d=[],this.listeners.set(s,d)),d.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let u=d.findIndex(f=>f===l);d.splice(u,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),a3.matches(c)?t.ipv4.attempts++:c3.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),a3.matches(c)&&t.ipv4.success++,c3.matches(c)&&t.ipv6.success++},u=>{throw this.log.error("transport %s could not listen on address %a - %e",s,c,u),t.errors.set(c.toString(),u),u}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(s=>s.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===Xa.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new Nh(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
33
- ${[...t.errors.entries()].map(([s,i])=>`
34
- ${s}: ${`${rR(i)}`.split(`
32
+ `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),zB=new RegExp(`(?:^${Mn}$)|(?:^${kp}$)`),WB=new RegExp(`^${Mn}$`),GB=new RegExp(`^${kp}$`),f8=r=>r&&r.exact?zB:new RegExp(`(?:${Fi(r)}${Mn}${Fi(r)})|(?:${Fi(r)}${kp}${Fi(r)})`,"g");f8.v4=r=>r&&r.exact?WB:new RegExp(`${Fi(r)}${Mn}${Fi(r)}`,"g");f8.v6=r=>r&&r.exact?GB:new RegExp(`${Fi(r)}${kp}${Fi(r)}`,"g");var h8=f8;function p8(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function CS(){return!1}var{toString:YB}=Object.prototype;function m8(r){return YB.call(r)==="[object RegExp]"}var kS={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function g8(r,e={}){if(!m8(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(kS).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?kS[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function y8(r,e,{timeout:t}={}){try{return p8(()=>g8(r).test(e),{timeout:t})()}catch(n){if(CS(n))return!1;throw n}}var jB=15,XB=45,RS={timeout:400};function w8(r){return r.length>XB?!1:y8(h8.v6({exact:!0}),r,RS)}function PS(r){return r.length>jB?!1:y8(h8.v4({exact:!0}),r,RS)}var LS={http:"80",https:"443",ws:"80",wss:"443"},QB=["http","https","ws","wss"];function Rp(r,e){e=e??{};let t=e.defaultDnsType??"dns",{scheme:n,hostname:o,port:i,path:s}=ZB(r),a=[JB(o,t),eM(i,n),tM(n)];s!=null&&a.push(rM(s));let c="/"+a.filter(l=>!!l).reduce((l,u)=>l.concat(u),[]).join("/");return j(c)}function ZB(r){let[e]=r.split(":");QB.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o,pathname:i,search:s}=new URL(r);if(o==null||o===""){let c=nM(e);c!=null&&(o=c),c==null&&t==="http:"&&(o="80")}let a;return i!=null&&i!==""&&i!=="/"&&(i.startsWith("/")&&(i=i.substring(1)),a=i),s!=null&&s!==""&&(a=a??"",a+=s),{scheme:e,hostname:n,port:o,path:a}}function JB(r,e){if(!(r==null||r==="")){if(PS(r))return["ip4",r];if(w8(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(w8(t))return["ip6",t]}return[e,r]}}function eM(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function tM(r){if(r.match(/^tcp$|^udp$/)==null)return r==="https"?["/tls/http"]:r==="wss"?["/tls/ws"]:[r]}function rM(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function nM(r){if(!(r==null||r===""||LS[r]==null))return LS[r]}var oM=["https://trustless-gateway.link","https://4everland.io"],iM=2336;function sM(r){return r=r.toString(),{id:Dn(J.createV1(iM,Tt.digest(R(r)))),multiaddrs:[Rp(r)]}}function aM(r){return new URL(N(r.id.toMultihash().digest))}var b8=class{name="http-gateway-router";gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??oM).map(t=>sM(t)),this.shuffle=e.shuffle??!0}async*findProviders(e,t){yield*(this.shuffle?this.gateways.toSorted(()=>Math.random()>.5?1:-1):this.gateways).map(n=>({...n,protocols:["transport-ipfs-gateway-http"],routing:"http-gateway-routing"}))}toString(){return`HTTPGatewayRouter([${this.gateways.map(e=>aM(e)).join(", ")}])`}};function x8(r={}){return new b8(r)}var E8=class{name="libp2p-router";libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(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)}toString(){return"Libp2pRouter()"}};function v8(r){return new E8(r)}function cM(r){return r[Symbol.asyncIterator]!=null}function lM(r){if(cM(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 Wo=lM;function uM(r){return typeof r?.then=="function"}var Ju=class extends Ko{data;constructor(){super(),this.data=new Map}put(e,t,n){n?.signal?.throwIfAborted();let o;if(t instanceof Uint8Array)o=[t];else{let i=Wo(t);if(uM(i))return i.then(s=>this._put(e,s,n));o=i}return this._put(e,o,n)}_put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(At.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(At.encode(e.multihash.bytes));if(n==null)throw new cn;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(At.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(At.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:J.createV1(Eo,He(At.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var Kce=rn("blockstore:core:tiered");var DS="SHARDING";function fM(r){return r[Symbol.asyncIterator]!=null}function hM(r,e){return fM(r)?(async function*(){yield*(await Wo(r)).sort(e)})():(function*(){yield*Wo(r).sort(e)})()}var Pp=hM;var Go=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 yr(this.putMany(e,n)),e=[],await yr(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=Ln(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Ln(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>Pp(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=Ln(n,()=>o++>=i)}return e.limit!=null&&(n=Bi(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Ln(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Ln(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>Pp(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=Ln(n,()=>i++>=o)}return e.limit!=null&&(n=Bi(n,e.limit)),n}};var ia=class extends Go{data;constructor(){super(),this.data=new Map}put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(e.toString(),t),e}get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(e.toString());if(n==null)throw new cn;return n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(e.toString())}delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(e.toString())}*_all(e,t){t?.signal?.throwIfAborted();for(let[n,o]of this.data.entries())yield{key:new Ze(n),value:o},t?.signal?.throwIfAborted()}*_allKeys(e,t){t?.signal?.throwIfAborted();for(let n of this.data.keys())yield new Ze(n),t?.signal?.throwIfAborted()}};var xle=new Ze(DS);var Nle=rn("datastore:core:tiered");async function OS(r){if(r.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new _("Private network is enforced, but no protector was provided");return r}var ed;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.publicKey!=null&&i.publicKey.byteLength>0&&(s.uint32(10),s.bytes(i.publicKey)),i.payloadType!=null&&i.payloadType.byteLength>0&&(s.uint32(18),s.bytes(i.payloadType)),i.payload!=null&&i.payload.byteLength>0&&(s.uint32(26),s.bytes(i.payload)),i.signature!=null&&i.signature.byteLength>0&&(s.uint32(42),s.bytes(i.signature)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={publicKey:de(0),payloadType:de(0),payload:de(0),signature:de(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.publicKey=i.bytes();break}case 2:{c.payloadType=i.bytes();break}case 3:{c.payload=i.bytes();break}case 5:{c.signature=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.publicKey`,value:i.bytes()};break}case 2:{yield{field:`${a}.payloadType`,value:i.bytes()};break}case 3:{yield{field:`${a}.payload`,value:i.bytes()};break}case 5:{yield{field:`${a}.signature`,value:i.bytes()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(ed||(ed={}));var Lp=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Yr=class r{static createFromProtobuf=e=>{let t=ed.decode(e),n=pt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t,n)=>{if(t==null)throw new Error("Missing private key");let o=e.domain,i=e.codec,s=e.marshal(),a=BS(o,i,s),c=await t.sign(a.subarray(),n);return new r({publicKey:t.publicKey,payloadType:i,payload:s,signature:c})};static openAndCertify=async(e,t,n)=>{let o=r.createFromProtobuf(e);if(!await o.validate(t,n))throw new Lp("Envelope signature is not valid for the given domain");return o};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:i}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=i}marshal(){return this.marshaled==null&&(this.marshaled=ed.encode({publicKey:_t(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return e==null?!1:se(this.marshal(),e.marshal())}async validate(e,t){let n=BS(e,this.payloadType,this.payload);return this.publicKey.verify(n.subarray(),this.signature,t)}},BS=(r,e,t)=>{let n=R(r),o=Zt(n.byteLength),i=Zt(e.length),s=Zt(t.length);return new ne(o,n,i,e,s,t)};var MS="libp2p-peer-record",US=Uint8Array.from([3,1]);var td;(function(r){let e;(function(s){let a;s.codec=()=>(a==null&&(a=me((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.multiaddr!=null&&d.multiaddr.byteLength>0&&(f.uint32(10),f.bytes(d.multiaddr)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={multiaddr:de(0)},y=f==null?d.len:d.pos+f;for(;d.pos<y;){let g=d.uint32();switch(g>>>3){case 1:{p.multiaddr=d.bytes();break}default:{d.skipType(g&7);break}}}return p},function*(d,f,h,p={}){let y=f==null?d.len:d.pos+f;for(;d.pos<y;){let g=d.uint32();switch(g>>>3){case 1:{yield{field:`${h}.multiaddr`,value:d.bytes()};break}default:{d.skipType(g&7);break}}}})),a);function c(d){return he(d,s.codec())}s.encode=c;function l(d,f){return fe(d,s.codec(),f)}s.decode=l;function u(d,f){return pe(d,s.codec(),f)}s.stream=u})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=me((s,a,c={})=>{if(c.lengthDelimited!==!1&&a.fork(),s.peerId!=null&&s.peerId.byteLength>0&&(a.uint32(10),a.bytes(s.peerId)),s.seq!=null&&s.seq!==0n&&(a.uint32(16),a.uint64(s.seq)),s.addresses!=null&&s.addresses.length>0)for(let l of s.addresses)a.uint32(26),r.AddressInfo.codec().encode(l,a);c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={peerId:de(0),seq:0n,addresses:[]},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.peerId=s.bytes();break}case 2:{l.seq=s.uint64();break}case 3:{if(c.limits?.addresses!=null&&l.addresses.length===c.limits.addresses)throw new Ee('Decode error - repeated field "addresses" had too many elements');l.addresses.push(r.AddressInfo.codec().decode(s,s.uint32(),{limits:c.limits?.addresses$}));break}default:{s.skipType(d&7);break}}}return l},function*(s,a,c,l={}){let u={addresses:0},d=a==null?s.len:s.pos+a;for(;s.pos<d;){let f=s.uint32();switch(f>>>3){case 1:{yield{field:`${c}.peerId`,value:s.bytes()};break}case 2:{yield{field:`${c}.seq`,value:s.uint64()};break}case 3:{if(l.limits?.addresses!=null&&u.addresses===l.limits.addresses)throw new Ee('Streaming decode error - repeated field "addresses" had too many elements');for(let h of r.AddressInfo.codec().stream(s,s.uint32(),`${c}.addresses[]`,{limits:l.limits?.addresses$}))yield{...h,index:u.addresses};u.addresses++;break}default:{s.skipType(f&7);break}}}})),t);function n(s){return he(s,r.codec())}r.encode=n;function o(s,a){return fe(s,r.codec(),a)}r.decode=o;function i(s,a){return pe(s,r.codec(),a)}r.stream=i})(td||(td={}));function FS(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 pr=class r{static createFromProtobuf=e=>{let t=td.decode(e),n=dt(He(t.peerId)),o=(t.addresses??[]).map(s=>j(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=MS;static CODEC=US;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=td.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||!FS(this.multiaddrs,e.multiaddrs))}};var Yo;(function(r){let e;(function(a){let c;a.codec=()=>(c==null&&(c=me((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.key!=null&&f.key!==""&&(h.uint32(10),h.string(f.key)),f.value!=null&&f.value.byteLength>0&&(h.uint32(18),h.bytes(f.value)),p.lengthDelimited!==!1&&h.ldelim()},(f,h,p={})=>{let y={key:"",value:de(0)},g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{y.key=f.string();break}case 2:{y.value=f.bytes();break}default:{f.skipType(m&7);break}}}return y},function*(f,h,p,y={}){let g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{yield{field:`${p}.key`,value:f.string()};break}case 2:{yield{field:`${p}.value`,value:f.bytes()};break}default:{f.skipType(m&7);break}}}})),c);function l(f){return he(f,a.codec())}a.encode=l;function u(f,h){return fe(f,a.codec(),h)}a.decode=u;function d(f,h){return pe(f,a.codec(),h)}a.stream=d})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(a){let c;a.codec=()=>(c==null&&(c=me((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.key!=null&&f.key!==""&&(h.uint32(10),h.string(f.key)),f.value!=null&&(h.uint32(18),nd.codec().encode(f.value,h)),p.lengthDelimited!==!1&&h.ldelim()},(f,h,p={})=>{let y={key:""},g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{y.key=f.string();break}case 2:{y.value=nd.codec().decode(f,f.uint32(),{limits:p.limits?.value});break}default:{f.skipType(m&7);break}}}return y},function*(f,h,p,y={}){let g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{yield{field:`${p}.key`,value:f.string()};break}case 2:{yield*nd.codec().stream(f,f.uint32(),`${p}.value`,{limits:y.limits?.value});break}default:{f.skipType(m&7);break}}}})),c);function l(f){return he(f,a.codec())}a.encode=l;function u(f,h){return fe(f,a.codec(),h)}a.decode=u;function d(f,h){return pe(f,a.codec(),h)}a.stream=d})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{if(l.lengthDelimited!==!1&&c.fork(),a.addresses!=null&&a.addresses.length>0)for(let u of a.addresses)c.uint32(10),rd.codec().encode(u,c);if(a.protocols!=null&&a.protocols.length>0)for(let u of a.protocols)c.uint32(18),c.string(u);if(a.publicKey!=null&&(c.uint32(34),c.bytes(a.publicKey)),a.peerRecordEnvelope!=null&&(c.uint32(42),c.bytes(a.peerRecordEnvelope)),a.metadata!=null&&a.metadata.size>0)for(let[u,d]of a.metadata.entries())c.uint32(50),r.Peer$metadataEntry.codec().encode({key:u,value:d},c);if(a.tags!=null&&a.tags.size>0)for(let[u,d]of a.tags.entries())c.uint32(58),r.Peer$tagsEntry.codec().encode({key:u,value:d},c);a.updated!=null&&(c.uint32(64),c.uint64Number(a.updated)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={addresses:[],protocols:[],metadata:new Map,tags:new Map},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{if(l.limits?.addresses!=null&&u.addresses.length===l.limits.addresses)throw new Ee('Decode error - repeated field "addresses" had too many elements');u.addresses.push(rd.codec().decode(a,a.uint32(),{limits:l.limits?.addresses$}));break}case 2:{if(l.limits?.protocols!=null&&u.protocols.length===l.limits.protocols)throw new Ee('Decode error - repeated field "protocols" had too many elements');u.protocols.push(a.string());break}case 4:{u.publicKey=a.bytes();break}case 5:{u.peerRecordEnvelope=a.bytes();break}case 6:{if(l.limits?.metadata!=null&&u.metadata.size===l.limits.metadata)throw new Bl('Decode error - map field "metadata" had too many elements');let h=r.Peer$metadataEntry.codec().decode(a,a.uint32(),{limits:{value:l.limits?.metadata$value}});u.metadata.set(h.key,h.value);break}case 7:{if(l.limits?.tags!=null&&u.tags.size===l.limits.tags)throw new Bl('Decode error - map field "tags" had too many elements');let h=r.Peer$tagsEntry.codec().decode(a,a.uint32(),{limits:{value:l.limits?.tags$value}});u.tags.set(h.key,h.value);break}case 8:{u.updated=a.uint64Number();break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d={addresses:0,protocols:0,metadata:0,tags:0},f=c==null?a.len:a.pos+c;for(;a.pos<f;){let h=a.uint32();switch(h>>>3){case 1:{if(u.limits?.addresses!=null&&d.addresses===u.limits.addresses)throw new Ee('Streaming decode error - repeated field "addresses" had too many elements');for(let p of rd.codec().stream(a,a.uint32(),`${l}.addresses[]`,{limits:u.limits?.addresses$}))yield{...p,index:d.addresses};d.addresses++;break}case 2:{if(u.limits?.protocols!=null&&d.protocols===u.limits.protocols)throw new Ee('Streaming decode error - repeated field "protocols" had too many elements');yield{field:`${l}.protocols[]`,index:d.protocols,value:a.string()},d.protocols++;break}case 4:{yield{field:`${l}.publicKey`,value:a.bytes()};break}case 5:{yield{field:`${l}.peerRecordEnvelope`,value:a.bytes()};break}case 6:{if(u.limits?.metadata!=null&&d.metadata===u.limits.metadata)throw new Ee('Decode error - map field "metadata" had too many elements');yield*r.Peer$metadataEntry.codec().stream(a,a.uint32(),`${l}.metadata{}`,{limits:{value:u.limits?.metadata$value}}),d.metadata++;break}case 7:{if(u.limits?.tags!=null&&d.tags===u.limits.tags)throw new Ee('Decode error - map field "tags" had too many elements');yield*r.Peer$tagsEntry.codec().stream(a,a.uint32(),`${l}.tags{}`,{limits:{value:u.limits?.tags$value}}),d.tags++;break}case 8:{yield{field:`${l}.updated`,value:a.uint64Number()};break}default:{a.skipType(h&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(Yo||(Yo={}));var rd;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.multiaddr!=null&&i.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(i.multiaddr)),i.isCertified!=null&&(s.uint32(16),s.bool(i.isCertified)),i.observed!=null&&(s.uint32(24),s.uint64Number(i.observed)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={multiaddr:de(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.multiaddr=i.bytes();break}case 2:{c.isCertified=i.bool();break}case 3:{c.observed=i.uint64Number();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.multiaddr`,value:i.bytes()};break}case 2:{yield{field:`${a}.isCertified`,value:i.bool()};break}case 3:{yield{field:`${a}.observed`,value:i.uint64Number()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(rd||(rd={}));var nd;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.value!=null&&i.value!==0&&(s.uint32(8),s.uint32(i.value)),i.expiry!=null&&(s.uint32(16),s.uint64(i.expiry)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={value:0},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.value=i.uint32();break}case 2:{c.expiry=i.uint64();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.value`,value:i.uint32()};break}case 2:{yield{field:`${a}.expiry`,value:i.uint64()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(nd||(nd={}));function pM(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;r.type==="RSA"&&(t=r.toMultihash());let n=pt(e.publicKey,t);return io(n)}function $S(r,e,t){let n=Yo.decode(e);return Nc(r,n,t)}function Nc(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[i,s]of e.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...e,id:pM(r,e),addresses:e.addresses.filter(({observed:i})=>i!=null&&i>Date.now()-t).map(({multiaddr:i,isCertified:s})=>({multiaddr:j(i),isCertified:s??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function VS(r,e){return mM(r.addresses,e.addresses)&&gM(r.protocols,e.protocols)&&yM(r.publicKey,e.publicKey)&&wM(r.peerRecordEnvelope,e.peerRecordEnvelope)&&bM(r.metadata,e.metadata)&&xM(r.tags,e.tags)}function mM(r,e){return HS(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!se(t.multiaddr,n.multiaddr)))}function gM(r,e){return HS(r,e,(t,n)=>t===n)}function yM(r,e){return KS(r,e)}function wM(r,e){return KS(r,e)}function bM(r,e){return qS(r,e,(t,n)=>se(t,n))}function xM(r,e){return qS(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function KS(r,e){return r==null&&e==null?!0:r!=null&&e!=null?se(r,e):!1}function HS(r,e,t){if(r.length!==e.length)return!1;for(let n=0;n<r.length;n++)if(!t(r[n],e[n]))return!1;return!0}function qS(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let i=e.get(n);if(i==null||!t(o,i))return!1}return!0}var S8="/peers/";function od(r){if(!Gt(r)||r.type==null)throw new _("Invalid PeerId");let e=r.toCID().toString();return new Ze(`${S8}${e}`)}async function zS(r,e,t,n,o){let i=new Map;for(let s of t){if(s==null)continue;if(s.multiaddr instanceof Uint8Array&&(s.multiaddr=j(s.multiaddr)),!Jn(s.multiaddr))throw new _("Multiaddr was invalid");if(!await e(r,s.multiaddr,o))continue;let a=s.isCertified??!1,c=s.multiaddr.toString(),l=i.get(c);l!=null?s.isCertified=l.isCertified||a:i.set(c,{multiaddr:s.multiaddr,isCertified:a})}return[...i.values()].sort((s,a)=>s.multiaddr.toString().localeCompare(a.multiaddr.toString())).map(({isCertified:s,multiaddr:a})=>{let c=a.getComponents().find(l=>l.code===421)?.value;return r.equals(c)&&(a=a.decapsulate(j(`/p2p/${r}`))),{isCertified:s,multiaddr:a.bytes}})}async function Np(r,e,t,n){if(e==null)throw new _("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new _("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new _("peer id did not match existing peer id");let i=o?.addresses??[],s=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)&&(i=[],e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Dp(f,{validate:WS})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Dp(f,{validate:GS,map:YS})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...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=Dp([...a.entries()],{validate:WS})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,y]of f)y==null?h.delete(p):h.set(p,y);c=Dp([...h.entries()],{validate:GS,map:YS})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;o?.id.publicKey!=null?u=_t(o.id.publicKey):e.publicKey!=null?u=_t(e.publicKey):r.publicKey!=null&&(u=_t(r.publicKey));let d={addresses:await zS(r,n.addressFilter??(async()=>!0),i,n.existingPeer?.peerPB.addresses,n),protocols:[...s.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return d.addresses.forEach(f=>{f.observed=n.existingPeer?.peerPB.addresses?.find(h=>se(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete d.publicKey,d}function Dp(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(([i],[s])=>i.localeCompare(s)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function WS(r,e){if(typeof r!="string")throw new _("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new _("Metadata value must be a Uint8Array")}function GS(r,e){if(typeof r!="string")throw new _("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new _("Tag value must be an integer");if(e.value<0||e.value>100)throw new _("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new _("Tag ttl must be an integer");if(e.ttl<0)throw new _("Tag ttl must be between greater than 0")}}function YS(r,e){let t;e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl)));let n={value:e.value??0};return t!=null&&(n.expiry=t),n}function jS(r){let e=r.toString().split("/")[2],t=J.parse(e,At);return Dn(t)}function A8(r,e,t){let n=jS(r);return $S(n,e,t)}function EM(r,e){return{prefix:S8,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(A8(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(A8(n.key,n.value,e),A8(o.key,o.value,e)))}}var Op=class{peerId;datastore;locks;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.locks=Ho({name:"libp2p_peer_store_locks",metrics:e.metrics}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}getLock(e){let t=this.locks.get(e);return t==null&&(t={refs:0,lock:xu({name:e.toString(),singleProcess:!0})},this.locks.set(e,t)),t.refs++,t}maybeRemoveLock(e,t){t.refs--,t.refs===0&&(t.lock.finalize(),this.locks.delete(e))}async getReadLock(e,t){let n=this.getLock(e);try{let o=await n.lock.readLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async getWriteLock(e,t){let n=this.getLock(e);try{let o=await n.lock.writeLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async has(e,t){try{return await this.load(e,t),!0}catch(n){if(n.name!=="NotFoundError")throw n}return!1}async delete(e,t){this.peerId.equals(e)||await this.datastore.delete(od(e),t)}async load(e,t){let n=od(e),o=await this.datastore.get(n,t),i=Yo.decode(o);if(this.#r(e,i))throw await this.datastore.delete(n,t),new We;return Nc(e,i,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t,n){let o=await this.#e(e,n),i=await Np(e,t,"patch",{...n,addressFilter:this.addressFilter});return this.#t(e,i,o)}async patch(e,t,n){let o=await this.#e(e,n),i=await Np(e,t,"patch",{...n,addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,o)}async merge(e,t,n){let o=await this.#e(e,n),i=await Np(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(EM(e??{},this.maxAddressAge),e)){let o=jS(t);if(o.equals(this.peerId))continue;let i=Yo.decode(n);if(this.#r(o,i)){await this.datastore.delete(t,e);continue}yield Nc(o,i,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e,t){try{let n=od(e),o=await this.datastore.get(n,t),i=Yo.decode(o);if(this.#r(e,i))throw await this.datastore.delete(n,t),new We;return{peerPB:i,peer:Nc(e,i,this.maxAddressAge)}}catch(n){n.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",n)}}async#t(e,t,n,o){t.updated=Date.now();let i=Yo.encode(t);return await this.datastore.put(od(e),i,o),{peer:Nc(e,t,this.maxAddressAge),previous:n?.peer,updated:n==null||!VS(t,n.peerPB)}}#r(e,t){if(t.updated==null)return!0;if(this.peerId.equals(e))return!1;let n=t.updated<Date.now()-this.maxPeerAge,o=Date.now()-this.maxAddressAge,i=t.addresses.filter(s=>s.observed!=null&&s.observed>o);return n&&i.length===0}};var T8=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 Op(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){for await(let n of this.store.all(t))e(n)}async all(e){return Wo(this.store.all(e))}async delete(e,t){let n=await this.store.getReadLock(e,t);try{await this.store.delete(e,t)}finally{n()}}async has(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.has(e,t)}finally{this.log.trace("has release read lock"),n?.()}}async get(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.load(e,t)}finally{n?.()}}async getInfo(e,t){let n=await this.get(e,t);return{id:n.id,multiaddrs:n.addresses.map(({multiaddr:o})=>o)}}async save(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.save(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async patch(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.patch(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async merge(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.merge(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async consumePeerRecord(e,t,n){let o=Gt(t)?t:Gt(t?.expectedPeer)?t.expectedPeer:void 0,i=Gt(t)||t===void 0?n:t,s=await Yr.openAndCertify(e,pr.DOMAIN,i),a=Dn(s.publicKey.toCID());if(o?.equals(a)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",o,a),!1;let c=pr.createFromProtobuf(s.payload),l;try{l=await this.get(a,i)}catch(u){if(u.name!=="NotFoundError")throw u}if(l?.peerRecordEnvelope!=null){let u=Yr.createFromProtobuf(l.peerRecordEnvelope),d=pr.createFromProtobuf(u.payload);if(d.seqNumber>=c.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",d.seqNumber,c.seqNumber),!1}return await this.patch(c.peerId,{peerRecordEnvelope:e,addresses:c.multiaddrs.map(u=>({isCertified:!0,multiaddr:u}))},i),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function XS(r,e={}){return new T8(r,e)}var QS=864e13;var Bp=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=yt({name:"libp2p_address_manager_dns_mappings",metrics:e.metrics})}has(e){let t=ce(e),n=t.host;(t.type==="ip4"||t.type==="ip6")&&t.sni!=null&&(n=t.sni);for(let o of this.mappings.values())if(o.domain===n)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=ja(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?QS-Date.now():0,lastVerified:o?QS-Date.now():void 0})})}remove(e){let t=ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,i]of this.mappings.entries())i.domain===t.sni&&(this.log("removing %s to %s DNS mapping %e",o,i.domain),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n].multiaddr;if(!Ut(o))continue;let i=ce(o);for(let[s,a]of this.mappings.entries()){if(i.host!==s)continue;let c=this.maybeAddSNIComponent(o,a.domain);c!=null&&(e.splice(n,1),n--,t.push({multiaddr:c,verified:a.verified,type:"dns-mapping",expires:a.expires,lastVerified:a.lastVerified}))}}return t}maybeAddSNIComponent(e,t){let n=e.getComponents();for(let o=0;o<n.length;o++)if(n[o].code===448&&n[o+1]?.code!==449)return n.splice(o+1,0,{name:"sni",code:449,value:t}),j(n)}confirm(e,t){let n=ce(e),o=n.host;(n.type==="ip4"||n.type==="ip6")&&n.sni!=null&&(o=n.sni);let i=!1;for(let[s,a]of this.mappings.entries())a.domain===o&&(this.log("marking %s to %s DNS mapping as verified",s,a.domain),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=ce(e);if(n.type!=="ip4"&&n.type!=="ip6")return!1;let o=n.sni??n.host,i=!1;for(let[s,a]of this.mappings.entries())a.domain===o&&(this.log("removing verification of %s to %s DNS mapping",s,a.domain),i=i||a.verified,a.verified=!1,a.expires=Date.now()+t);return i}};var Mp=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=yt({name:"libp2p_address_manager_ip_mappings",metrics:e.metrics})}has(e){let t=ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t.host)return!0;return!1}add(e,t,n,o=t,i="tcp"){let s=`${e}-${t}-${i}`,a=this.mappings.get(s)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:vn(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,i]of this.mappings.entries()){for(let s=0;s<i.length;s++){let a=i[s];a.externalIp===t.host&&a.externalPort===t.port&&a.protocol===t.protocol&&(this.log("removing %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,t.host,t.port,t.protocol),n=n||a.verified,i.splice(s,1),s--)}i.length===0&&this.mappings.delete(o)}return n}getAll(e){let t=[];for(let{multiaddr:n}of e){if(!Ut(n))continue;let o=ce(n);if(o.type!=="ip4"&&o.type!=="ip6")continue;let i;if(o.protocol==="tcp"?i=`${o.host}-${o.port}-tcp`:o.protocol==="udp"&&(i=`${o.host}-${o.port}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)t.push({multiaddr:this.maybeOverrideIp(n,a.externalIp,a.externalFamily,a.protocol,a.externalPort),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}maybeOverrideIp(e,t,n,o,i){let s=e.getComponents(),a=s.findIndex(l=>l.code===4||l.code===41),c=s.findIndex(l=>l.name===o);return a>-1&&c>-1?(s[a].value=t,s[a].code=n===4?4:41,s[c].value=`${i}`,j(s)):e}confirm(e,t){if(!Ut(e))return!1;let n=ce(e),o=!1;for(let i of this.mappings.values())for(let s of i)s.externalIp===n.host&&(this.log("marking %s to %s IP mapping as verified",s.internalIp,s.externalIp),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){if(!Ut(e))return!1;let n=ce(e),o=!1;for(let i of this.mappings.values())for(let s=0;s<i.length;s++){let a=i[s];a.externalIp===n.host&&a.externalPort===n.port&&a.protocol===n.protocol&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,n.host,n.port,n.protocol),o=o||a.verified,a.verified=!1,a.expires=Date.now()+t)}return o}};var vM={maxObservedAddresses:10},Up=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=yt({name:"libp2p_address_manager_observed_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??vM.maxObservedAddresses}has(e){return this.addresses.has(e.toString())}removePrefixed(e){for(let t of this.addresses.keys())t.toString().startsWith(e)&&this.addresses.delete(t)}add(e){this.addresses.size!==this.maxObservedAddresses&&(ut(e)||dw(e)||(this.log("adding observed address %a",e),this.addresses.set(e.toString(),{verified:!1,expires:0})))}getAll(){return Array.from(this.addresses).map(([e,t])=>({multiaddr:j(e),verified:t.verified,type:"observed",expires:t.expires,lastVerified:t.lastVerified}))}remove(e){let t=this.addresses.get(e.toString())?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(e.toString()),t}confirm(e,t){let n=e.toString(),o=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,o),i}};var SM={maxObservedAddresses:10},Fp=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=yt({name:"libp2p_address_manager_transport_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??SM.maxObservedAddresses}get(e,t){if(ut(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),o=this.addresses.get(n);return o==null&&(o={verified:!Ut(e),expires:0},this.addresses.set(n,o)),{multiaddr:e,verified:o.verified,type:"transport",expires:o.expires,lastVerified:o.lastVerified}}has(e){let t=this.toKey(e);return this.addresses.has(t)}remove(e){let t=this.toKey(e),n=this.addresses.get(t)?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(t),n}confirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),i}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},i=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),i}toKey(e){if(!Ut(e))return e.toString();let t=ce(e);return`${t.host}-${t.port}-${t.protocol}`}};var ZS=6e4,JS={maxObservedAddresses:10,addressVerificationTTL:ZS*10,addressVerificationRetry:ZS*5},AM=r=>r;function _8(r,e){let t=r.getComponents().findLast(n=>n.code===421)?.value;return t!=null&&Xe(t).equals(e)&&(r=r.decapsulate(j(`/p2p/${e.toString()}`))),r}var $p=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:i=[]}=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.appendAnnounce=new Set(i.map(s=>s.toString())),this.observed=new Up(e,t),this.dnsMappings=new Bp(e,t),this.ipMappings=new Mp(e,t),this.transportAddresses=new Fp(e,t),this.announceFilter=t.announceFilter??AM,this.observedAddressFilter=Mt(1024),this.addressVerificationTTL=t.addressVerificationTTL??JS.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??JS.addressVerificationRetry,this._updatePeerStoreAddresses=Ro(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.getAddresses().map(t=>t.getComponents().findLast(n=>n.code===421)?.value===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 - %e",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>j(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>j(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>j(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=ce(e),n;switch(t.type){case"ip4":{n=`${t.host}:${t.port}`;break}case"ip6":{n=`[${t.host}]:${t.port}`;break}default:return}this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=_8(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=_8(e,this.components.peerId);let n=!0;(t?.type==="transport"||this.transportAddresses.has(e))&&!this.transportAddresses.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="dns-mapping"||this.dnsMappings.has(e))&&!this.dnsMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="ip-mapping"||this.ipMappings.has(e))&&!this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="observed"||this.observed.has(e))&&(this.maybeUpgradeToIPMapping(e)?(this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL),n=!1):!this.observed.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1)),n||this._updatePeerStoreAddresses()}removeObservedAddr(e,t){e=_8(e,this.components.peerId);let n=!1;this.observed.has(e)&&!this.observed.remove(e)&&n&&(n=!1),this.transportAddresses.has(e)&&!this.transportAddresses.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.dnsMappings.has(e)&&!this.dnsMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.ipMappings.has(e)&&!this.ipMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),n&&this._updatePeerStoreAddresses()}getAddresses(){let e=new Set,t=this.getAddressesWithMetadata().filter(n=>{if(!n.verified)return!1;let o=n.multiaddr.toString();return e.has(o)?!1:(e.add(o),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let o=j(n);return o.getComponents().pop()?.value===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(e)}),e.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];t=t.concat(this.components.transportManager.getAddrs().map(o=>this.transportAddresses.get(o,this.addressVerificationTTL)));let n=this.getAppendAnnounceAddrs();return n.length>0&&(this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(n)}),t=t.concat(n.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()})))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove(j(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${vn(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove(j(`/ip${vn(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e)||!Ut(e))return!1;let t=ce(e);if(t.type!=="ip4"||ja(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>zo.exactMatch(i)||ta.exactMatch(i),i=>ea.exactMatch(i),i=>eS.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(u=>ce(u).type==="ip4"&&i(u)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>!Gl(l)).pop();if(a==null)continue;let c=ce(a);return c.port==null?!1:(this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.protocol),!0)}return!1}};var eA;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(eA||(eA={}));var Vp=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},Kp=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},Oc=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},id=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Hp=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},qp=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},zp=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},sd=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Wp=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},Gp=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},Yp=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},jp=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},Xp=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},$i=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},sa=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Qp=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}},Zp=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}};var I8=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=uc())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>gf(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")}},TM=["metrics","connectionProtector","dns"],_M=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function tA(r={}){let e=new I8(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!_M.includes(o)){let s=e.components[o];if(s==null&&!TM.includes(o))throw new Vp(`${o} not set`);return s}return Reflect.get(n,o,i)},set(n,o,i){return typeof o=="string"?e.components[o]=i:Reflect.set(n,o,i),!0}})}function rA(r){let e={};for(let t of Object.values(r.components))for(let n of IM(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of CM(t))if(e[n]!==!0)throw new Kp(`Service "${kM(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function IM(r){return Array.isArray(r?.[Te])?r[Te]:[]}function CM(r){return Array.isArray(r?.[Ir])?r[Ir]:[]}function kM(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function nA(r={}){return r.denyDialMultiaddr==null&&(r.denyDialMultiaddr=e=>zo.matches(e)?!0:ut(e)),r}function Jp(r){if(Gt(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getComponents().findLast(o=>o.code===421)?.value;t=n==null?void 0:Xe(n),e.forEach(o=>{if(!Jn(o))throw new qn("Invalid multiaddr");let i=o.getComponents().findLast(s=>s.code===421)?.value;if(i==null){if(t!=null)throw new _("Multiaddrs must all have the same peer id or have no peer id")}else{let s=Xe(i);if(t?.equals(s)!==!0)throw new _("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!jv.exactMatch(n)),{peerId:t,multiaddrs:e}}var RM=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function oA(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??RM;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}function ad(r){let e=ce(r),t=e.cidr;if(e.type!=="ip4"&&e.type!=="ip6")throw new _(`Multiaddr ${r} was not an IPv4 or IPv6 address`);if(t==null)switch(e.type){case"ip4":{t=32;break}case"ip6":{t=128;break}default:throw new _(`Multiaddr ${r} was not an IPv4 or IPv6 address`)}return new Ds(e.host,t)}function C8(r){return!Nt.exactMatch(r)}function e0(r,e,t){if(r==null||e==null)return;let n=e.filter(i=>i.status==="open").sort((i,s)=>i.direct?-1:s.direct?1:0).find(i=>i.limits==null);if(n==null||n.direct||t==null)return n;if(!t.some(i=>C8(i)))return n}var t0=class{connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.allow=(t.allow??[]).map(n=>ad(n)),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,n=this.connectionManager.getMaxConnections();if(this.log("checking max connections limit %d/%d",t,n),t<=n)return;let o=new er;for(let c of e){let l=c.remotePeer;if(!o.has(l)){o.set(l,0);try{let u=await this.peerStore.get(l);o.set(l,[...u.tags.values()].reduce((d,f)=>d+f.value,0))}catch(u){u.name!=="NotFoundError"&&this.log.error("error loading peer tags - %e",u)}}}let i=this.sortConnections(e,o),s=Math.max(t-n,0),a=[];for(let c of i)if(this.log("too many connections open - closing a connection to %p",c.remotePeer),this.allow.some(u=>{if(Ut(c.remoteAddr)){let d=ce(c.remoteAddr);return u.contains(d.host)}return!0})||a.push(c),a.length===s)break;await Promise.all(a.map(async c=>{await oA(c,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:a})}sortConnections(e,t){return e.sort((n,o)=>{let i=n.timeline.open,s=o.timeline.open;return i<s?1:i>s?-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 i=t.get(n.remotePeer)??0,s=t.get(o.remotePeer)??0;return i>s?1:i<s?-1:0})}};var iA="last-dial-failure",sA="last-dial-success";var aA=100,r0=50;function PM(r,e){let t=ea.exactMatch(r.multiaddr),n=ea.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=ta.exactMatch(r.multiaddr),i=ta.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=zo.exactMatch(r.multiaddr),a=zo.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=Wu.exactMatch(r.multiaddr),l=Wu.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let u=zu.exactMatch(r.multiaddr),d=zu.exactMatch(e.multiaddr);if(u&&!d)return-1;if(!u&&d)return 1;let f=z6.exactMatch(r.multiaddr),h=z6.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function LM(r,e){let t=Gl(r.multiaddr),n=Gl(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function DM(r,e){let t=ut(r.multiaddr),n=ut(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function NM(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function OM(r,e){let t=Nt.exactMatch(r.multiaddr),n=Nt.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function cA(r){return r.sort(PM).sort(NM).sort(OM).sort(DM).sort(LM)}var k8=class{dns;canResolve(e){return e.getComponents().some(({name:t})=>t==="dnsaddr")}async resolve(e,t){let n=e.getComponents().find(c=>c.name==="dnsaddr")?.value;if(n==null)return[e];let i=await this.getDNS(t).query(`_dnsaddr.${n}`,{signal:t?.signal,types:[Cr.TXT]}),s=e.getComponents().find(c=>c.name==="p2p")?.value,a=[];for(let c of i.Answer){let l=c.data.replace(/["']/g,"").trim().split("=")[1];l!=null&&(s!=null&&!l.includes(s)||a.push(j(l)))}return a}getDNS(e){return e.dns!=null?e.dns:(this.dns==null&&(this.dns=_f()),this.dns)}},cd=new k8;async function R8(r,e,t){let n=t.depth??0;if(n>(t.maxRecursiveDepth??32))throw new Zp("Max recursive depth reached");let o=!1,i=[];for(let s of Object.values(e))if(s.canResolve(r)){o=!0;let a=await s.resolve(r,t);for(let c of a)i.push(...await R8(c,e,{...t,depth:n+1}))}return o===!1&&i.push(r),i}var ld={maxParallelDials:r0,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:cd}},n0=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;resolvers;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??ld.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??ld.maxDialQueueLength,this.dialTimeout=t.dialTimeout??ld.dialTimeout,this.connections=t.connections??new er,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.resolvers=t.resolvers??ld.resolvers,this.shutDownController=new AbortController,this.shutDownController.signal,this.queue=new Fh({concurrency:t.maxParallelDials??ld.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("failure",n=>{n.detail?.error.name!==sr.name&&this.log.error("error in dial queue - %e",n.detail.error)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Jp(e);if(n!=null&&t.force!==!0){let s=e0(n,this.connections.get(n),o);if(s!=null)return this.log("already connected to %a",s.remoteAddr),t.onProgress?.(new K("dial-queue:already-connected")),s}let i=this.queue.queue.find(s=>{if(n?.equals(s.options.peerId)===!0)return!0;let a=s.options.multiaddrs;if(a==null)return!1;for(let c of o)if(a.has(c.toString()))return!0;return!1});if(i!=null){this.log("joining existing dial target for %p",n);for(let s of o)i.options.multiaddrs.add(s.toString());return t.onProgress?.(new K("dial-queue:already-in-dial-queue")),i.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new ai("Dial queue is full");return this.log("creating dial target for %p",n,o.map(s=>s.toString())),t.onProgress?.(new K("dial-queue:add-to-dial-queue")),this.queue.add(async s=>{s.onProgress?.(new K("dial-queue:start-dial"));let a=we([this.shutDownController.signal,s.signal]);try{return await this.dialPeer(s,a)}finally{a.clear()}},{peerId:n,priority:t.priority??N8,multiaddrs:new Set(o.map(s=>s.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,i=new Set,s=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);s||o.size>0;){c++,s=!1;let u=[],d=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...d]);let f=await this.calculateMultiaddrs(n,d,{...e,signal:t});for(let h of f){if(i.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}u.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,u.map(h=>h.multiaddr.toString())),e?.onProgress?.(new K("dial-queue:calculated-addresses",u));for(let h of u){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new ai("Peer had more than maxPeerAddrsToDial");a++;try{let p=await this.components.transportManager.dial(h.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",h.multiaddr);try{await this.components.peerStore.merge(p.remotePeer,{multiaddrs:[p.remoteAddr],metadata:{[sA]:R(Date.now().toString())}})}catch(y){this.log.error("could not update last dial failure key for %p - %e",n,y)}return p}catch(p){if(this.log.error("dial failed to %a - %e",h.multiaddr,p),i.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[iA]:R(Date.now().toString())}})}catch(y){this.log.error("could not update last dial failure key for %p - %e",n,y)}if(t.aborted)throw new zn(p.message);l.push(p)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(d=>({multiaddr:j(d),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new ai("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new sd("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let d=await this.components.peerStore.get(e);o.push(...d.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(d){if(d.name!=="NotFoundError")throw d}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let d=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...d.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(d){d.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,d)}}}let i=(await Promise.all(o.map(async d=>{let f=await R8(d.multiaddr,this.resolvers,{dns:this.components.dns,log:this.log,...n});return f.length===1&&f[0].equals(d.multiaddr)?d:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let d=`/p2p/${e.toString()}`;i=i.map(f=>f.multiaddr.getComponents().pop()?.name!=="p2p"?{multiaddr:f.multiaddr.encapsulate(d),isCertified:f.isCertified}:f)}let s=i.filter(d=>{if(this.components.transportManager.dialTransportForMultiaddr(d.multiaddr)==null)return!1;let f=d.multiaddr.getComponents().findLast(h=>h.code===421)?.value;return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let d of s){let f=d.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||d.isCertified||!1;continue}a.set(f,d)}let c=[...a.values()];if(c.length===0)throw new Yp("The dial request has no valid addresses");let l=[];for(let d of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(d.multiaddr)||l.push(d);let u=this.addressSorter==null?cA(l):l.sort(this.addressSorter);if(u.length===0)throw new sd("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:d})=>d.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:d})=>d.toString())),u}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=>!Nt.matches(o.multiaddr))!=null:!0}catch{}return!1}};var BM=Object.prototype.toString,MM=r=>BM.call(r)==="[object Error]",UM=new Set(["network error","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]);function O8(r){if(!(r&&MM(r)&&r.name==="TypeError"&&typeof r.message=="string"))return!1;let{message:t,stack:n}=r;return t==="Load failed"?n===void 0||"__sentry_captured__"in r:t.startsWith("error sending request for url")||t==="Failed to fetch"||t.startsWith("Failed to fetch (")&&t.endsWith(")")?!0:UM.has(t)}function FM(r){if(typeof r=="number"){if(r<0)throw new TypeError("Expected `retries` to be a non-negative number.");if(Number.isNaN(r))throw new TypeError("Expected `retries` to be a valid number or Infinity, got NaN.")}else if(r!==void 0)throw new TypeError("Expected `retries` to be a number or Infinity.")}function o0(r,e,{min:t=0,allowInfinity:n=!1}={}){if(e!==void 0){if(typeof e!="number"||Number.isNaN(e))throw new TypeError(`Expected \`${r}\` to be a number${n?" or Infinity":""}.`);if(!n&&!Number.isFinite(e))throw new TypeError(`Expected \`${r}\` to be a finite number.`);if(e<t)throw new TypeError(`Expected \`${r}\` to be \u2265 ${t}.`)}}var B8=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}};function $M(r,e){let t=Math.max(1,r+1),n=e.randomize?Math.random()+1:1,o=Math.round(n*e.minTimeout*e.factor**(t-1));return o=Math.min(o,e.maxTimeout),o}function lA(r,e){return Number.isFinite(e)?e-(performance.now()-r):e}async function VM({error:r,attemptNumber:e,retriesConsumed:t,startTime:n,options:o}){let i=r instanceof Error?r:new TypeError(`Non-error was thrown: "${r}". You should only throw errors.`);if(i instanceof B8)throw i.originalError;let s=Number.isFinite(o.retries)?Math.max(0,o.retries-t):o.retries,a=o.maxRetryTime??Number.POSITIVE_INFINITY,c=Object.freeze({error:i,attemptNumber:e,retriesLeft:s,retriesConsumed:t});if(await o.onFailedAttempt(c),lA(n,a)<=0)throw i;let l=await o.shouldConsumeRetry(c),u=lA(n,a);if(u<=0||s<=0)throw i;if(i instanceof TypeError&&!O8(i)){if(l)throw i;return o.signal?.throwIfAborted(),!1}if(!await o.shouldRetry(c))throw i;if(!l)return o.signal?.throwIfAborted(),!1;let d=$M(t,o),f=Math.min(d,u);return o.signal?.throwIfAborted(),f>0&&await new Promise((h,p)=>{let y=()=>{clearTimeout(g),o.signal?.removeEventListener("abort",y),p(o.signal.reason)},g=setTimeout(()=>{o.signal?.removeEventListener("abort",y),h()},f);o.unref&&g.unref?.(),o.signal?.addEventListener("abort",y,{once:!0})}),o.signal?.throwIfAborted(),!0}async function M8(r,e={}){if(e={...e},FM(e.retries),Object.hasOwn(e,"forever"))throw new Error("The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.");e.retries??=10,e.factor??=2,e.minTimeout??=1e3,e.maxTimeout??=Number.POSITIVE_INFINITY,e.maxRetryTime??=Number.POSITIVE_INFINITY,e.randomize??=!1,e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.shouldConsumeRetry??=()=>!0,o0("factor",e.factor,{min:0,allowInfinity:!1}),o0("minTimeout",e.minTimeout,{min:0,allowInfinity:!1}),o0("maxTimeout",e.maxTimeout,{min:0,allowInfinity:!0}),o0("maxRetryTime",e.maxRetryTime,{min:0,allowInfinity:!0}),e.factor>0||(e.factor=1),e.signal?.throwIfAborted();let t=0,n=0,o=performance.now();for(;!Number.isFinite(e.retries)||n<=e.retries;){t++;try{e.signal?.throwIfAborted();let i=await r(t);return e.signal?.throwIfAborted(),i}catch(i){await VM({error:i,attemptNumber:t,retriesConsumed:n,startTime:o,options:e})&&n++}}throw new Error("Retry attempts exhausted without throwing an error.")}var i0=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;events;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new Kt({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,this.events=e.events,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,o)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);uA(t)&&(this.queue.has(e)||this.queue.add(async n=>{await M8(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(i){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,i),i}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(async n=>{this.log.error("failed to reconnect to %p - %e",e,n);let o={};[...t.tags.keys()].forEach(i=>{i.startsWith(cs)&&(o[i]=void 0)}),await this.peerStore.merge(e,{tags:o}),this.events.safeDispatchEvent("peer:reconnect-failure",{detail:e})}).catch(async n=>{this.log.error("failed to remove keep-alive tag from %p - %e",e,n)}))}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>uA(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error("could not open connection to keepalive peer - %e",n)})}))}).catch(e=>{this.log.error("error reconnect to peers after start - %e",e)})}stop(){this.started=!1,this.queue.abort()}};function uA(r){for(let e of r.tags.keys())if(e.startsWith(cs))return!0;return!1}var N8=50,U8={maxConnections:aA,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},s0=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??U8.maxConnections,this.maxConnections<1)throw new _("Connection Manager maxConnections must be greater than 0");this.connections=new er,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=>ad(j(n))),this.deny=(t.deny??[]).map(n=>ad(j(n))),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??U8.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new dc({points:t.inboundConnectionThreshold??U8.inboundConnectionThreshold,duration:1}),this.connectionPruner=new t0({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{allow:t.allow?.map(n=>j(n))}),this.dialQueue=new n0(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??r0,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:cd},connections:this.connections}),this.reconnectQueue=new i0({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 i=`${o.direction} ${o.protocol??"unnegotiated"}`;e[i]=(e[i]??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 i={};for(let s of o.streams){let a=`${s.direction} ${s.protocol??"unnegotiated"}`;i[a]=(i[a]??0)+1}for(let[s,a]of Object.entries(i))e[s]=e[s]??[],e[s].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((s,a)=>s-a);let i=Math.floor(o.length*.9);t[n]=o[i]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await xt(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 St(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push(Promise.all([Le(n,"close",{signal:AbortSignal.timeout(500)}),n.close({signal:AbortSignal.timeout(500)})]).catch(o=>{n.abort(o)}));this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}setMaxConnections(e){if(e<1)throw new _("Connection Manager maxConnections must be greater than 0");let t=!1;e<this.maxConnections&&(t=!0),this.maxConnections=e,t&&this.connectionPruner.maybePruneConnections()}onConnect(e){this._onConnect(e).catch(t=>{this.log.error("could not connect - %e",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),i=this.connections.get(n)??[];i.push(t),this.connections.set(n,i),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,i=(this.connections.get(n)??[]).filter(s=>s.id!==t.id);this.connections.set(n,i),i.length===0&&(this.log.trace("peer %p disconnected, removing connection map entry",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:n}))}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 pn("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n,multiaddrs:o}=Jp(e);if(this.peerId.equals(n))throw new va("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let c=e0(n,this.getConnections(n),o);if(c!=null)return this.log("had an existing connection to %p as %a",n,c.remoteAddr),t.onProgress?.(new K("dial-queue:already-connected")),c}let i=await this.dialQueue.dial(e,{...t,priority:t.priority??N8});if(i.status!=="open")throw new os("Remote closed connection during opening");let s=this.connections.get(i.remotePeer);s==null&&(s=[],this.connections.set(i.remotePeer,s));let a=!1;for(let c of s)if(c.id===i.id&&(a=!0),t.force!==!0&&c.id!==i.id&&c.remoteAddr.equals(i.remoteAddr))return i.abort(new qn("Duplicate multiaddr connection")),c;return a||s.push(i),i}finally{this.outboundPendingConnections--}}async openStream(e,t,n={}){return(await this.openConnection(e,n)).newStream(t,n)}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await Promise.all([Le(o,"close",t),o.close(t)])}catch(i){o.abort(i)}}))}acceptIncomingConnection(e){if(this.deny.some(o=>{if(Ut(e.remoteAddr)){let i=ce(e.remoteAddr);return o.contains(i.host)}return!1}))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>{if(Ut(e.remoteAddr)){let i=ce(e.remoteAddr);return o.contains(i.host)}return!0}))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(Ut(e.remoteAddr)){let o=ce(e.remoteAddr);try{this.inboundConnectionRateLimiter.consume(o.host,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o.host),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>j(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var qM=1e4,zM="1.0.0",WM="ping",GM="ipfs",dA=32,YM=!0,a0=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??GM}/${WM}/${zM}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??qM,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??YM,this.timeout=new Sn({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Te]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,this.abortController.signal,this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now(),n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal});try{let o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),i=mh(o);t=Date.now(),await Promise.all([i.write(dr(dA),{signal:n}),i.read({bytes:dA,signal:n})]),e.rtt=Date.now()-t,await o.close({signal:n})}catch(o){if(o.name!=="UnsupportedProtocolError")throw o;e.rtt=(Date.now()-t)/2}finally{this.timeout.cleanUp(n)}}).catch(t=>{this.log.error("error during heartbeat - %e",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 c0=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:N(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:N(n,"base36")})})??this.get}[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 Oc("No content routers available");let n=this,o=new Wr;for await(let i of fr(...n.routers.filter(s=>s.findProviders instanceof Function).map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new Oc("No content routers available");await Promise.all(this.routers.filter(n=>n.provide instanceof Function).map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new Oc("No content routers available");await Promise.all(this.routers.filter(n=>n.cancelReprovide instanceof Function).map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new pn;await Promise.all(this.routers.filter(o=>o.put instanceof Function).map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new pn;return Promise.any(this.routers.filter(n=>n.get instanceof Function).map(async n=>n.get(e,t)))}};var l0=globalThis.CustomEvent??Event;async function*jo(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=Se(),a=Se(),c=!1,l,u=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(i.length===t&&(s=Se(),await s.promise),u)break;let y={done:!1};i.push(y),p().then(g=>{y.done=!0,y.ok=!0,y.value=g,o.dispatchEvent(new l0("task-complete"))},g=>{y.done=!0,y.err=g,o.dispatchEvent(new l0("task-complete"))})}c=!0,o.dispatchEvent(new l0("task-complete"))}catch(p){l=p,o.dispatchEvent(new l0("task-complete"))}});function d(){return n?i[0]?.done:!!i.find(p=>p.done)}function*f(){for(;i.length>0&&i[0].done;){let p=i[0];if(i.shift(),p.ok)yield p.value;else throw u=!0,s.resolve(),p.err;s.resolve()}}function*h(){for(;d();)for(let p=0;p<i.length;p++)if(i[p].done){let y=i[p];if(i.splice(p,1),p--,y.ok)yield y.value;else throw u=!0,s.resolve(),y.err;s.resolve()}}for(;;){if(d()||(a=Se(),await a.promise),l!=null||(n?yield*f():yield*h(),l!=null))throw l;if(c&&i.length===0)break}}var u0=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??[],this.findPeer=e.metrics?.traceFunction("libp2p.peerRouting.findPeer",this.findPeer.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,key:N(n,"base36")}),getAttributesFromYieldedValue:(n,o)=>({...o,peers:[...Array.isArray(o.peers)?o.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new id("No peer routers available");if(e.toString()===this.peerId.toString())throw new Hp("Should not try to find self");let n=this,o=fr(...this.routers.filter(i=>i.findPeer instanceof Function).map(i=>(async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error("router failed to find peer - %e",s)}})()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),i;throw new We}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new id("No peer routers available");let n=this,o=Mt(1024);for await(let i of jo((async function*(){let s=fr(...n.routers.filter(a=>a.getClosestPeers instanceof Function).map(a=>a.getClosestPeers(e,t)));for await(let a of s)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 - %e",c);return}return a}})()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var d0=class extends ue{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,this.shutdownController.signal}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,this.shutdownController.signal}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=we([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=Se(),yield(await Le(this,"walk:peer",{signal:t,rejectionEvents:["walk:error"]})).detail}catch(n){throw n.detail!=null?n.detail:n}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,this.walkController.signal;let e=we([this.walkController.signal,this.shutdownController.signal]);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=dr(32),i=Date.now();for await(let s 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",s.id,Date.now()-i,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:s}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await qe(this.needNext.promise,e)),i=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("random walk errored - %e",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored - %e",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var F8=32,$8=64,f0=class{log;topologies;handlers;components;middleware;constructor(e){this.components=e,this.log=e.logger.forComponent("libp2p:registrar"),this.middleware=new Map,this.topologies=new Map,e.metrics?.registerMetricGroup("libp2p_registrar_topologies",{calculate:()=>{let t={};for(let[n,o]of this.topologies)t[n]=o.size;return t}}),this.handlers=yt({name:"libp2p_registrar_protocol_handlers",metrics:e.metrics}),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 qp(`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)&&n?.force!==!0)throw new zp(`Handler already registered for protocol ${e}`);this.handlers.set(e,{handler:t,options:{maxInboundStreams:F8,maxOutboundStreams:$8,...n}}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]},n)}async unhandle(e,t){(Array.isArray(e)?e:[e]).forEach(o=>{this.handlers.delete(o)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()},t)}async register(e,t){if(t==null)throw new _("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))}use(e,t){this.middleware.set(e,t)}unuse(e){this.middleware.delete(e)}getMiddleware(e){return this.middleware.get(e)??[]}async _onDisconnect(e){let t=e.detail,n={signal:AbortSignal.timeout(5e3)};try{let o=await this.components.peerStore.get(t,n);for(let i of o.protocols){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{a.filter!=null&&a.filter.has(t)!==!0||(a.filter?.remove(t),await a.onDisconnect?.(t))}))}}catch(o){if(o.name==="NotFoundError")return;this.log.error("could not inform topologies of disconnecting peer %p - %e",t,o)}}async _onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));try{for(let i of o){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{a.filter!=null&&a.filter.has(t.id)!==!0||(a.filter?.remove(t.id),await a.onDisconnect?.(t.id))}))}}catch(i){this.log.error("could not inform topologies of updated peer %p - %e",t.id,i)}}async _onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;try{for(let i of t){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),await a.onConnect?.(o,n))}))}}catch(i){this.log.error("could not inform topologies of updated peer after identify %p - %e",o,i)}}};var h0=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=yt({name:"libp2p_transport_manager_transports",metrics:this.components.metrics}),this.listeners=yt({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??al.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new _("Transport must have a valid tag");if(this.transports.has(t))throw new _(`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 Qp(`No transport available for address ${String(e)}`);return t?.onProgress?.(new K("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 pn("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t={errors:new Map,ipv4:{success:0,attempts:0},ipv6:{success:0,attempts:0}};e.forEach(i=>{t.errors.set(i.toString(),new Wp)});let n=[];for(let[i,s]of this.transports.entries()){let a=s.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",i,c);let l=s.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(i)??[];u==null&&(u=[],this.listeners.set(i,u)),u.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let d=u.findIndex(f=>f===l);u.splice(d,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),V6.matches(c)?t.ipv4.attempts++:K6.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),V6.matches(c)&&t.ipv4.success++,K6.matches(c)&&t.ipv6.success++},d=>{throw this.log.error("transport %s could not listen on address %a - %e",i,c,d),t.errors.set(c.toString(),d),d}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(i=>i.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===al.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new Gp(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
33
+ ${[...t.errors.entries()].map(([i,s])=>`
34
+ ${i}: ${`${jM(s)}`.split(`
35
35
  `).join(`
36
36
  `)}
37
- `).join("")}`)}}ipv6Unsupported(e){if(e.ipv4.attempts===0||e.ipv6.attempts===0)return!1;let t=e.ipv4.attempts===e.ipv4.success,n=e.ipv6.success===0;return t&&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)}};function rR(r){return r.stack!=null&&r.stack.trim()!==""?r.stack:r.message!=null?r.message:r.toString()}var Sn="/multistream/1.0.0";var nR=C(`
38
- `);async function Ll(r,e){let n=(await r.read(e)).subarray();if(n.byteLength===0||n[n.length-1]!==nR[0])throw new de("Missing newline");return R(n).trimEnd()}async function xa(r,e,t={}){if(e=Array.isArray(e)?[...e]:[e],e.length===0)throw new Error("At least one protocol must be specified");let n=r.log.newScope("mss:select"),o=Fo(r,{...t,maxDataLength:1024});for(let s=0;s<e.length;s++){let i=e[s],a;if(s===0){n.trace('write ["%s", "%s"]',Sn,i);let c=C(`${Sn}
39
- `),l=C(`${i}
40
- `);if(await o.writeV([c,l],t),n.trace("reading multistream-select header"),a=await Ll(o,t),n.trace('read "%s"',a),a!==Sn){n.error("did not read multistream-select header from response");break}}else n.trace('write "%s"',i),await o.write(C(`${i}
41
- `),t);if(n.trace("reading protocol response"),a=await Ll(o,t),n.trace('read "%s"',a),a===i)return n.trace('selected "%s" after negotiation',a),o.unwrap(),i}throw new pi(`Protocol selection failed - could not negotiate ${e}`)}async function va(r,e,t={}){e=Array.isArray(e)?e:[e];let n=r.log.newScope("mss:handle"),o=Fo(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){n.trace("reading incoming string");let s=await Ll(o,t);if(n.trace('read "%s"',s),s===Sn){n.trace('respond with "%s" for "%s"',Sn,s),await o.write(C(`${Sn}
42
- `),t),n.trace('responded with "%s" for "%s"',Sn,s);continue}if(e.includes(s))return n.trace('respond with "%s" for "%s"',s,s),await o.write(C(`${s}
43
- `),t),n.trace('responded with "%s" for "%s"',s,s),o.unwrap(),s;if(s==="ls"){let i=new X(...e.map(a=>Qn.single(C(`${a}
44
- `))),C(`
45
- `));n.trace('respond with "%s" for %s',e,s),await o.write(i,t),n.trace('responded with "%s" for %s',e,s);continue}n.trace('respond with "na" for "%s"',s),await o.write(C(`na
46
- `),t),n('responded with "na" for "%s"',s)}}var G3=class extends ie{id;remoteAddr;remotePeer;direction;timeline;direct;multiplexer;encryption;limits;log;maConn;muxer;components;outboundStreamProtocolNegotiationTimeout;inboundStreamProtocolNegotiationTimeout;closeTimeout;constructor(e,t){super(),this.components=e,this.id=t.id,this.remoteAddr=t.maConn.remoteAddr,this.remotePeer=t.remotePeer,this.direction=t.direction??"outbound",this.timeline=t.maConn.timeline,this.encryption=t.cryptoProtocol,this.limits=t.limits,this.maConn=t.maConn,this.log=t.maConn.log,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.closeTimeout=t.closeTimeout??1e3,this.direct=D3(t.maConn.remoteAddr),this.onIncomingStream=this.onIncomingStream.bind(this),this.remoteAddr.getComponents().find(n=>n.code===421)==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),t.muxer!=null&&(this.multiplexer=t.muxer.protocol,this.muxer=t.muxer,this.muxer.addEventListener("stream",this.onIncomingStream)),this.maConn.addEventListener("close",n=>{this.dispatchEvent(new xo(n.local,n.error))})}[Symbol.toStringTag]="Connection";[I6]=!0;get streams(){return this.muxer?.streams??[]}get status(){return this.maConn.status}newStream=async(e,t={})=>{if(this.muxer==null)throw new zo("Connection is not multiplexed");if(this.muxer.status!=="open")throw new is(`The connection muxer is "${this.muxer.status}" and not "open"`);if(this.maConn.status!=="open")throw new is(`The connection is "${this.status}" and not "open"`);if(this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new ja("Cannot open protocol stream on limited connection");Array.isArray(e)||(e=[e]),this.log.trace("starting new stream for protocols %s",e);let n=await this.muxer.createStream({...t,protocol:e.length===1?e[0]:void 0});this.log.trace("started new stream %s for protocols %s",n.id,e);try{if(t.signal==null){n.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",e);let a=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);t={...t,signal:a}}n.protocol===""?(n.log.trace("selecting protocol from protocols %s",e),n.protocol=await xa(n,e,t),n.log("negotiated protocol %s",n.protocol)):n.log("pre-negotiated protocol %s",n.protocol);let o=iR(n.protocol,this.components.registrar,t),s=Vw(n.protocol,"outbound",this);if(s>o){let a=new mi(`Too many outbound protocol streams for protocol "${n.protocol}" - ${s}/${o}`);throw n.abort(a),a}await this.components.peerStore.merge(this.remotePeer,{protocols:[n.protocol]}),this.components.metrics?.trackProtocolStream(n);let i=this.components.registrar.getMiddleware(n.protocol);return await this.runMiddlewareChain(n,this,i)}catch(o){throw n.status==="open"?n.abort(o):this.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",this.direction==="inbound"?"from":"to",this.remoteAddr,e,o),o}};async onIncomingStream(e){let t=e.detail,n=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);t.log("start protocol negotiation, timing out after %dms",this.inboundStreamProtocolNegotiationTimeout);try{if(t.protocol===""){let l=this.components.registrar.getProtocols();t.log.trace("selecting protocol from protocols %s",l),t.protocol=await va(t,l,{signal:n}),t.log("negotiated protocol %s",t.protocol)}else t.log("pre-negotiated protocol %s",t.protocol);let o=sR(t.protocol,this.components.registrar);if(Vw(t.protocol,"inbound",this)>o)throw new Iu(`Too many inbound protocol streams for protocol "${t.protocol}" - limit ${o}`);await this.components.peerStore.merge(this.remotePeer,{protocols:[t.protocol]},{signal:n}),this.components.metrics?.trackProtocolStream(t);let{handler:i,options:a}=this.components.registrar.getHandler(t.protocol);if(this.limits!=null&&a.runOnLimitedConnection!==!0)throw new ja("Cannot open protocol stream on limited connection");let c=this.components.registrar.getMiddleware(t.protocol);c.push(async(l,d,u)=>{await i(l,d),u(l,d)}),await this.runMiddlewareChain(t,this,c)}catch(o){t.abort(o)}}async runMiddlewareChain(e,t,n){for(let o=0;o<n.length;o++){let s=n[o];e.log.trace("running middleware",o,s),await new Promise((i,a)=>{try{let c=s(e,t,(l,d)=>{e=l,t=d,i()});c instanceof Promise&&c.catch(a)}catch(c){a(c)}}),e.log.trace("ran middleware",o,s)}return e}async close(e={}){if(this.log("closing connection to %a",this.remoteAddr),e.signal==null){let t=AbortSignal.timeout(this.closeTimeout);e={...e,signal:t}}await this.muxer?.close(e),await this.maConn.close(e)}abort(e){this.muxer?.abort(e),this.maConn.abort(e)}};function Hw(r,e){return new G3(r,e)}function sR(r,e){try{let{options:t}=e.getHandler(r);if(t.maxInboundStreams!=null)return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return q3}function iR(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 Vw(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var t1=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;connectionCloseTimeout;constructor(e,t){this.components=e,this.connectionEncrypters=ot({name:"libp2p_upgrader_connection_encrypters",metrics:this.components.metrics}),t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=ot({name:"libp2p_upgrader_stream_multiplexers",metrics:this.components.metrics}),t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.connectionCloseTimeout=t.connectionCloseTimeout??1e3,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"),inboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_inbound_errors_total"),outboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_outbound_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 Mh(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=le([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,o=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Bh("Connection denied");await Pe(this.shouldBlockConnection("denyInboundConnection",e),o),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(s){throw this.metrics.errors?.increment({inbound:!0}),this.metrics.inboundErrors?.increment({[s.name??"Error"]:!0}),s}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getComponents().findLast(i=>i.code===421)?.value,o;n!=null&&(o=Me(n),await Pe(this.shouldBlockConnection("denyOutboundConnection",o,e),t.signal));let s="outbound";return t.initiator===!1&&(s="inbound"),await this._performUpgrade(e,s,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),this.metrics.outboundErrors?.increment({[n.name??"Error"]:!0}),n}}async _performUpgrade(e,t,n){let o=e,s,i,a,c,l=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`;if(e.log=e.log.newScope(`${t}:${l}`),this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t),n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),o=await u.protect(o,n))}try{if(aR(n)){if(n.remotePeer==null)throw new ln(`${t} connection that skipped encryption must have a peer id`);c="native",s=n.remotePeer}else{let u=e.remoteAddr.getComponents().findLast(h=>h.code===421)?.value,f;u!=null&&(f=Me(u)),n?.onProgress?.(new H(`upgrader:encrypt-${t}-connection`)),{connection:o,remotePeer:s,protocol:c,streamMuxer:i}=await(t==="inbound"?this._encryptInbound(o,{...n,remotePeer:f}):this._encryptOutbound(o,{...n,remotePeer:f}))}if(s.equals(this.components.peerId)){let u=new hi("Can not dial self");throw e.abort(u),u}await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",s,e),n?.muxerFactory!=null?i=n.muxerFactory:i==null&&this.streamMuxers.size>0&&(n?.onProgress?.(new H(`upgrader:multiplex-${t}-connection`)),i=await(t==="inbound"?this._multiplexInbound(o,this.streamMuxers,n):this._multiplexOutbound(o,this.streamMuxers,n)))}catch(u){throw e.log.error("failed to upgrade %s connection %s %a - %e",t,t==="inbound"?"from":"to",e.remoteAddr,u),u}i!=null&&(e.log("create muxer %s",i.protocol),a=i.createStreamMuxer(o)),await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",s,e);let d=this._createConnection({id:l,cryptoProtocol:c,direction:t,maConn:e,stream:o,muxer:a,remotePeer:s,limits:n?.limits,closeTimeout:this.connectionCloseTimeout});return d.log("successfully upgraded connection"),d}_createConnection(e){let t=Hw(this.components,{...e,outboundStreamProtocolNegotiationTimeout:this.outboundStreamProtocolNegotiationTimeout,inboundStreamProtocolNegotiationTimeout:this.inboundStreamProtocolNegotiationTimeout});return t.addEventListener("close",()=>{this.events.safeDispatchEvent("connection:close",{detail:t})}),this.events.safeDispatchEvent("connection:open",{detail:t}),t}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let o=await va(e,n,t),s=this.connectionEncrypters.get(o);if(s==null)throw new ei(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using %s",o),{...await s.secureInbound(e,t),protocol:o}}catch(o){throw new ei(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let o=await xa(e,n,t),s=this.connectionEncrypters.get(o);if(s==null)throw new ei(`no crypto module found for ${o}`);return e.log("encrypting outbound connection using %s",o),{...await s.secureOutbound(e,t),protocol:o}}catch(o){throw new ei(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 s=await xa(e,o,n),i=t.get(s);if(i==null)throw new zo(`No muxer configured for protocol "${s}"`);return e.log("selected %s as muxer protocol",s),i}catch(s){throw e.log.error("error multiplexing outbound connection - %e",s),new zo(String(s))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{e.log.trace("selecting stream muxer from %s",o);let s=await va(e,o,n),i=t.get(s);if(i==null)throw new zo(`No muxer configured for protocol "${s}"`);return e.log("selected %s as muxer protocol",s),i}catch(s){throw e.log.error("error multiplexing inbound connection - %e",s),s}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};function aR(r){return r.skipEncryption===!0}var r1="3.1.5",n1="js-libp2p";function o1(r,e){return`${r??n1}/${e??r1} browser/${globalThis.navigator.userAgent}`}var Dl=class extends ie{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new ie,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let d=n(l),u=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return d||u},this.peerId=e.peerId,this.logger=e.logger??ra(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??n1,s=e.nodeInfo?.version??r1,i=this.components=kw({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:s,userAgent:e.nodeInfo?.userAgent??o1(o,s)},logger:this.logger,events:t,datastore:e.datastore??new Js,connectionGater:Rw(e.connectionGater),dns:e.dns});e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),this.peerStore=this.configureComponent("peerStore",Aw(i,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),i.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let d={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(u=>u.multiaddr)};i.events.safeDispatchEvent("peer:discovery",{detail:d})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(i)),this.components.upgrader=new t1(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,d)=>this.configureComponent(`connection-encryption-${d}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,d)=>this.configureComponent(`stream-muxers-${d}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout,connectionCloseTimeout:e.connectionManager?.connectionCloseTimeout}),this.configureComponent("transportManager",new e1(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 Jh(this.components)),this.configureComponent("addressManager",new _h(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,d)=>this.configureComponent(`peer-router-${d}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new Qh(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,d)=>this.configureComponent(`content-router-${d}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new jh(this.components,{routers:c})),this.configureComponent("randomWalk",new Zh(this.components)),(e.peerDiscovery??[]).forEach((l,d)=>{this.configureComponent(`peer-discovery-${d}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,d)=>{this.components.transportManager.add(this.configureComponent(`transport-${d}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let d=e.services[l],u=d(this.components);if(u==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=u,this.configureComponent(l,u),u[Dn]!=null&&(this.log("registering service %s for content routing",l),c.push(u[Dn])),u[On]!=null&&(this.log("registering service %s for peer routing",l),a.push(u[On])),u[ls]!=null&&(this.log("registering service %s for peer discovery",l),u[ls].addEventListener?.("peer",f=>{this.#e(f)}))}Pw(i)}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 with peer id %p",this.peerId)}catch(e){throw this.log.error("an error occurred starting libp2p - %e",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 xr;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 A("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new A("no protocols were provided to open a stream");return this.components.connectionManager.openStream(e,t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){yn(e)&&(e=Me(e.getComponents().findLast(n=>n.code===421)?.value??"")),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,t);if(i.id.publicKey!=null)return i.id.publicKey}catch(i){if(i.name!=="NotFoundError")throw i}let n=Oe([C("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),s=tt(o);return await this.peerStore.patch(e,{publicKey:s},t),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,t){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async n=>{await this.components.registrar.unhandle(n,t)}))}async register(e,t,n){return this.components.registrar.register(e,t,n)}unregister(e){this.components.registrar.unregister(e)}use(e,t){this.components.registrar.use(e,Array.isArray(t)?t:[t])}unuse(e){this.components.registrar.unuse(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("could not update multiaddrs of discovered peer - %e",n)})}};async function Ww(r={}){r.privateKey??=await od("Ed25519");let e=new Dl({...await lw(r),peerId:E9(r.privateKey)});return r.start!==!1&&await e.start(),e}var cR=["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"];function zw(r){return r==null?!1:r instanceof Dl?!0:cR.every(e=>typeof r[e]=="function")}var Wb=Ln(tb(),1);var Y3={keyLength:64,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"};var Sa={};et(Sa,{create:()=>xR,derivedEmptyPasswordKey:()=>s1});var s1={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function xR(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=nt.get();t*=8;async function c(u,f){let h=a.getRandomValues(new Uint8Array(s)),p=a.getRandomValues(new Uint8Array(n)),g={name:e,iv:p};typeof f=="string"&&(f=C(f));let m;if(f.length===0){m=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["encrypt"]);try{let T={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(T,I,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["encrypt"])}}else{let T={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(T,I,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(g,m,u);return Oe([h,g.iv,new Uint8Array(w)])}async function l(u,f){let h=u.subarray(0,s),p=u.subarray(s,s+n),g=u.subarray(s+n),m={name:e,iv:p};typeof f=="string"&&(f=C(f));let w;if(f.length===0)try{let I={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},D=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(I,D,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["decrypt"])}else{let I={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},D=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(I,D,{name:e,length:t},!0,["decrypt"])}let T=await a.subtle.decrypt(m,w,g);return new Uint8Array(T)}return{encrypt:c,decrypt:l}}var ye=Ln(rb());function ti(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 Go(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 c1(...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 X3(){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=ti(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,ti(s,8)-n}function nb(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=Go(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Go(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 ob(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 sr(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 Tse=Math.log(2);function l1(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function Q3(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 ho(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 Ml=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return Q3(this.items)}},Nl=[new Uint8Array([1])],sb="0123456789";var Ia="",Tn=new ArrayBuffer(0),Z3=new Uint8Array(0),Bl="EndOfContent",ab="OCTET STRING",cb="BIT STRING";function po(r){var e;return e=class extends r{get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}constructor(...n){var o;super(...n);let s=n[0]||{};this.isHexOnly=(o=s.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=s.valueHex?ye.BufferSourceConverter.toUint8Array(s.valueHex):Z3}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!ho(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",Tn)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var co=class{static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}constructor({blockLength:e=0,error:t=Ia,warnings:n=[],valueBeforeDecode:o=Z3}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};co.NAME="baseBlock";var $t=class extends co{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'")}};$t.NAME="valueBlock";var u1=class extends po(co){constructor({idBlock:e={}}={}){var t,n,o,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):Z3,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",Tn}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=Go(this.tagNumber,7),s=new Uint8Array(o),i=o.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=s[c]|128;a[i]=s[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let s=0;s<o.length-1;s++)n[s+1]=o[s]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!ho(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=ti(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}}};u1.NAME="identificationBlock";var d1=class extends co{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!ho(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=ti(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=Go(this.length,8);if(o.byteLength>127)return this.error="Too big length",Tn;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}}};d1.NAME="lengthBlock";var Q={},Tt=class extends co{constructor({name:e=Ia,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new u1(o),this.lenBlock=new d1(o),this.valueBlock=s?new s(o):new $t(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 Ml;t||lb(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?Tn:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():ye.Convert.ToHex(this.toBER())}onAsciiEncoding(){let e=this.constructor.NAME,t=ye.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);return`${e} : ${t}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return ob(t,n)}};Tt.NAME="BaseBlock";function lb(r){var e;if(r instanceof Q.Constructed)for(let t of r.valueBlock.value)lb(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var f1=class extends Tt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=Ia,...t}={},n){super(t,n),e&&this.fromString(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}'`}};f1.NAME="BaseStringBlock";var h1=class extends po($t){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};h1.NAME="PrimitiveValueBlock";var ub,p1=class extends Tt{constructor(e={}){super(e,h1),this.idBlock.isConstructed=!1}};ub=p1;Q.Primitive=ub;p1.NAME="PRIMITIVE";function PR(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 Y1(r,e=0,t=r.length){let n=e,o=new Tt({},$t),s=new co;if(!ho(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=Tt;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=Q.EndOfContent;break;case 1:c=Q.Boolean;break;case 2:c=Q.Integer;break;case 3:c=Q.BitString;break;case 4:c=Q.OctetString;break;case 5:c=Q.Null;break;case 6:c=Q.ObjectIdentifier;break;case 10:c=Q.Enumerated;break;case 12:c=Q.Utf8String;break;case 13:c=Q.RelativeObjectIdentifier;break;case 14:c=Q.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=Q.Sequence;break;case 17:c=Q.Set;break;case 18:c=Q.NumericString;break;case 19:c=Q.PrintableString;break;case 20:c=Q.TeletexString;break;case 21:c=Q.VideotexString;break;case 22:c=Q.IA5String;break;case 23:c=Q.UTCTime;break;case 24:c=Q.GeneralizedTime;break;case 25:c=Q.GraphicString;break;case 26:c=Q.VisibleString;break;case 27:c=Q.GeneralString;break;case 28:c=Q.UniversalString;break;case 29:c=Q.CharacterString;break;case 30:c=Q.BmpString;break;case 31:c=Q.DATE;break;case 32:c=Q.TimeOfDay;break;case 33:c=Q.DateTime;break;case 34:c=Q.Duration;break;default:{let l=o.idBlock.isConstructed?new Q.Constructed:new Q.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?Q.Constructed:Q.Primitive}return o=PR(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 j1(r){if(!r.byteLength){let e=new Tt({},$t);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Y1(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function RR(r,e){return r?1:e}var An=class extends $t{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!ho(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(;RR(this.isIndefiniteForm,n)>0;){let i=Y1(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===Bl)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Bl?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new Ml;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Tn:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};An.NAME="ConstructedValueBlock";var db,Yo=class extends Tt{constructor(e={}){super(e,An),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(`
37
+ `).join("")}`)}}ipv6Unsupported(e){if(e.ipv4.attempts===0||e.ipv6.attempts===0)return!1;let t=e.ipv4.attempts===e.ipv4.success,n=e.ipv6.success===0;return t&&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)}};function jM(r){return r.stack!=null&&r.stack.trim()!==""?r.stack:r.message!=null?r.message:r.toString()}var ao="/multistream/1.0.0";var XM=R(`
38
+ `);async function ud(r,e){let n=(await r.read(e)).subarray();if(n.byteLength===0||n[n.length-1]!==XM[0])throw new ve("Missing newline");return N(n).trimEnd()}async function Bc(r,e,t={}){if(e=Array.isArray(e)?[...e]:[e],e.length===0)throw new Error("At least one protocol must be specified");let n=r.log.newScope("mss:select"),o=_i(r,{...t,maxDataLength:1024});for(let i=0;i<e.length;i++){let s=e[i],a;if(i===0){n.trace('write ["%s", "%s"]',ao,s);let c=R(`${ao}
39
+ `),l=R(`${s}
40
+ `);if(await o.writeV([c,l],t),n.trace("reading multistream-select header"),a=await ud(o,t),n.trace('read "%s"',a),a!==ao){n.error("did not read multistream-select header from response");break}}else n.trace('write "%s"',s),await o.write(R(`${s}
41
+ `),t);if(n.trace("reading protocol response"),a=await ud(o,t),n.trace('read "%s"',a),a===s)return n.trace('selected "%s" after negotiation',a),o.unwrap(),s}throw new Sa(`Protocol selection failed - could not negotiate ${e}`)}async function Mc(r,e,t={}){e=Array.isArray(e)?e:[e];let n=r.log.newScope("mss:handle"),o=_i(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){n.trace("reading incoming string");let i=await ud(o,t);if(n.trace('read "%s"',i),i===ao){n.trace('respond with "%s" for "%s"',ao,i),await o.write(R(`${ao}
42
+ `),t),n.trace('responded with "%s" for "%s"',ao,i);continue}if(e.includes(i))return n.trace('respond with "%s" for "%s"',i,i),await o.write(R(`${i}
43
+ `),t),n.trace('responded with "%s" for "%s"',i,i),o.unwrap(),i;if(i==="ls"){let s=new ne(...e.map(a=>Mo.single(R(`${a}
44
+ `))),R(`
45
+ `));n.trace('respond with "%s" for %s',e,i),await o.write(s,t),n.trace('responded with "%s" for %s',e,i);continue}n.trace('respond with "na" for "%s"',i),await o.write(R(`na
46
+ `),t),n('responded with "na" for "%s"',i)}}var K8=class extends ue{id;remoteAddr;remotePeer;direction;timeline;direct;multiplexer;encryption;limits;log;maConn;muxer;components;outboundStreamProtocolNegotiationTimeout;inboundStreamProtocolNegotiationTimeout;closeTimeout;constructor(e,t){super(),this.components=e,this.id=t.id,this.remoteAddr=t.maConn.remoteAddr,this.remotePeer=t.remotePeer,this.direction=t.direction??"outbound",this.timeline=t.maConn.timeline,this.encryption=t.cryptoProtocol,this.limits=t.limits,this.maConn=t.maConn,this.log=t.maConn.log,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.closeTimeout=t.closeTimeout??1e3,this.direct=C8(t.maConn.remoteAddr),this.onIncomingStream=this.onIncomingStream.bind(this),this.remoteAddr.getComponents().find(n=>n.code===421)==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),t.muxer!=null&&(this.multiplexer=t.muxer.protocol,this.muxer=t.muxer,this.muxer.addEventListener("stream",this.onIncomingStream)),this.maConn.addEventListener("close",n=>{this.dispatchEvent(new ci(n.local,n.error))})}[Symbol.toStringTag]="Connection";[Ly]=!0;get streams(){return this.muxer?.streams??[]}get status(){return this.maConn.status}newStream=async(e,t={})=>{if(this.muxer==null)throw new $i("Connection is not multiplexed");if(this.muxer.status!=="open")throw new os(`The connection muxer is "${this.muxer.status}" and not "open"`);if(this.maConn.status!=="open")throw new os(`The connection is "${this.status}" and not "open"`);if(this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new sl("Cannot open protocol stream on limited connection");Array.isArray(e)||(e=[e]),this.log.trace("starting new stream for protocols %s",e);let n=await this.muxer.createStream({...t,protocol:e.length===1?e[0]:void 0});this.log.trace("started new stream %s for protocols %s",n.id,e);try{if(t.signal==null){n.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",e);let a=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);t={...t,signal:a}}n.protocol===""?(n.log.trace("selecting protocol from protocols %s",e),n.protocol=await Bc(n,e,t),n.log("negotiated protocol %s",n.protocol)):n.log("pre-negotiated protocol %s",n.protocol);let o=JM(n.protocol,this.components.registrar,t),i=pA(n.protocol,"outbound",this);if(i>o){let a=new Aa(`Too many outbound protocol streams for protocol "${n.protocol}" - ${i}/${o}`);throw n.abort(a),a}await this.components.peerStore.merge(this.remotePeer,{protocols:[n.protocol]}),this.components.metrics?.trackProtocolStream(n);let s=this.components.registrar.getMiddleware(n.protocol);return await this.runMiddlewareChain(n,this,s)}catch(o){throw n.status==="open"?n.abort(o):this.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",this.direction==="inbound"?"from":"to",this.remoteAddr,e,o),o}};async onIncomingStream(e){let t=e.detail,n=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);t.log("start protocol negotiation, timing out after %dms",this.inboundStreamProtocolNegotiationTimeout);try{if(t.protocol===""){let l=this.components.registrar.getProtocols();t.log.trace("selecting protocol from protocols %s",l),t.protocol=await Mc(t,l,{signal:n}),t.log("negotiated protocol %s",t.protocol)}else t.log("pre-negotiated protocol %s",t.protocol);let o=ZM(t.protocol,this.components.registrar);if(pA(t.protocol,"inbound",this)>o)throw new df(`Too many inbound protocol streams for protocol "${t.protocol}" - limit ${o}`);await this.components.peerStore.merge(this.remotePeer,{protocols:[t.protocol]},{signal:n}),this.components.metrics?.trackProtocolStream(t);let{handler:s,options:a}=this.components.registrar.getHandler(t.protocol);if(this.limits!=null&&a.runOnLimitedConnection!==!0)throw new sl("Cannot open protocol stream on limited connection");let c=this.components.registrar.getMiddleware(t.protocol);c.push(async(l,u,d)=>{await s(l,u),d(l,u)}),await this.runMiddlewareChain(t,this,c)}catch(o){t.abort(o)}}async runMiddlewareChain(e,t,n){for(let o=0;o<n.length;o++){let i=n[o];e.log.trace("running middleware",o,i),await new Promise((s,a)=>{try{let c=i(e,t,(l,u)=>{e=l,t=u,s()});c instanceof Promise&&c.catch(a)}catch(c){a(c)}}),e.log.trace("ran middleware",o,i)}return e}async close(e={}){if(this.log("closing connection to %a",this.remoteAddr),e.signal==null){let t=AbortSignal.timeout(this.closeTimeout);e={...e,signal:t}}await this.muxer?.close(e),await this.maConn.close(e)}abort(e){this.muxer?.abort(e),this.maConn.abort(e)}};function mA(r,e){return new K8(r,e)}function ZM(r,e){try{let{options:t}=e.getHandler(r);if(t.maxInboundStreams!=null)return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return F8}function JM(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??$8}function pA(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var p0=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;connectionCloseTimeout;constructor(e,t){this.components=e,this.connectionEncrypters=yt({name:"libp2p_upgrader_connection_encrypters",metrics:this.components.metrics}),t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=yt({name:"libp2p_upgrader_stream_multiplexers",metrics:this.components.metrics}),t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.connectionCloseTimeout=t.connectionCloseTimeout??1e3,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"),inboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_inbound_errors_total"),outboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_outbound_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 jp(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=we([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,o=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Xp("Connection denied");await qe(this.shouldBlockConnection("denyInboundConnection",e),o),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(i){throw this.metrics.errors?.increment({inbound:!0}),this.metrics.inboundErrors?.increment({[i.name??"Error"]:!0}),i}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getComponents().findLast(s=>s.code===421)?.value,o;n!=null&&(o=Xe(n),await qe(this.shouldBlockConnection("denyOutboundConnection",o,e),t.signal));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),this.metrics.outboundErrors?.increment({[n.name??"Error"]:!0}),n}}async _performUpgrade(e,t,n){let o=e,i,s,a,c,l=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`;if(e.log=e.log.newScope(`${t}:${l}`),this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t),n?.skipProtection!==!0){let d=this.components.connectionProtector;d!=null&&(e.log("protecting the %s connection",t),o=await d.protect(o,n))}try{if(eU(n)){if(n.remotePeer==null)throw new qn(`${t} connection that skipped encryption must have a peer id`);c="native",i=n.remotePeer}else{let d=e.remoteAddr.getComponents().findLast(h=>h.code===421)?.value,f;d!=null&&(f=Xe(d)),n?.onProgress?.(new K(`upgrader:encrypt-${t}-connection`)),{connection:o,remotePeer:i,protocol:c,streamMuxer:s}=await(t==="inbound"?this._encryptInbound(o,{...n,remotePeer:f}):this._encryptOutbound(o,{...n,remotePeer:f}))}if(i.equals(this.components.peerId)){let d=new va("Can not dial self");throw e.abort(d),d}await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,e),n?.muxerFactory!=null?s=n.muxerFactory:s==null&&this.streamMuxers.size>0&&(n?.onProgress?.(new K(`upgrader:multiplex-${t}-connection`)),s=await(t==="inbound"?this._multiplexInbound(o,this.streamMuxers,n):this._multiplexOutbound(o,this.streamMuxers,n)))}catch(d){throw e.log.error("failed to upgrade %s connection %s %a - %e",t,t==="inbound"?"from":"to",e.remoteAddr,d),d}s!=null&&(e.log("create muxer %s",s.protocol),a=s.createStreamMuxer(o)),await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e);let u=this._createConnection({id:l,cryptoProtocol:c,direction:t,maConn:e,stream:o,muxer:a,remotePeer:i,limits:n?.limits,closeTimeout:this.connectionCloseTimeout});return u.log("successfully upgraded connection"),u}_createConnection(e){let t=mA(this.components,{...e,outboundStreamProtocolNegotiationTimeout:this.outboundStreamProtocolNegotiationTimeout,inboundStreamProtocolNegotiationTimeout:this.inboundStreamProtocolNegotiationTimeout});return t.addEventListener("close",()=>{this.events.safeDispatchEvent("connection:close",{detail:t})}),this.events.safeDispatchEvent("connection:open",{detail:t}),t}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let o=await Mc(e,n,t),i=this.connectionEncrypters.get(o);if(i==null)throw new sa(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using %s",o),{...await i.secureInbound(e,t),protocol:o}}catch(o){throw new sa(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let o=await Bc(e,n,t),i=this.connectionEncrypters.get(o);if(i==null)throw new sa(`no crypto module found for ${o}`);return e.log("encrypting outbound connection using %s",o),{...await i.secureOutbound(e,t),protocol:o}}catch(o){throw new sa(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 i=await Bc(e,o,n),s=t.get(i);if(s==null)throw new $i(`No muxer configured for protocol "${i}"`);return e.log("selected %s as muxer protocol",i),s}catch(i){throw e.log.error("error multiplexing outbound connection - %e",i),new $i(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{e.log.trace("selecting stream muxer from %s",o);let i=await Mc(e,o,n),s=t.get(i);if(s==null)throw new $i(`No muxer configured for protocol "${i}"`);return e.log("selected %s as muxer protocol",i),s}catch(i){throw e.log.error("error multiplexing inbound connection - %e",i),i}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};function eU(r){return r.skipEncryption===!0}var m0="3.1.7",g0="js-libp2p";function y0(r,e){return`${r??g0}/${e??m0} browser/${globalThis.navigator.userAgent}`}var dd=class extends ue{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new ue,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let u=n(l),d=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return u||d},this.peerId=e.peerId,this.logger=e.logger??uc(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??g0,i=e.nodeInfo?.version??m0,s=this.components=tA({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??y0(o,i)},logger:this.logger,events:t,datastore:e.datastore??new ia,connectionGater:nA(e.connectionGater),dns:e.dns});e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),this.peerStore=this.configureComponent("peerStore",XS(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let u={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(d=>d.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:u})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new p0(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,u)=>this.configureComponent(`connection-encryption-${u}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,u)=>this.configureComponent(`stream-muxers-${u}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout,connectionCloseTimeout:e.connectionManager?.connectionCloseTimeout}),this.configureComponent("transportManager",new h0(this.components,e.transportManager)),this.configureComponent("connectionManager",new s0(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new a0(this.components,e.connectionMonitor)),this.configureComponent("registrar",new f0(this.components)),this.configureComponent("addressManager",new $p(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,u)=>this.configureComponent(`peer-router-${u}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new u0(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,u)=>this.configureComponent(`content-router-${u}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new c0(this.components,{routers:c})),this.configureComponent("randomWalk",new d0(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,u)=>{this.components.transportManager.add(this.configureComponent(`transport-${u}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let u=e.services[l],d=u(this.components);if(d==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=d,this.configureComponent(l,d),d[wo]!=null&&(this.log("registering service %s for content routing",l),c.push(d[wo])),d[xo]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[xo])),d[as]!=null&&(this.log("registering service %s for peer discovery",l),d[as].addEventListener?.("peer",f=>{this.#e(f)}))}rA(s)}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 with peer id %p",this.peerId)}catch(e){throw this.log.error("an error occurred starting libp2p - %e",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 Wr;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 _("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new _("no protocols were provided to open a stream");return this.components.connectionManager.openStream(e,t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){Jn(e)&&(e=Xe(e.getComponents().findLast(n=>n.code===421)?.value??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e,t);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=je([R("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=pt(o);return await this.peerStore.patch(e,{publicKey:i},t),i}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,t){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async n=>{await this.components.registrar.unhandle(n,t)}))}async register(e,t,n){return this.components.registrar.register(e,t,n)}unregister(e){this.components.registrar.unregister(e)}use(e,t){this.components.registrar.use(e,Array.isArray(t)?t:[t])}unuse(e){this.components.registrar.unuse(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("could not update multiaddrs of discovered peer - %e",n)})}};async function yA(r={}){r.privateKey??=await zf("Ed25519");let e=new dd({...await OS(r),peerId:Uv(r.privateKey)});return r.start!==!1&&await e.start(),e}var tU=["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"];function wA(r){return r==null?!1:r instanceof dd?!0:tU.every(e=>typeof r[e]=="function")}var yT=yo(IA(),1);var H8={keyLength:64,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"};var Uc={};ht(Uc,{create:()=>pU,derivedEmptyPasswordKey:()=>w0});var w0={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function pU(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",i=r?.saltLength??16,s=r?.iterations??32767,a=gt.get();t*=8;async function c(d,f){let h=a.getRandomValues(new Uint8Array(i)),p=a.getRandomValues(new Uint8Array(n)),y={name:e,iv:p};typeof f=="string"&&(f=R(f));let g;if(f.length===0){g=await a.subtle.importKey("jwk",w0,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},v=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,v,{name:e,length:t},!0,["encrypt"])}catch{g=await a.subtle.importKey("jwk",w0,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},v=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,v,{name:e,length:t},!0,["encrypt"])}let m=await a.subtle.encrypt(y,g,d);return je([h,y.iv,new Uint8Array(m)])}async function l(d,f){let h=d.subarray(0,i),p=d.subarray(i,i+n),y=d.subarray(i+n),g={name:e,iv:p};typeof f=="string"&&(f=R(f));let m;if(f.length===0)try{let v={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},L=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(v,L,{name:e,length:t},!0,["decrypt"])}catch{m=await a.subtle.importKey("jwk",w0,{name:"AES-GCM"},!0,["decrypt"])}else{let v={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},L=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(v,L,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(g,m,y);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}var Ie=yo(CA());function aa(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 Vi(r,e,t=-1){let n=t,o=r,i=0,s=Math.pow(2,e);for(let a=1;a<8;a++){if(r<s){let c;if(n<0)c=new ArrayBuffer(a),i=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),i=n}let l=new Uint8Array(c);for(let u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[i-u-1]=Math.floor(o/d),o-=l[i-u-1]*d}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function E0(...r){let e=0,t=0;for(let i of r)e+=i.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let i of r)o.set(i,t),t+=i.length;return o}function z8(){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=aa(t,8),o=new ArrayBuffer(this.valueHex.byteLength),i=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)i[a]=r[a];return i[0]&=127,aa(i,8)-n}function kA(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let s=t-e,a=Vi(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Vi(e,8,n),i=new Uint8Array(o);if(i[0]&128){let s=o.slice(0),a=new Uint8Array(s);o=new ArrayBuffer(o.byteLength+1),i=new Uint8Array(o);for(let c=0;c<s.byteLength;c++)i[c+1]=a[c];i[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function RA(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 vr(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let s=0;s<n;s++)o[s]="0";return o.join("").concat(t)}var ape=Math.log(2);function v0(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function W8(r){let e=0,t=0;for(let o=0;o<r.length;o++){let i=r[o];e+=i.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let i=r[o];n.set(new Uint8Array(i),t),t+=i.byteLength}return n.buffer}function ti(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 pd=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return W8(this.items)}},fd=[new Uint8Array([1])],PA="0123456789";var $c="",uo=new ArrayBuffer(0),G8=new Uint8Array(0),md="EndOfContent",DA="OCTET STRING",NA="BIT STRING";function ri(r){var e;return e=class extends r{get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}constructor(...n){var o;super(...n);let i=n[0]||{};this.isHexOnly=(o=i.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=i.valueHex?Ie.BufferSourceConverter.toUint8Array(i.valueHex):G8}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!ti(this,s,o,i))return-1;let a=o+i;return this.valueHexView=s.subarray(o,a),this.valueHexView.length?(this.blockLength=i,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",uo)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:Ie.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Qo=class{static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}constructor({blockLength:e=0,error:t=$c,warnings:n=[],valueBeforeDecode:o=G8}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=Ie.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:Ie.Convert.ToHex(this.valueBeforeDecodeView)}}};Qo.NAME="baseBlock";var nr=class extends Qo{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'")}};nr.NAME="valueBlock";var S0=class extends ri(Qo){constructor({idBlock:e={}}={}){var t,n,o,i;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?Ie.BufferSourceConverter.toUint8Array(e.valueHex):G8,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(i=e.isConstructed)!==null&&i!==void 0?i:!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",uo}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let i=this.tagNumber;i&=31,t|=i,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=Vi(this.tagNumber,7),i=new Uint8Array(o),s=o.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=i[c]|128;a[s]=i[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let i=0;i<o.length-1;i++)n[i+1]=o[i]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=Ie.BufferSourceConverter.toUint8Array(e);if(!ti(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;switch(i[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=(i[0]&32)===32,this.isHexOnly=!1;let a=i[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),u=255;for(;i[c]&128;){if(l[c-1]=i[c]&127,c++,c>=i.length)return this.error="End of input reached before message was fully decoded",-1;if(c===u){u+=255;let f=new Uint8Array(u);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=i[c]&127;let d=new Uint8Array(c);for(let f=0;f<c;f++)d[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(d),this.blockLength<=9?this.tagNumber=aa(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}}};S0.NAME="identificationBlock";var A0=class extends Qo{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=Ie.BufferSourceConverter.toUint8Array(e);if(!ti(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;if(i[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=i[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(i[0]&128),this.longFormUsed===!1)return this.length=i[0],this.blockLength=1,t+this.blockLength;let s=i[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>i.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=aa(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=s+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=Vi(this.length,8);if(o.byteLength>127)return this.error="Too big length",uo;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let i=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let s=0;s<o.byteLength;s++)n[s+1]=i[s];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}}};A0.NAME="lengthBlock";var oe={},Ht=class extends Qo{constructor({name:e=$c,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new S0(o),this.lenBlock=new A0(o),this.valueBlock=i?new i(o):new nr(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 pd;t||OA(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 i=this.valueBlock.toBER(e);this.lenBlock.length=i.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(i)}return t?uo: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():Ie.Convert.ToHex(this.toBER())}onAsciiEncoding(){let e=this.constructor.NAME,t=Ie.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);return`${e} : ${t}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return RA(t,n)}};Ht.NAME="BaseBlock";function OA(r){var e;if(r instanceof oe.Constructed)for(let t of r.valueBlock.value)OA(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var T0=class extends Ht{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=$c,...t}={},n){super(t,n),e&&this.fromString(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}'`}};T0.NAME="BaseStringBlock";var _0=class extends ri(nr){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};_0.NAME="PrimitiveValueBlock";var BA,I0=class extends Ht{constructor(e={}){super(e,_0),this.idBlock.isConstructed=!1}};BA=I0;oe.Primitive=BA;I0.NAME="PRIMITIVE";function SU(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 am(r,e=0,t=r.length){let n=e,o=new Ht({},nr),i=new Qo;if(!ti(i,r,e,t))return o.error=i.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=Ht;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=oe.EndOfContent;break;case 1:c=oe.Boolean;break;case 2:c=oe.Integer;break;case 3:c=oe.BitString;break;case 4:c=oe.OctetString;break;case 5:c=oe.Null;break;case 6:c=oe.ObjectIdentifier;break;case 10:c=oe.Enumerated;break;case 12:c=oe.Utf8String;break;case 13:c=oe.RelativeObjectIdentifier;break;case 14:c=oe.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=oe.Sequence;break;case 17:c=oe.Set;break;case 18:c=oe.NumericString;break;case 19:c=oe.PrintableString;break;case 20:c=oe.TeletexString;break;case 21:c=oe.VideotexString;break;case 22:c=oe.IA5String;break;case 23:c=oe.UTCTime;break;case 24:c=oe.GeneralizedTime;break;case 25:c=oe.GraphicString;break;case 26:c=oe.VisibleString;break;case 27:c=oe.GeneralString;break;case 28:c=oe.UniversalString;break;case 29:c=oe.CharacterString;break;case 30:c=oe.BmpString;break;case 31:c=oe.DATE;break;case 32:c=oe.TimeOfDay;break;case 33:c=oe.DateTime;break;case 34:c=oe.Duration;break;default:{let l=o.idBlock.isConstructed?new oe.Constructed:new oe.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?oe.Constructed:oe.Primitive}return o=SU(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 cm(r){if(!r.byteLength){let e=new Ht({},nr);return e.error="Input buffer has zero length",{offset:-1,result:e}}return am(Ie.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function AU(r,e){return r?1:e}var co=class extends nr{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=Ie.BufferSourceConverter.toUint8Array(e);if(!ti(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 i=t;for(;AU(this.isIndefiniteForm,n)>0;){let s=am(o,i,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(i=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===md)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===md?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new pd;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?uo:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};co.NAME="ConstructedValueBlock";var MA,Ki=class extends Ht{constructor(e={}){super(e,co),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(`
47
47
  `).map(o=>` ${o}`).join(`
48
48
  `));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
49
49
  ${e.join(`
50
- `)}`:`${t} :`}};db=Yo;Q.Constructed=db;Yo.NAME="CONSTRUCTED";var m1=class extends $t{fromBER(e,t,n){return t}toBER(e){return Tn}};m1.override="EndOfContentValueBlock";var fb,g1=class extends Tt{constructor(e={}){super(e,m1),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};fb=g1;Q.EndOfContent=fb;g1.NAME=Bl;var hb,ri=class extends Tt{constructor(e={}){super(e,$t),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}`}};hb=ri;Q.Null=hb;ri.NAME="NULL";var y1=class extends po($t){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return ho(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,X3.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};y1.NAME="BooleanValueBlock";var pb,w1=class extends Tt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,y1),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};pb=w1;Q.Boolean=pb;w1.NAME="BOOLEAN";var b1=class extends po(An){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=An.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===Bl){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==ab)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?An.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};b1.NAME="OctetStringValueBlock";var J3,lo=class extends Tt{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},b1),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=Y1(s,0,s.byteLength);i.offset!==-1&&i.offset===n&&(this.valueBlock.value=[i.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Yo.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=ye.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${t}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof J3&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};J3=lo;Q.OctetString=J3;lo.NAME=ab;var E1=class extends po(An){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=An.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Bl){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==cb)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let s=ye.BufferSourceConverter.toUint8Array(e);if(!ho(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=Y1(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 An.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let o=new Uint8Array(1);return o[0]=0,o.buffer}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}}};E1.NAME="BitStringValueBlock";var mb,x1=class extends Tt{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},E1),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 Yo.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let i of t)e.push(i.toString(2).padStart(8,"0"));let n=e.join(""),o=this.constructor.NAME,s=n.substring(0,n.length-this.valueBlock.unusedBits);return`${o} : ${s}`}}};mb=x1;Q.BitString=mb;x1.NAME=cb;var gb;function LR(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=c1(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=c1(t,s)),s}function ib(r){if(r>=Nl.length)for(let e=Nl.length;e<=r;e++){let t=new Uint8Array([0]),n=Nl[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=c1(t,n)),Nl.push(n)}return Nl[r]}function DR(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 Ul=class extends po($t){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=X3.call(this)))}constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(nb(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)!==0?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=DR(ib(n),t),i="-";break;default:t=LR(t,ib(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=sb.charAt(t[c]));return a===!1&&(i+=sb.charAt(0)),i}};gb=Ul;Ul.NAME="IntegerValueBlock";Object.defineProperty(gb.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Ol,uo=class extends Tt{constructor(e={}){super(e,Ul),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return l1(),BigInt(this.valueBlock.toString())}static fromBigInt(e){l1();let t=BigInt(e),n=new Ml,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,d=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else s[0]&128&&n.write(new Uint8Array([0])),n.write(s);return new Ol({valueHex:n.final()})}convertToDER(){let e=new Ol({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new Ol({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};Ol=uo;Q.Integer=Ol;uo.NAME="INTEGER";var yb,v1=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};yb=v1;Q.Enumerated=yb;v1.NAME="ENUMERATED";var Fl=class extends po($t){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!ho(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)!==0);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)!==0?(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=ti(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){l1();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=Go(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Tn;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}return n}toString(){let e="";if(this.isHexOnly)e=ye.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Fl.NAME="sidBlock";var S1=class extends $t{constructor({value:e=Ia,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Fl;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,Tn;t.push(o)}return Q3(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 Fl;if(o>Number.MAX_SAFE_INTEGER){l1();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}};S1.NAME="ObjectIdentifierValueBlock";var wb,In=class extends Tt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,S1),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};wb=In;Q.ObjectIdentifier=wb;In.NAME="OBJECT IDENTIFIER";var $l=class extends po(co){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!ho(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)!==0);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)!==0?(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=ti(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=Go(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Tn;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}return n.buffer}toString(){let e="";return this.isHexOnly?e=ye.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};$l.NAME="relativeSidBlock";var A1=class extends $t{constructor({value:e=Ia,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new $l;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,Tn;n.push(s)}return Q3(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 $l;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}};A1.NAME="RelativeObjectIdentifierValueBlock";var bb,I1=class extends Tt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,A1),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};bb=I1;Q.RelativeObjectIdentifier=bb;I1.NAME="RelativeObjectIdentifier";var Eb,ir=class extends Yo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};Eb=ir;Q.Sequence=Eb;ir.NAME="SEQUENCE";var xb,T1=class extends Yo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};xb=T1;Q.Set=xb;T1.NAME="SET";var _1=class extends po($t){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=Ia}toJSON(){return{...super.toJSON(),value:this.value}}};_1.NAME="StringValueBlock";var C1=class extends _1{};C1.NAME="SimpleStringValueBlock";var Zt=class extends f1{constructor({...e}={}){super(e,C1)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Zt.NAME="SIMPLE STRING";var k1=class extends Zt{fromBuffer(e){this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=ye.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=ye.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf8String(e)),this.valueBlock.value=e}};k1.NAME="Utf8StringValueBlock";var vb,fo=class extends k1{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};vb=fo;Q.Utf8String=vb;fo.NAME="UTF8String";var P1=class extends Zt{fromBuffer(e){this.valueBlock.value=ye.Convert.ToUtf16String(e),this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf16String(e))}};P1.NAME="BmpStringValueBlock";var Sb,R1=class extends P1{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};Sb=R1;Q.BmpString=Sb;R1.NAME="BMPString";var L1=class extends Zt{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=Go(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}};L1.NAME="UniversalStringValueBlock";var Ab,D1=class extends L1{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};Ab=D1;Q.UniversalString=Ab;D1.NAME="UniversalString";var Ib,N1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};Ib=N1;Q.NumericString=Ib;N1.NAME="NumericString";var Tb,O1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};Tb=O1;Q.PrintableString=Tb;O1.NAME="PrintableString";var _b,M1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};_b=M1;Q.TeletexString=_b;M1.NAME="TeletexString";var Cb,B1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};Cb=B1;Q.VideotexString=Cb;B1.NAME="VideotexString";var kb,U1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};kb=U1;Q.IA5String=kb;U1.NAME="IA5String";var Pb,F1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Pb=F1;Q.GraphicString=Pb;F1.NAME="GraphicString";var Rb,Kl=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};Rb=Kl;Q.VisibleString=Rb;Kl.NAME="VisibleString";var Lb,$1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Lb=$1;Q.GeneralString=Lb;$1.NAME="GeneralString";var Db,K1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};Db=K1;Q.CharacterString=Db;K1.NAME="CharacterString";var Nb,Vl=class extends Kl{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=sr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=sr(this.month,2),t[2]=sr(this.day,2),t[3]=sr(this.hour,2),t[4]=sr(this.minute,2),t[5]=sr(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}}};Nb=Vl;Q.UTCTime=Nb;Vl.NAME="UTCTime";var Ob,V1=class extends Vl{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(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}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(sr(this.year,4)),t.push(sr(this.month,2)),t.push(sr(this.day,2)),t.push(sr(this.hour,2)),t.push(sr(this.minute,2)),t.push(sr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(sr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Ob=V1;Q.GeneralizedTime=Ob;V1.NAME="GeneralizedTime";var Mb,H1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};Mb=H1;Q.DATE=Mb;H1.NAME="DATE";var Bb,q1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Bb=q1;Q.TimeOfDay=Bb;q1.NAME="TimeOfDay";var Ub,W1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Ub=W1;Q.DateTime=Ub;W1.NAME="DateTime";var Fb,z1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};Fb=z1;Q.Duration=Fb;z1.NAME="Duration";var $b,G1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};$b=G1;Q.TIME=$b;G1.NAME="TIME";async function X1(r,e){let n=await Sa.create().encrypt(r,e);return rt.encode(n)}async function e4(r,e,t){if(r.type==="RSA")return BR(r,e,t);if(r.type==="Ed25519")return NR(r,e,t);if(r.type==="secp256k1")return OR(r,e,t);if(r.type==="ECDSA")return MR(r,e,t);throw new Fr}async function NR(r,e,t="libp2p-key"){if(t==="libp2p-key")return X1(ks(r),e);throw new A(`export format '${t}' is not supported`)}async function OR(r,e,t="libp2p-key"){if(t==="libp2p-key")return X1(ks(r),e);throw new A("Export format is not supported")}async function MR(r,e,t="libp2p-key"){if(t==="libp2p-key")return X1(ks(r),e);throw new A(`export format '${t}' is not supported`)}async function BR(r,e,t="pkcs-8"){if(t==="pkcs-8")return UR(r,e);if(t==="libp2p-key")return X1(ks(r),e);throw new A("Export format is not supported")}async function UR(r,e){let t=nt.get(),o=new ir({value:[new uo({value:0}),new ir({value:[new In({value:"1.2.840.113549.1.1.1"}),new ri]}),new lo({valueHex:r.raw})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=Yt(16),a=await id(_o,e,i,{c:1e4,dkLen:32}),c=Yt(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 ir({value:[new lo({valueHex:i}),new uo({value:1e4}),new uo({value:32}),new ir({value:[new In({value:"1.2.840.113549.2.11"}),new ri]})]}),f=new ir({value:[new In({value:"1.2.840.113549.1.5.13"}),new ir({value:[new ir({value:[new In({value:"1.2.840.113549.1.5.12"}),u]}),new ir({value:[new In({value:"2.16.840.1.101.3.4.1.42"}),new lo({valueHex:c})]})]})]}),p=new ir({value:[f,new lo({valueHex:d})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...R(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
51
- `)}async function t4(r,e){try{let t=await FR(r,e);return K8(t)}catch{}if(!r.includes("BEGIN"))throw new A("Encrypted key was not a libp2p-key or a PEM file");return $R(r,e)}async function FR(r,e){let t=rt.decode(r);return Sa.create().decrypt(t,e)}async function $R(r,e){let t=nt.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let s=C(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=j1(s),{iv:a,salt:c,iterations:l,keySize:d,cipherText:u}=KR(i),f=await id(_o,e,c,{c:l,dkLen:d}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Hl(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:g}=j1(p);n=qb(g)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let s=C(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=j1(s);n=qb(i)}else throw new A("Could not parse private key from PEM data");let o=V8(n);if(o.type!=="RSA")throw new A("Could not parse RSA private key from PEM data");return o}function KR(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new A("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 A("Only pkcs5PBKDF2 key derivation functions are supported");let s=n.valueBlock.value[1],i=Hl(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 A("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 A("Only AES-CBC encryption schemes are supported")}}}}let u=Hl(l.valueBlock.value[1].getValue());return{cipherText:Hl(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function qb(r){return Hl(r.valueBlock.value[2].getValue())}function Hl(r){return new Uint8Array(r,0,r.byteLength)}var VR="/pkcs8/",r4="/info/",ql=new WeakMap,ni={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3};function Ta(r){return r==null||typeof r!="string"?!1:r===(0,Wb.default)(r.trim())&&r.length>0}async function _t(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function oi(r){return new Fe(VR+r)}function _a(r){return new Fe(r4+r)}async function HR(r){let e=ks(r),t=await ze.digest(e);return De.encode(t.bytes).substring(1)}var Q1=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init={...t,dek:{...Y3,...t.dek}},this.self=t.selfKey??"self",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<ni.minKeyLength)throw new Error(`dek.keyLength must be least ${ni.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<ni.minSaltLength)throw new Error(`dek.saltLength must be least ${ni.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<ni.minIterationCount)throw new Error(`dek.iterationCount must be least ${ni.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Rc(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";ql.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[me]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},this.options),t=Math.ceil(ni.minSaltLength/3)*3;return e.dek!=null&&(e.dek.salt=R(Yt(t),"base64")),e}static get options(){return{dek:{...Y3}}}async findKeyByName(e){if(!Ta(e))throw await _t(),new A(`Invalid key name '${e}'`);let t=_a(e);try{let n=await this.components.datastore.get(t);return JSON.parse(R(n))}catch(n){throw await _t(),this.log.error("could not read key from datastore - %e",n),new Le(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:r4};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(R(n.value));if(o.id===e)return o}throw new A(`Key with id '${e}' does not exist.`)}catch(t){throw await _t(),t}}async importKey(e,t){if(!Ta(e))throw await _t(),new A(`Invalid key name '${e}'`);if(t==null)throw await _t(),new A("Key is required");let n=oi(e);if(await this.components.datastore.has(n))throw await _t(),new A(`Key '${e}' already exists`);let s,i;try{s=await HR(t);let l=ql.get(this);if(l==null)throw new A("dek missing");let d=l.dek;i=await e4(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,C(i)),c.put(_a(e),C(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Ta(e))throw await _t(),new A(`Invalid key name '${e}'`);let t=oi(e);try{let n=await this.components.datastore.get(t),o=R(n),s=ql.get(this);if(s==null)throw new A("dek missing");let i=s.dek;return await t4(o,i)}catch(n){throw await _t(),n}}async removeKey(e){if(!Ta(e)||e===this.self)throw await _t(),new A(`Invalid key name '${e}'`);let t=oi(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(_a(e)),await o.commit(),n}async listKeys(){let e={prefix:r4},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(R(n.value)));return t}async renameKey(e,t){if(!Ta(e)||e===this.self)throw await _t(),new A(`Invalid old key name '${e}'`);if(!Ta(t)||t===this.self)throw await _t(),new A(`Invalid new key name '${t}'`);let n=oi(e),o=oi(t),s=_a(e),i=_a(t);if(await this.components.datastore.has(o))throw await _t(),new A(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(R(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,C(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 A(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await _t(),new A(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await _t(),new A(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=ql.get(this);if(n==null)throw new A("dek missing");let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?Rc(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";ql.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(oi(a.name)),l=R(c),d=await t4(l,o),u=s.toString(),f=await e4(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(oi(a.name),C(f)),h.put(_a(a.name),C(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function Z1(r={}){return e=>new Q1(e,r)}async function n4(r,e={}){let t=e.selfKey??"self",n=Z1(e)({datastore:r,logger:ra()}),o;return await r.has(new Fe(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await od(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var Ca=!!globalThis.process?.env?.DUMP_SESSION_KEYS,o4=16;function qR(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function J1(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function ep(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function wt(r,e,t=""){let n=qR(r),o=r?.length,s=e!==void 0;if(!n||s&&o!==e){let i=t&&`"${t}" `,a=s?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return r}function s4(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 zb(r,e){wt(r,void 0,"output");let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function mo(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function go(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function WR(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var zR=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Gb(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Yb(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var i4=(r,e)=>{function t(n,...o){if(wt(n,void 0,"key"),!zR)throw new Error("Non little-endian hardware is not yet supported");if(r.nonceLength!==void 0){let d=o[0];wt(d,r.varSizeNonce?void 0:r.nonceLength,"nonce")}let s=r.tagLength;s&&o[1]!==void 0&&wt(o[1],void 0,"AAD");let i=e(n,...o),a=(d,u)=>{if(u!==void 0){if(d!==2)throw new Error("cipher output not supported");wt(u,void 0,"output")}},c=!1;return{encrypt(d,u){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,wt(d),a(i.encrypt.length,u),i.encrypt(d,u)},decrypt(d,u){if(wt(d),s&&d.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return a(i.decrypt.length,u),i.decrypt(d,u)}}}return Object.assign(t,r),t};function a4(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error('"output" expected Uint8Array of length '+r+", got: "+e.length);if(t&&!GR(e))throw new Error("invalid output, must be aligned");return e}function jb(r,e,t){J1(t);let n=new Uint8Array(16),o=WR(n);return o.setBigUint64(0,BigInt(e),t),o.setBigUint64(8,BigInt(r),t),n}function GR(r){return r.byteOffset%4===0}function ka(r){return Uint8Array.from(r)}var Qb=r=>Uint8Array.from(r.split(""),e=>e.charCodeAt(0)),YR=Qb("expand 16-byte k"),jR=Qb("expand 32-byte k"),XR=mo(YR),QR=mo(jR);function Z(r,e){return r<<e|r>>>32-e}function c4(r){return r.byteOffset%4===0}var tp=64,ZR=16,Zb=2**32-1,Xb=Uint32Array.of();function JR(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(tp),d=mo(l),u=c4(o)&&c4(s),f=u?mo(o):Xb,h=u?mo(s):Xb;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=Zb)throw new Error("arx: counter overflow");let g=Math.min(tp,c-p);if(u&&g===tp){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let w=0,T;w<ZR;w++)T=m+w,h[T]=f[T]^d[w];p+=tp;continue}for(let m=0,w;m<g;m++)w=p+m,s[w]=o[w]^l[m];p+=g}}function l4(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=Gb({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return ep(o),ep(i),J1(s),J1(t),(a,c,l,d,u=0)=>{wt(a,void 0,"key"),wt(c,void 0,"nonce"),wt(l,void 0,"data");let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),wt(d,void 0,"output"),ep(u),u<0||u>=Zb)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let h=[],p=a.length,g,m;if(p===32)h.push(g=ka(a)),m=QR;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),m=XR,h.push(g);else throw wt(a,32,"arx key"),new Error("invalid key size");c4(c)||h.push(c=ka(c));let w=mo(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(m,w,mo(c.subarray(0,16)),w),c=c.subarray(16)}let T=16-o;if(T!==c.length)throw new Error(`arx: nonce must be ${T} or 16 bytes`);if(T!==12){let D=new Uint8Array(12);D.set(c,s?0:12-c.length),c=D,h.push(c)}let I=mo(c);return JR(r,m,w,I,l,d,u,i),go(...h),d}}function Ct(r,e){return r[e++]&255|(r[e++]&255)<<8}var u4=class{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;constructor(e){e=ka(wt(e,32,"key"));let t=Ct(e,0),n=Ct(e,2),o=Ct(e,4),s=Ct(e,6),i=Ct(e,8),a=Ct(e,10),c=Ct(e,12),l=Ct(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]=Ct(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],h=i[6],p=i[7],g=i[8],m=i[9],w=Ct(e,t+0),T=Ct(e,t+2),I=Ct(e,t+4),D=Ct(e,t+6),F=Ct(e,t+8),$=Ct(e,t+10),z=Ct(e,t+12),S=Ct(e,t+14),x=s[0]+(w&8191),L=s[1]+((w>>>13|T<<3)&8191),B=s[2]+((T>>>10|I<<6)&8191),P=s[3]+((I>>>7|D<<9)&8191),v=s[4]+((D>>>4|F<<12)&8191),E=s[5]+(F>>>1&8191),b=s[6]+((F>>>14|$<<2)&8191),_=s[7]+(($>>>11|z<<5)&8191),M=s[8]+((z>>>8|S<<8)&8191),O=s[9]+(S>>>5|o),k=0,U=k+x*a+L*(5*m)+B*(5*g)+P*(5*p)+v*(5*h);k=U>>>13,U&=8191,U+=E*(5*f)+b*(5*u)+_*(5*d)+M*(5*l)+O*(5*c),k+=U>>>13,U&=8191;let K=k+x*c+L*a+B*(5*m)+P*(5*g)+v*(5*p);k=K>>>13,K&=8191,K+=E*(5*h)+b*(5*f)+_*(5*u)+M*(5*d)+O*(5*l),k+=K>>>13,K&=8191;let W=k+x*l+L*c+B*a+P*(5*m)+v*(5*g);k=W>>>13,W&=8191,W+=E*(5*p)+b*(5*h)+_*(5*f)+M*(5*u)+O*(5*d),k+=W>>>13,W&=8191;let we=k+x*d+L*l+B*c+P*a+v*(5*m);k=we>>>13,we&=8191,we+=E*(5*g)+b*(5*p)+_*(5*h)+M*(5*f)+O*(5*u),k+=we>>>13,we&=8191;let pe=k+x*u+L*d+B*l+P*c+v*a;k=pe>>>13,pe&=8191,pe+=E*(5*m)+b*(5*g)+_*(5*p)+M*(5*h)+O*(5*f),k+=pe>>>13,pe&=8191;let ue=k+x*f+L*u+B*d+P*l+v*c;k=ue>>>13,ue&=8191,ue+=E*a+b*(5*m)+_*(5*g)+M*(5*p)+O*(5*h),k+=ue>>>13,ue&=8191;let be=k+x*h+L*f+B*u+P*d+v*l;k=be>>>13,be&=8191,be+=E*c+b*a+_*(5*m)+M*(5*g)+O*(5*p),k+=be>>>13,be&=8191;let Re=k+x*p+L*h+B*f+P*u+v*d;k=Re>>>13,Re&=8191,Re+=E*l+b*c+_*a+M*(5*m)+O*(5*g),k+=Re>>>13,Re&=8191;let Je=k+x*g+L*p+B*h+P*f+v*u;k=Je>>>13,Je&=8191,Je+=E*d+b*l+_*c+M*a+O*(5*m),k+=Je>>>13,Je&=8191;let Ee=k+x*m+L*g+B*p+P*h+v*f;k=Ee>>>13,Ee&=8191,Ee+=E*u+b*d+_*l+M*c+O*a,k+=Ee>>>13,Ee&=8191,k=(k<<2)+k|0,k=k+U|0,U=k&8191,k=k>>>13,K+=k,s[0]=U,s[1]=K,s[2]=W,s[3]=we,s[4]=pe,s[5]=ue,s[6]=be,s[7]=Re,s[8]=Je,s[9]=Ee}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;go(n)}update(e){s4(this),wt(e),e=ka(e);let{buffer:t,blockLen:n}=this,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(){go(this.h,this.r,this.buffer,this.pad)}digestInto(e){s4(this),zb(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 eL(r){let e=(n,o)=>r(o).update(n).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var Jb=eL(r=>new u4(r));function rE(r,e,t,n,o,s=20){let i=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],h=e[3],p=e[4],g=e[5],m=e[6],w=e[7],T=o,I=t[0],D=t[1],F=t[2],$=i,z=a,S=c,x=l,L=d,B=u,P=f,v=h,E=p,b=g,_=m,M=w,O=T,k=I,U=D,K=F;for(let we=0;we<s;we+=2)$=$+L|0,O=Z(O^$,16),E=E+O|0,L=Z(L^E,12),$=$+L|0,O=Z(O^$,8),E=E+O|0,L=Z(L^E,7),z=z+B|0,k=Z(k^z,16),b=b+k|0,B=Z(B^b,12),z=z+B|0,k=Z(k^z,8),b=b+k|0,B=Z(B^b,7),S=S+P|0,U=Z(U^S,16),_=_+U|0,P=Z(P^_,12),S=S+P|0,U=Z(U^S,8),_=_+U|0,P=Z(P^_,7),x=x+v|0,K=Z(K^x,16),M=M+K|0,v=Z(v^M,12),x=x+v|0,K=Z(K^x,8),M=M+K|0,v=Z(v^M,7),$=$+B|0,K=Z(K^$,16),_=_+K|0,B=Z(B^_,12),$=$+B|0,K=Z(K^$,8),_=_+K|0,B=Z(B^_,7),z=z+P|0,O=Z(O^z,16),M=M+O|0,P=Z(P^M,12),z=z+P|0,O=Z(O^z,8),M=M+O|0,P=Z(P^M,7),S=S+v|0,k=Z(k^S,16),E=E+k|0,v=Z(v^E,12),S=S+v|0,k=Z(k^S,8),E=E+k|0,v=Z(v^E,7),x=x+L|0,U=Z(U^x,16),b=b+U|0,L=Z(L^b,12),x=x+L|0,U=Z(U^x,8),b=b+U|0,L=Z(L^b,7);let W=0;n[W++]=i+$|0,n[W++]=a+z|0,n[W++]=c+S|0,n[W++]=l+x|0,n[W++]=d+L|0,n[W++]=u+B|0,n[W++]=f+P|0,n[W++]=h+v|0,n[W++]=p+E|0,n[W++]=g+b|0,n[W++]=m+_|0,n[W++]=w+M|0,n[W++]=T+O|0,n[W++]=I+k|0,n[W++]=D+U|0,n[W++]=F+K|0}function tL(r,e,t,n){let o=r[0],s=r[1],i=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],h=e[5],p=e[6],g=e[7],m=t[0],w=t[1],T=t[2],I=t[3];for(let F=0;F<20;F+=2)o=o+c|0,m=Z(m^o,16),f=f+m|0,c=Z(c^f,12),o=o+c|0,m=Z(m^o,8),f=f+m|0,c=Z(c^f,7),s=s+l|0,w=Z(w^s,16),h=h+w|0,l=Z(l^h,12),s=s+l|0,w=Z(w^s,8),h=h+w|0,l=Z(l^h,7),i=i+d|0,T=Z(T^i,16),p=p+T|0,d=Z(d^p,12),i=i+d|0,T=Z(T^i,8),p=p+T|0,d=Z(d^p,7),a=a+u|0,I=Z(I^a,16),g=g+I|0,u=Z(u^g,12),a=a+u|0,I=Z(I^a,8),g=g+I|0,u=Z(u^g,7),o=o+l|0,I=Z(I^o,16),p=p+I|0,l=Z(l^p,12),o=o+l|0,I=Z(I^o,8),p=p+I|0,l=Z(l^p,7),s=s+d|0,m=Z(m^s,16),g=g+m|0,d=Z(d^g,12),s=s+d|0,m=Z(m^s,8),g=g+m|0,d=Z(d^g,7),i=i+u|0,w=Z(w^i,16),f=f+w|0,u=Z(u^f,12),i=i+u|0,w=Z(w^i,8),f=f+w|0,u=Z(u^f,7),a=a+c|0,T=Z(T^a,16),h=h+T|0,c=Z(c^h,12),a=a+c|0,T=Z(T^a,8),h=h+T|0,c=Z(c^h,7);let D=0;n[D++]=o,n[D++]=s,n[D++]=i,n[D++]=a,n[D++]=m,n[D++]=w,n[D++]=T,n[D++]=I}var rL=l4(rE,{counterRight:!1,counterLength:4,allowShortKeys:!1}),nL=l4(rE,{counterRight:!1,counterLength:8,extendNonceFn:tL,allowShortKeys:!1});var oL=new Uint8Array(16),eE=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(oL.subarray(t))},sL=new Uint8Array(32);function tE(r,e,t,n,o){o!==void 0&&wt(o,void 0,"AAD");let s=r(e,t,sL),i=jb(n.length,o?o.length:0,!0),a=Jb.create(s);o&&eE(a,o),eE(a,n),a.update(i);let c=a.digest();return go(s,i),c}var nE=r=>(e,t,n)=>({encrypt(s,i){let a=s.length;i=a4(a+16,i,!1),i.set(s);let c=i.subarray(0,-16);r(e,t,c,c,1);let l=tE(r,e,t,c,n);return i.set(l,a),go(l),i},decrypt(s,i){i=a4(s.length-16,i,!1);let a=s.subarray(0,-16),c=s.subarray(-16),l=tE(r,e,t,a,n);if(!Yb(c,l))throw new Error("invalid tag");return i.set(s.subarray(0,-16)),r(e,t,i,i,1),go(l),i}}),d4=i4({blockSize:64,nonceLength:12,tagLength:16},nE(rL)),Pie=i4({blockSize:64,nonceLength:24,tagLength:16},nE(nL));function sE(r,e,t){return Un(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Ro(r,t,e)}var f4=Uint8Array.of(0),oE=Uint8Array.of();function iE(r,e,t,n=32){Un(r),Dt(n,"length");let o=r.outputLen;if(n>255*o)throw new Error("Length must be <= 255*HashLen");let s=Math.ceil(n/o);t===void 0?t=oE:ce(t,void 0,"info");let i=new Uint8Array(s*o),a=Ro.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let d=0;d<s;d++)f4[0]=d+1,c.update(d===0?oE:l).update(t).update(f4).digestInto(l),i.set(l,o*d),a._cloneInto(c);return a.destroy(),c.destroy(),Nt(l,f4),i.slice(0,n)}var h4={hashSHA256(r){return Tr(r.subarray())},getHKDF(r,e){let t=sE(Tr,e,r),o=iE(Tr,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=Ec.utils.randomSecretKey();return{publicKey:Ec.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ec.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ec.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return d4(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return d4(n,e,t).decrypt(r.subarray(),o)}};var aE=h4;function cE(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 Pa=r=>{let e=Ge(2);return e[0]=r>>8,e[1]=r,e};Pa.bytes=2;var Ra=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)};Ra.bytes=2;function lE(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 p4(r,e){!e.enabled||!Ca||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${R(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${R(r.privateKey,"hex")}`)):e("Missing local static keys."))}function m4(r,e){!e.enabled||!Ca||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${R(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${R(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function uE(r,e){!e.enabled||!Ca||e(r?`REMOTE_STATIC_PUBLIC_KEY ${R(r.subarray(),"hex")}`:"Missing remote static public key.")}function g4(r,e){!e.enabled||!Ca||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${R(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function y4(r,e,t){!t.enabled||!Ca||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&R(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&R(e.k,"hex")}`))}function nn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ge(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var La=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var iL=0,aL=4294967295,cL="Cipherstate has reached maximum n, a new handshake must be performed",rp=class{n;bytes;view;constructor(e=iL){this.n=e,this.bytes=ae(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>aL)throw new Error(cL)}};var si=ae(0),Da=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new rp(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}},w4=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=C(t,"utf-8");this.h=lL(e,n),this.ck=this.h,this.cs=new Da(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Da(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new X(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,si);return[new Da(this.crypto,e),new Da(this.crypto,t)]}},b4=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 w4(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()}},Wl=class extends b4{writeMessageA(e){return new X(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new X(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new X(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new La(`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 La(`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 La(`handshake stage 2 validation fail: ${t.message}`)}}};function lL(r,e){if(e.length<=32){let t=ae(32);return t.set(e),t}else return r.hash(e)}var np;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let s of t.webtransportCerthashes)n.uint32(10),n.bytes(s);if(t.streamMuxers!=null)for(let s of t.streamMuxers)n.uint32(18),n.string(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={webtransportCerthashes:[],streamMuxers:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&s.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new Ne('Decode error - map field "webtransportCerthashes" had too many elements');s.webtransportCerthashes.push(t.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&s.streamMuxers.length===o.limits.streamMuxers)throw new Ne('Decode error - map field "streamMuxers" had too many elements');s.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(np||(np={}));var zl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),np.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={identityKey:ae(0),identitySig:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.identityKey=t.bytes();break}case 2:{s.identitySig=t.bytes();break}case 4:{s.extensions=np.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(zl||(zl={}));async function x4(r,e,t){let n=await r.sign(fE(e));return zl.encode({identityKey:ft(r.publicKey),identitySig:n,extensions:t})}async function v4(r,e,t){try{let n=zl.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=fE(e);if(!await o.verify(s,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new vu(n.message)}}function fE(r){let e=C("noise-libp2p-static-key:");return r instanceof Uint8Array?Oe([e,r],e.length+r.length):(r.prepend(e),r)}var E4=class extends No{stream;handshake;metrics;decoder;constructor(e,t,n){super({log:e.log,inactivityTimeout:e.inactivityTimeout,maxReadBufferLength:e.maxReadBufferLength,direction:e.direction}),this.stream=e,this.handshake=t,this.metrics=n,this.decoder=new kd({lengthDecoder:Ra,maxBufferSize:16*1024*1024,encodingLength:()=>2});let o=c=>{try{for(let l of this.decoder.decode(c.data))this.onData(this.decrypt(l))}catch(l){this.abort(l)}};this.stream.addEventListener("message",o);let s=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",s);let i=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",i);let a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){let t=new X;for(let n=0;n<e.byteLength;n+=65519){let o=n+65519;o>e.byteLength&&(o=e.byteLength);let s;e instanceof Uint8Array?s=this.handshake.encrypt(e.subarray(n,o)):s=this.handshake.encrypt(e.sublist(n,o)),this.metrics?.encryptedPackets.increment(),t.append(Pa(s.byteLength)),t.append(s)}return t}decrypt(e){let t=new X;for(let n=0;n<e.byteLength;n+=65535){let o=n+65535;if(o>e.byteLength&&(o=e.byteLength),o-o4<n)throw new Error("Invalid chunk");let s;e instanceof Uint8Array?s=e.subarray(n,o):s=e.sublist(n,o);let i=e.subarray(n,o-o4);try{let a=this.handshake.decrypt(s,i);this.metrics?.decryptedPackets.increment(),t.append(a)}catch(a){throw this.metrics?.decryptErrors.increment(),a}}return t}close(e){return this.stream.close(e)}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}sendReset(e){this.stream.abort(e)}sendData(e){return{sentBytes:e.byteLength,canSendMore:this.stream.send(this.encrypt(e))}}};function S4(r,e,t){return new E4(r,e,t)}async function hE(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await x4(s,a.publicKey,l),u=new Wl({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});p4(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(si),e),t.trace("Stage 0 - Initiator finished sending first message."),m4(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."),g4(u.re,t),uE(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await v4(f,u.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(u.writeMessageC(d),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,g]=u.ss.split();return y4(p,g,t),{payload:h,encrypt:m=>p.encryptWithAd(si,m),decrypt:(m,w)=>g.decryptWithAd(si,m,w)}}async function pE(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await x4(s,a.publicKey,l),u=new Wl({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});p4(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."),g4(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."),m4(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 v4(f,u.rs,c),[p,g]=u.ss.split();return y4(p,g,t),{payload:h,encrypt:m=>g.encryptWithAd(si,m),decrypt:(m,w)=>p.decryptWithAd(si,m,w)}}var op=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:s,prologueBytes:i}=t,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");let c=s??aE;this.crypto=cE(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?lE(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??ae(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[me]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Fo(e,{lengthEncoder:Pa,lengthDecoder:Ra,maxDataLength:65535}),s=await this.performHandshakeInitiator(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=tt(s.payload.identityKey);return{connection:S4(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:xn(i),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let o=t.get(n);if(o!=null)return o}if(e.length)throw new Su("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Fo(e,{lengthEncoder:Pa,lengthDecoder:Ra,maxDataLength:65535}),s=await this.performHandshakeResponder(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=tt(s.payload.identityKey);return{connection:S4(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:xn(i),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o,s){let i,a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await hE({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}async performHandshakeResponder(e,t,n,o,s){let i,a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await pE({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}};function sp(r={}){return e=>new op(e,r)}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 Se;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(Se||(Se={}));var Xae=Object.values(Se).filter(r=>typeof r!="string"),mE=0,ct;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(ct||(ct={}));var _n=12;var yo=class extends Error{static name="ProtocolError";reason;constructor(e,t){super(e),this.name="ProtocolError",this.reason=t}};function gE(r){return r?.reason!==null}var Sr=class extends yo{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e,ct.ProtocolError),this.name="InvalidFrameError"}},Na=class extends yo{static name="UnRequestedPingError";constructor(e="Un-requested ping error"){super(e,ct.ProtocolError),this.name="UnRequestedPingError"}},Oa=class extends yo{static name="NotMatchingPingError";constructor(e="Not matching ping error"){super(e,ct.ProtocolError),this.name="NotMatchingPingError"}};var ip=class extends yo{static name="StreamAlreadyExistsError";constructor(e="Stream already exists"){super(e,ct.ProtocolError),this.name="StreamAlreadyExistsError"}},ap=class extends yo{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e,ct.ProtocolError),this.name="DecodeInvalidVersionError"}},cp=class extends yo{static name="BothClientsError";constructor(e="Both clients"){super(e,ct.ProtocolError),this.name="BothClientsError"}},Ma=class extends yo{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e,ct.ProtocolError),this.name="ReceiveWindowExceededError"}};var tce=new Set([Sr.name,Na.name,Oa.name,ip.name,ap.name,cp.name,Ma.name]),Yl=256*1024,lp=16*1024*1024;var jl={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,maxMessageSize:64*1024,maxEarlyStreams:10,streamOptions:{initialStreamWindowSize:Yl,maxStreamWindowSize:lp,inactivityTimeout:12e4,maxReadBufferLength:4194304,maxWriteBufferLength:1/0}};function yE(r){if(r.keepAliveInterval!=null&&r.keepAliveInterval<=0)throw new A("keep-alive interval must be positive");if(r.maxInboundStreams!=null&&r.maxInboundStreams<0)throw new A("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams!=null&&r.maxOutboundStreams<0)throw new A("max outbound streams must be larger or equal 0");if(r.maxMessageSize!=null&&r.maxMessageSize<1024)throw new A("MaxMessageSize must be greater than a kilobyte");if(r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize<Yl)throw new A("InitialStreamWindowSize must be larger or equal 256 kB");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize<r.streamOptions?.initialStreamWindowSize)throw new A("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize>2**32-1)throw new A("MaxStreamWindowSize must be less than equal MAX_UINT32")}function bE(r){return r.header.type===je.Data&&r.data!==null}var wE=2**24;function uL(r){if(r[0]!==mE)throw new Sr("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*wE+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*wE+(r[9]<<16)+(r[10]<<8)+r[11]}}var up=class{buffer;constructor(){this.buffer=new X}*emitFrames(e){for(this.buffer.append(e);;){let t=this.readFrame();if(t===void 0)break;yield t}}readFrame(){let e=_n;if(this.buffer.byteLength<_n)return;let t=uL(this.buffer.subarray(0,_n));if(t.type===je.Data){if(e+=t.length,this.buffer.byteLength<e)return;let n=this.buffer.sublist(_n,e);return this.buffer.consume(e),{header:t,data:n}}return this.buffer.consume(e),{header:t}}};function A4(r){let e=new Uint8Array(_n);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}var Jt;(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",r[r.Paused=5]="Paused"})(Jt||(Jt={}));var dp=class extends Bo{streamId;state;sendWindowCapacity;recvWindow;recvWindowCapacity;maxStreamWindowSize;epochStart;getRTT;sendFrame;constructor(e){let t=e.initialStreamWindowSize??Yl;super({...e,maxMessageSize:t-_n}),this.streamId=e.streamId,this.state=e.state,this.sendWindowCapacity=t,this.recvWindow=t,this.recvWindowCapacity=this.recvWindow,this.maxStreamWindowSize=e.maxStreamWindowSize??lp,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame;let n=()=>{this.state=Jt.Finished};this.addEventListener("close",n)}sendData(e){let t=e.byteLength,n=0,o=!0;for(this.log?.trace("send window capacity is %d bytes",this.sendWindowCapacity);e.byteLength>0;){if(this.sendWindowCapacity===0){o=!1,this.log?.trace("sent %d/%d bytes, exhausted send window, waiting for window update",n,t);break}let s=Math.min(this.sendWindowCapacity,e.byteLength),i=this.getSendFlags(),a=e.sublist(0,s);e.consume(s);let c=this.sendFrame({type:je.Data,flag:i,streamID:this.streamId,length:s},a);if(this.sendWindowCapacity-=s,n+=s,!c){o=c,this.log.trace("sent %d/%d bytes, wait for muxer to have more send capacity",n,t);break}}return{sentBytes:n,canSendMore:o}}sendReset(){this.sendFrame({type:je.WindowUpdate,flag:Se.RST,streamID:this.streamId,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|Se.FIN;this.sendFrame({type:je.WindowUpdate,flag:e,streamID:this.streamId,length:0})}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){this.state=Jt.Paused}sendResume(){this.state=Jt.Established,this.sendWindowUpdate()}handleWindowUpdate(e){this.processFlags(e.header.flag),this.sendWindowCapacity+=e.header.length,this.maxMessageSize=this.sendWindowCapacity-_n,this.maxMessageSize<0&&(this.maxMessageSize=0),this.maxMessageSize!==0&&this.writeBuffer.byteLength>0&&(this.log?.trace("window update of %d bytes allows more data to be sent, have %d bytes queued, sending data %s",e.header.length,this.writeBuffer.byteLength,this.sendingData),this.safeDispatchEvent("drain"))}handleData(e){if(!bE(e))throw new Sr("Frame was not data frame");if(this.processFlags(e.header.flag),this.recvWindowCapacity<e.header.length)throw new Ma("Receive window exceeded");this.recvWindowCapacity-=e.header.length,this.onData(e.data),this.sendWindowUpdate()}processFlags(e){(e&Se.ACK)===Se.ACK&&this.state===Jt.SYNSent&&(this.state=Jt.Established),(e&Se.FIN)===Se.FIN&&this.onRemoteCloseWrite(),(e&Se.RST)===Se.RST&&this.onRemoteReset()}getSendFlags(){switch(this.state){case Jt.Init:return this.state=Jt.SYNSent,Se.SYN;case Jt.SYNReceived:return this.state=Jt.Established,Se.ACK;default:return 0}}sendWindowUpdate(){if(this.state===Jt.Paused){this.epochStart=Date.now();return}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.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.streamId,length:o})}};function EE(r){return{type:je[r.type],flags:[(r.flag&Se.SYN)===Se.SYN?"SYN":void 0,(r.flag&Se.ACK)===Se.ACK?"ACK":void 0,(r.flag&Se.FIN)===Se.FIN?"FIN":void 0,(r.flag&Se.RST)===Se.RST?"RST":void 0].filter(Boolean),streamID:r.streamID,length:r.length}}var xE="/yamux/1.0.0",fp=class{protocol=xE;_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[me]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new I4(e,{...this._init})}},I4=class extends Mo{nextStreamID;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;decoder;keepAlive;enableKeepAlive;keepAliveInterval;maxInboundStreams;maxOutboundStreams;constructor(e,t={}){super(e,{...t,protocol:xE,name:"yamux"}),this.client=e.direction==="outbound",yE(t),this.enableKeepAlive=t.enableKeepAlive??jl.enableKeepAlive,this.keepAliveInterval=t.keepAliveInterval??jl.keepAliveInterval,this.maxInboundStreams=t.maxInboundStreams??jl.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??jl.maxOutboundStreams,this.decoder=new up,this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log.trace("muxer created"),this.enableKeepAlive&&(this.log.trace("muxer keepalive enabled interval=%s",this.keepAliveInterval),this.keepAlive=oa(async n=>{try{await this.ping(n)}catch(o){this.log.error("ping error: %s",o)}},this.keepAliveInterval,{runImmediately:!0}),this.keepAlive.start())}onData(e){for(let t of this.decoder.emitFrames(e))this.handleFrame(t)}onCreateStream(){if(this.remoteGoAway!==void 0)throw new Br("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Br("Muxer closed locally");let e=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.maxOutboundStreams)throw new mi("max outbound streams exceeded");this.log.trace("new outgoing stream id=%s",e);let t=this._newStream(e,Jt.Init,"outbound");return this.numOutboundStreams++,queueMicrotask(()=>{t.sendWindowUpdate()}),t}async ping(e){if(this.remoteGoAway!==void 0)throw new Br("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Br("Muxer closed locally");if(this.activePing!=null)return Pe(this.activePing.promise,e?.signal);this.activePing=Object.assign(Promise.withResolvers(),{id:this.nextPingID++,start:Date.now()}),this.sendPing(this.activePing.id);try{this.rtt=await Pe(this.activePing.promise,e?.signal)}finally{this.activePing=void 0}return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.status==="open")try{let t=e?.reason??ct.NormalTermination;this.log.trace("muxer close reason=%s",ct[t]),await super.close(e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}abort(e){if(this.status==="open")try{super.abort(e);let t=ct.InternalError;gE(e)&&(t=e.reason),this.log.error("muxer abort reason=%s error=%s",t,e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}onTransportClosed(){try{super.onTransportClosed()}finally{this.keepAlive?.stop()}}_newStream(e,t,n){if(this.streams.find(s=>s.streamId===e)!=null)throw new A("Stream already exists with that id");let o=new dp({...this.streamOptions,id:`${e}`,streamId:e,state:t,direction:n,sendFrame:this.sendFrame.bind(this),log:this.log.newScope(`${n}:${e}`),getRTT:this.getRTT.bind(this)});return o.addEventListener("close",()=>{this.closeStream(e)},{once:!0}),o}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--}handleFrame(e){let{streamID:t,type:n,length:o}=e.header;if(this.log.trace("received frame %o",EE(e.header)),t===0)switch(n){case je.Ping:{this.handlePing(e.header);return}case je.GoAway:{this.handleGoAway(o);return}default:throw new Sr("Invalid frame type")}else switch(e.header.type){case je.Data:case je.WindowUpdate:{this.handleStreamMessage(e);return}default:throw new Sr("Invalid frame type")}}handlePing(e){if(e.flag===Se.SYN)this.log.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,Se.ACK);else if(e.flag===Se.ACK)this.log.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new Sr("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Na("ping not requested");if(this.activePing.id!==e)throw new Oa("ping doesn't match our id");this.activePing.resolve(Date.now()-this.activePing.start)}handleGoAway(e){this.log.trace("received GoAway reason=%s",ct[e]??"unknown"),this.remoteGoAway=e,e===ct.NormalTermination?this.onTransportClosed():this.abort(new Error("Remote sent GoAway"))}handleStreamMessage(e){let{streamID:t,flag:n,type:o}=e.header;(n&Se.SYN)===Se.SYN&&this.incomingStream(t);let s=this.streams.find(i=>i.streamId===t);if(s===void 0){this.log.trace("frame for missing stream id=%s",t);return}switch(o){case je.WindowUpdate:{s.handleWindowUpdate(e);return}case je.Data:{s.handleData(e);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new A("Both endpoints are clients");if(this.streams.find(n=>n.streamId===e))return;if(this.log.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:je.WindowUpdate,flag:Se.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.maxInboundStreams){this.log("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:je.WindowUpdate,flag:Se.RST,streamID:e,length:0});return}let t=this._newStream(e,Jt.SYNReceived,"inbound");this.numInboundStreams++,this.onRemoteStream(t)}sendFrame(e,t){let n;if(e.type===je.Data){if(t==null)throw new Sr("Invalid frame");n=new X(A4(e),t)}else n=A4(e);return this.log.trace("sending frame %o",EE(e)),this.send(n)}sendPing(e,t=Se.SYN){t===Se.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=ct.NormalTermination){this.log("sending GoAway reason=%s",ct[e]),this.localGoAway=e,this.sendFrame({type:je.GoAway,flag:0,streamID:0,length:e})}};function vE(r={}){return()=>new fp(r)}var SE="libp2p",AE="autonat",IE="1.0.0";var Ve;(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=()=>We(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=()=>We(o)})(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=ne((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:[]},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.id=u.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Ne('Decode error - map field "addrs" had too many elements');p.addrs.push(u.bytes());break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(s=r.PeerInfo||(r.PeerInfo={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=ne((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={},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(u,u.uint32(),{limits:h.limits?.peer});break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(i=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=ne((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={},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>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(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((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=>re(l,r.codec()),r.decode=(l,d)=>te(l,r.codec(),d)})(Ve||(Ve={}));var gL=4,yL=8,hp=class{components;protocol;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;started;log;topologyId;dialResults;findPeers;addressFilter;connectionThreshold;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:auto-nat"),this.started=!1,this.protocol=`/${t.protocolPrefix??SE}/${AE}/${IE}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??20,this.connectionThreshold=t.connectionThreshold??80,this.maxMessageSize=t.maxMessageSize??8192,this.dialResults=ot({name:"libp2p_autonat_dial_results",metrics:e.metrics}),this.findPeers=oa(this.findRandomPeers.bind(this),6e4),this.addressFilter=Et(1024)}[Symbol.toStringTag]="@libp2p/autonat";[me]=["@libp2p/autonat"];get[ur](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,(e,t)=>{this.handleIncomingAutonatStream(e,t).catch(n=>{this.log.error("error handling incoming autonat stream - %e",n)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=le([AbortSignal.timeout(1e4),e?.signal]);try{this.log("starting random walk to find peers to run AutoNAT");for await(let n of this.components.randomWalk.walk({signal:t})){if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable %s",n.id,n.multiaddrs.map(o=>o.toString()).join(", "));continue}try{this.log.trace("dial random peer %p",n.id),await this.components.connectionManager.openConnection(n.multiaddrs,{signal:t})}catch{}if(this.allAddressesAreVerified()){this.log("stopping random walk, all addresses are verified");return}if(!this.hasConnectionCapacity()){this.log("stopping random walk, too close to max connections");return}}}catch{}}async handleIncomingAutonatStream(e,t){let n=AbortSignal.timeout(this.timeout);try{let o=Ue(e,{maxDataLength:this.maxMessageSize}).pb(Ve),s=await o.read({signal:n}),i=await this.handleAutonatMessage(s,t,{signal:n});await o.write(i,{signal:n}),await e.close({signal:n})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(u=>oe(u).host),s=e.dial;if(s==null)return this.log.error("dial was missing from message"),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.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:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let u=ke(a.id);i=Ze(u)}catch(u){return this.log.error("invalid PeerId - %e",u),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.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:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>q(u)).filter(u=>{try{let f=oe(u);return Qe(u)?!1:f.host!==oe(t.remoteAddr).host?(this.log.trace("not dialing %a - target host did not match remote host %a",u,t.remoteAddr),!1):o.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(u)==null?(this.log.trace("not dialing %a - transport unsupported",u),!1):!0}catch{return!1}}).map(u=>(u.getComponents().find(f=>f.code===421)?.value==null&&(u=u.encapsulate(`/p2p/${i.toString()}`)),u));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",i),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.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(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("successfully dialed %p via %a",i,u),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(421).bytes}}}catch(h){this.log.error("could not dial %p - %e",i,h),l=h.message}finally{f!=null&&await f.close()}}return{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:d.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,s)=>o.type==="observed"&&s.type!=="observed"?1:s.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||oe(o.multiaddr).type==="ip6"&&(!t||!dd(o.multiaddr))||Qe(o.multiaddr)));for(let o of n){let s=o.multiaddr.toString(),i=this.dialResults.get(s);if(i!=null){if(i.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",i.multiaddr,e);continue}if(i.queue.size>10){this.log.trace("%a already has enough peers queued",i.multiaddr);continue}}if(i==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(s),this.addressFilter.has(s))continue;this.addressFilter.add(s),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",s),i={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:Qg(),queue:new It({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(s,i)}return i}}removeOutdatedMultiaddrResults(){let e=new Set(this.components.addressManager.getAddressesWithMetadata().filter(({expires:t})=>t<Date.now()).map(({multiaddr:t})=>t.toString()));for(let t of this.dialResults.keys())e.has(t)||(this.log.trace("remove results for %a",t),this.dialResults.delete(t))}async verifyExternalAddresses(e){if(!this.isStarted())return;this.removeOutdatedMultiaddrResults();let n=(await this.components.peerStore.get(e.remotePeer)).addresses.some(({multiaddr:i})=>oe(i).type==="ip6"),o=this.getNetworkSegment(e.remoteAddr),s=this.getFirstUnverifiedMultiaddr(o,n);if(s==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){s.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",s.multiaddr),this.confirmAddress(s)):this.log("skipping verifying %a because we are too close to the connection limit",s.multiaddr);return}s.queue.add(async i=>{await this.askPeerToVerify(e,o,i)},{peerId:e.remotePeer,multiaddr:s.multiaddr}).catch(i=>{s?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,s?.multiaddr,i)})}async askPeerToVerify(e,t,n){let o=this.dialResults.get(n.multiaddr.toString());if(o==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let s=AbortSignal.timeout(this.timeout);this.log.trace("asking %a to verify multiaddr %s",e.remoteAddr,n.multiaddr);let i=await e.newStream(this.protocol,{signal:s});try{let a=Ue(i).pb(Ve),[,c]=await Promise.all([a.write({type:Ve.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:s}),a.read({signal:s})]);if(c.type!==Ve.MessageType.DIAL_RESPONSE||c.dialResponse==null){this.log("invalid autonat response from %p - %j",e.remotePeer,c);return}let l=c.dialResponse.status;if(this.log.trace("autonat response from %p for %a is %s",e.remotePeer,n.multiaddr,l),l!==Ve.ResponseStatus.OK&&l!==Ve.ResponseStatus.E_DIAL_ERROR)return;if(o=this.dialResults.get(n.multiaddr.toString()),o==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(o.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(o.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(o.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(o.verifyingPeers.add(e.remotePeer),o.networkSegments.push(t),l===Ve.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===Ve.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===gL&&this.confirmAddress(o),o.failure===yL&&this.unconfirmAddress(o)}finally{try{await i.close({signal:s})}catch(a){i.abort(a)}}}hasConnectionCapacity(){let t=this.components.connectionManager.getConnections().length,n=this.components.connectionManager.getMaxConnections();return t/n*100<this.connectionThreshold}confirmAddress(e){this.log("%s address %a is externally dialable",e.type,e.multiaddr),this.components.addressManager.confirmObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!0,e.queue.abort()}unconfirmAddress(e){this.log("%s address %a is not externally dialable",e.type,e.multiaddr),this.components.addressManager.removeObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!1,e.queue.abort()}getNetworkSegment(e){let t=oe(e);switch(t.type){case"ip4":return t.host.split(".")[0].padStart(3,"0");case"ip6":return t.host.split(":")[0].padStart(4,"0");default:throw new A(`Remote address ${e} was not an IPv4 or Ipv6 address`)}}};function TE(r={}){return e=>new hp(e,r)}var wL="bootstrap",bL=50,EL=1e3,T4=class extends ie{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??EL,this.list=t.list.map(n=>q(n)).filter(n=>pa.matches(n)?n.getComponents().findLast(s=>s.code===421)?.value==null?(this.log.error("invalid bootstrap multiaddr without peer id"),!1):!0:(this.log.error("invalid multiaddr %a",n),!1)).map(n=>({id:Me(n.getComponents().findLast(o=>o.code===421)?.value??""),multiaddrs:[n]})),this._init=t}[ls]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[me]=["@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("failed to discover bootstrap peers - %e",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??wL]:{value:this._init.tagValue??bL,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",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function _E(r){return e=>new T4(e,r)}var _4=1e3,CE=60*_4;var tle=120*CE,kE=1,pp=5e3,PE=100;var Xl=`${us}-circuit-relay`,rle=2*CE,nle=BigInt(1<<17),ii="/libp2p/circuit/relay/0.2.0/hop",C4="/libp2p/circuit/relay/0.2.0/stop",ole=30*_4,sle=30*_4,k4=300,RE=4096,LE=.001;var jo;(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=()=>We(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((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),Ba.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),mp.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Ua.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),kt.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=Ba.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=mp.codec().decode(o,o.uint32(),{limits:i.limits?.reservation});break}case 4:{a.limit=Ua.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 5:{a.status=kt.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(jo||(jo={}));var Cn;(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=()=>We(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((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),Ba.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Ua.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),kt.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=Ba.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.limit=Ua.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 4:{a.status=kt.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(Cn||(Cn={}));var Ba;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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:ae(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 Ne('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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ba||(Ba={}));var mp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),yp.codec().encode(t.voucher,n)),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 Ne('Decode error - map field "addrs" had too many elements');s.addrs.push(t.bytes());break}case 3:{s.voucher=yp.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(mp||(mp={}));var Ua;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ua||(Ua={}));var kt;(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"})(kt||(kt={}));var P4;(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"})(P4||(P4={}));(function(r){r.codec=()=>We(P4)})(kt||(kt={}));var gp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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:ae(0),peer:ae(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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(gp||(gp={}));var yp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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&&(n.uint32(26),gp.codec().encode(t.payload,n)),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:ae(0),payloadType:ae(0),signature:ae(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=gp.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{s.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(yp||(yp={}));var Ql=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},wp=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},bp=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function R4(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Zl=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}},Ep=Ce(ve(pa.matchers[0],_e(290))),xp=Ce(_e(290));var vp=class extends ie{components;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.components=e,this.started=!1,this.running=!1,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal,this.dialPeer=this.dialPeer.bind(this),this.onPeer=this.onPeer.bind(this)}isStarted(){return this.started}async start(){this.topologyId=await this.components.registrar.register(ii,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.components.registrar.unregister(this.topologyId),this.running&&this.stopDiscovery(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,this.components.events.addEventListener("peer:discovery",this.onPeer),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.components.peerStore.all({filters:[n=>n.protocols.includes(ii)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let s=DE(n),i=DE(o);return s>i?-1:i>s?1:0}]});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=this.queue=new It({concurrency:5});this.log("start random walk");for await(let n of this.components.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.components.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(this.dialPeer,{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p - %e",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network - %e",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort(),this.queue?.clear(),this.components.events.removeEventListener("peer:discovery",this.onPeer)}onPeer(e){this.log.trace("maybe dialing discovered peer %p",e.detail.id),this.maybeDialPeer(e).catch(t=>{this.log.trace("error dialing discovered peer %p - %e",e.detail.id,t)})}async maybeDialPeer(e){if(this.queue==null)return;let t=e.detail.id,n=e.detail.multiaddrs;if(this.queue.has(t)){this.log.trace("random peer %p was already in queue",t);return}if(this.components.connectionManager.getConnections(t)?.length>0){this.log.trace("random peer %p was already connected",t);return}if(!await this.components.connectionManager.isDialable(n)){this.log.trace("random peer %p was not dialable",t);return}this.queue?.add(this.dialPeer,{peerId:e.detail.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to discovered peer %p - %e",e.detail.id,o)})}async dialPeer({peerId:e,signal:t}){let n=le([AbortSignal.timeout(5e3),t]);try{await this.components.connectionManager.openConnection(e,{signal:n})}finally{n.clear()}}};function DE(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(R(e)).getTime()}var L4=class extends ie{connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??pp,this.reservationStore.addEventListener("relay:removed",this._onRemoveRelayPeer),this.reservationStore.addEventListener("relay:created-reservation",this._onAddRelayPeer)}_onRemoveRelayPeer=e=>{this.log("relay removed %p our relay %p",e.detail.relay,this.relay,this.relay?.equals(e.detail.relay)),this.relay?.equals(e.detail.relay)===!0&&(this.log("relay peer removed %p",e.detail.relay),this.listeningAddrs.forEach(t=>{this.addressManager.removeObservedAddr(t)}),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{details:t}=e.detail;t.type!=="configured"&&t.id===this.reservationId&&this.addedRelay(e.detail)};async listen(e){if(xp.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(Ep.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),o=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(o.remotePeer)){this.log("making reservation on peer %p",o.remotePeer);let s=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(s)}}else throw new cs(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}updateAnnounceAddrs(){}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),queueMicrotask(()=>{this.safeDispatchEvent("close")})}addedRelay(e){this.log("relay peer added %p",e.relay),this.relay=e.relay,this.listeningAddrs=e.details.reservation.addrs.map(t=>q(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function NE(r){return new L4(r)}var OE="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var ME=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=OE[t[r]&63];return e};var xL=60*1e3*10,vL=60*1e3*5,SL=30*1e3,Sp=class extends ie{peerId;connectionManager;peerStore;events;reserveQueue;reservations;pendingReservations;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.peerStore=e.peerStore,this.events=e.events,this.reservations=new Ut,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??PE,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??pp,this.started=!1,this.relayFilter=Et(100),this.reserveQueue=new It({concurrency:t?.reservationConcurrency??kE,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(s=>s.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(s=>{this.log("could not remove relay %p - %e",n.detail,s)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Xl)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Xl]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error("failed to clean up and redial old relays during afterStart - %e",e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=ME();return this.pendingReservations.push(e),this.#r(),e}async addRelay(e,t){if(this.peerId.equals(e))throw this.log.trace("not trying to use self as relay"),new cs("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new bp("The reservation queue is full");let n=this.reserveQueue.find(e);if(n!=null)return this.log.trace("potential relay peer %p is already in the reservation queue",e),n.join();if(this.relayFilter.has(e.toMultihash().bytes))throw new cs("The relay was previously invalid");return this.log.trace("try to reserve relay slot with %p",e),this.reserveQueue.add(async()=>{let o=Date.now();try{let s=this.reservations.get(e);if(s!=null){let p=this.connectionManager.getConnections(e),g=!1;if(p.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),p.map(m=>m.id).includes(s.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),g=!0),g&&R4(s.reservation.expire)>xL)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:s};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new Ql("Not making reservation on discovered relay because we do not need any more relays");let i=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:i});if(yt.matches(a.remoteAddr))throw new wp("not creating reservation over relayed connection");let c=await this.#e(a,{signal:i}),l=R4(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let d=Math.min(Math.max(l-vL,SL),Math.pow(2,31)-1),u=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async p=>{this.log.error("could not refresh reservation to relay %p - %e",e,p),await this.#t(e)}).catch(p=>{this.log.error("could not remove expired reservation to relay %p - %e",e,p)})},d),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Ql("Made reservation on relay but did not need any more discovered relays");f={timeout:u,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:u,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Xl]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(s){throw t==="discovered"&&s.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,s),(s.name==="DialError"||s.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(i=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,i)}),s}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(e){return e==null?this.reservations.size:[...this.reservations.values()].reduce((t,n)=>(n.type===e&&t++,t),0)}cancelReservations(){[...this.reservations.values()].forEach(e=>{clearTimeout(e.timeout)}),this.reservations.clear()}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(ii,t),s=Ue(n).pb(jo);this.log.trace("send RESERVE to %p",e.remotePeer),await s.write({type:jo.Type.RESERVE},t);let i;try{this.log.trace("reading response from %p",e.remotePeer),i=await s.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %s",i.status),i.status===kt.OK&&i.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of i.reservation.addrs){let d=q(l);d.getComponents().find(u=>u.code===421)==null&&(d=d.encapsulate(`/p2p/${e.remotePeer}`)),d=q(d.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(d.toString())}return i.reservation.addrs=[...c].map(l=>q(l).bytes),i.reservation}let a=`reservation failed with status ${i.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#t(e){let t=this.reservations.get(e);t!=null&&(this.log("removing relay reservation with %p from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),t.type==="discovered"&&this.pendingReservations.push(t.id),await this.peerStore.merge(e,{tags:{[Xl]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#r())}#r(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=Et(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var D4=class extends Oo{stream;init;constructor(e){super({...e,direction:e.stream.direction}),this.init=e,this.stream=e.stream,this.stream.addEventListener("close",t=>{this.onTransportClosed(t.error)}),this.stream.addEventListener("remoteCloseWrite",t=>{this.onRemoteCloseWrite(),this.close().catch(n=>{this.abort(n)})}),this.stream.addEventListener("message",t=>{e.onDataRead?.(t.data),this.onData(t.data)}),this.stream.addEventListener("drain",()=>{this.safeDispatchEvent("drain")})}sendData(e){return this.init.onDataWrite?.(e),{sentBytes:e.byteLength,canSendMore:this.stream.send(e)}}async sendClose(e){await this.stream.close(e)}sendReset(){this.stream.abort(new Error("An error occurred"))}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}};function N4(r){return new D4(r)}var AL=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(q)}catch{return!1}return!0},BE={maxInboundStopStreams:k4,maxOutboundStopStreams:k4,stopTimeout:3e4},Ap=class{components;discovery;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.maxInboundStopStreams=t.maxInboundStopStreams??BE.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??BE.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new vp(e,{filter:t.discoveryFilter??Zg(RE,LE)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p - %e",n.detail,o)})}),this.reservationStore=new Sp(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1,this.onStop=this.onStop.bind(this)}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[me]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[ur](){return this.discovery!=null?["@libp2p/identify"]:[]}[vo]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,this.shutdownController.signal,await this.components.registrar.handle(C4,this.onStop,{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await at(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await lt(this.discovery,this.reservationStore),await this.components.registrar.unhandle(C4),this.started=!1}async dial(e,t){let n=e.toString().split("/p2p-circuit"),o=q(n[0]),s=q(n[n.length-1]),i=o.getComponents().find(h=>h.code===421)?.value,a=s.getComponents().find(h=>h.code===421)?.value;if(i==null||a==null){let h=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${h}`),new Eo(`C${h}`)}let c=Me(i),l=Me(a),u=this.components.connectionManager.getConnections(c)[0];u==null?(await this.components.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new H("circuit-relay:open-connection")),u=await this.components.connectionManager.openConnection(c,t)):t.onProgress?.(new H("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new H("circuit-relay:open-hop-stream")),f=await u.newStream(ii,t);let h=Ue(f).pb(jo);t.onProgress?.(new H("circuit-relay:write-connect-message")),await h.write({type:jo.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[q(s).bytes]}},t),t.onProgress?.(new H("circuit-relay:read-connect-response"));let p=await h.read(t);if(p.status!==kt.OK)throw new de(`failed to connect via relay with status ${p?.status?.toString()??"undefined"}`);let g=new Zl(p.limit),m=N4({stream:h.unwrap().unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.components.peerId.toString()}`),onDataRead:g.onData,onDataWrite:g.onData,log:f.log.newScope("circuit-relay:connection")}),w=await this.components.upgrader.upgradeOutbound(m,{...t,limits:g.getLimits()});return w.log("outbound relayed connection established to %p with limits %o, over connection %s",w.remotePeer,p.limit??"none",u.id),w}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed - %e",l,c,h),f?.abort(h),h}}createListener(e){return NE({peerId:this.components.peerId,connectionManager:this.components.connectionManager,addressManager:this.components.addressManager,reservationStore:this.reservationStore,logger:this.components.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Ep.exactMatch(t)||xp.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>yt.exactMatch(t))}async onStop(e,t){let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);try{if(!this.reservationStore.hasReservation(t.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.components.transportManager.listen([t.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 - %e",u)}let o=Ue(e).pb(Cn),s=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",t.remotePeer,s.type),s?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(s.type!==Cn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.UNEXPECTED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(!AL(s)){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}let i=Ze(ke(s.peer.id));if(await this.components.connectionGater.denyInboundRelayedConnection?.(t.remotePeer,i)===!0){this.log.error("connection gater denied inbound relayed connection from %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.PERMISSION_DENIED},{signal:n}),await e.close({signal:n});return}this.log.trace("sending success response to %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.OK},{signal:n});let a=new Zl(s.limit),c=t.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),l=this.components.addressManager.getAddresses()[0],d=N4({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,onDataRead:a.onData,onDataWrite:a.onData,log:e.log.newScope("circuit-relay:connection")});await this.components.upgrader.upgradeInbound(d,{limits:a.getLimits(),signal:n}),d.log("inbound relayed connection established to %p with limits %o, over connection %s",i,s.limit??"none",t.id)}finally{n?.clear()}}};function UE(r={}){return e=>new Ap(e,r)}var on;(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=()=>We(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((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 Ne('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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(on||(on={}));function O4(r,e){return yt.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:jf.matches(r)?!0:O9.matches(r)?!Qe(r):!1}var FE=1024*4,$E=100,Ip={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Tp=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??Ip.timeout,this.retries=t.retries??Ip.retries,this.maxInboundStreams=t.maxInboundStreams??Ip.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Ip.maxOutboundStreams,this.handleIncomingUpgrade=this.handleIncomingUpgrade.bind(this)}[Symbol.toStringTag]="@libp2p/dcutr";[ur]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Jl,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{yt.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt - %e",n)})}}),await this.registrar.handle(Jl,this.handleIncomingUpgrade,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Jl),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([Jl],{signal:o.signal,runOnLimitedConnection:!0});let s=Ue(t,{maxDataLength:FE}).pb(on);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:on.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!==on.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:on.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await By(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:$E,force:!0,initiator:!1});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 - %e",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.getComponents().find(i=>i.code===421)?.value==null?s.encapsulate(`/p2p/${e.remotePeer}`):s}).filter(o=>O4(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(yt.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",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)},o=Ue(e,{maxDataLength:FE}).pb(on);this.log("A receiving connect");let s=await o.read(n);if(s.type!==on.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 in %o",s.observedAddresses.map(l=>q(l))),new de("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:on.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==on.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:$E,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n),await e.close(n)}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=q(n);if(!O4(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Jl="/libp2p/dcutr";function KE(r={}){return e=>new Tp(e,r)}function j(r){if(r!==void 0&&r!==j.REQUEST&&r!==j.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");r===void 0||this.initialize(r),this.maxHeaderSize=j.maxHeaderSize}j.prototype.initialize=function(r,e){if(r!==j.REQUEST&&r!==j.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");this.type=r,this.state=r+"_LINE",this.info={headers:[],upgrade:!1},this.trailers=[],this.line="",this.isChunked=!1,this.connection="",this.headerSize=0,this.body_bytes=null,this.isUserCall=!1,this.hadError=!1};j.encoding="ascii";j.maxHeaderSize=80*1024;j.REQUEST="REQUEST";j.RESPONSE="RESPONSE";var VE=j.kOnHeaders=1,M4=j.kOnHeadersComplete=2,_p=j.kOnBody=3,B4=j.kOnMessageComplete=4;j.prototype[VE]=j.prototype[M4]=j.prototype[_p]=j.prototype[B4]=function(){};var HE=!0;Object.defineProperty(j,"kOnExecute",{get:function(){return HE=!1,99}});var qE=j.methods=["DELETE","GET","HEAD","POST","PUT","CONNECT","OPTIONS","TRACE","COPY","LOCK","MKCOL","MOVE","PROPFIND","PROPPATCH","SEARCH","UNLOCK","BIND","REBIND","UNBIND","ACL","REPORT","MKACTIVITY","CHECKOUT","MERGE","M-SEARCH","NOTIFY","SUBSCRIBE","UNSUBSCRIBE","PATCH","PURGE","MKCALENDAR","LINK","UNLINK","SOURCE"],WE=qE.indexOf("CONNECT");j.prototype.reinitialize=j;j.prototype.close=j.prototype.pause=j.prototype.resume=j.prototype.remove=j.prototype.free=function(){};j.prototype._compatMode0_11=!1;j.prototype.getAsyncId=function(){return 0};var IL={REQUEST_LINE:!0,RESPONSE_LINE:!0,HEADER:!0};j.prototype.execute=function(r,e,t){if(!(this instanceof j))throw new TypeError("not a HTTPParser");e=e||0,t=typeof t=="number"?t:r.length,this.chunk=r,this.offset=e;var n=this.end=e+t;try{for(;this.offset<n&&!this[this.state](););}catch(o){if(this.isUserCall)throw o;return this.hadError=!0,o}return this.chunk=null,t=this.offset-e,IL[this.state]&&(this.headerSize+=t,this.headerSize>(this.maxHeaderSize||j.maxHeaderSize))?new Error("max header size exceeded"):t};var TL={REQUEST_LINE:!0,RESPONSE_LINE:!0,BODY_RAW:!0};j.prototype.finish=function(){if(!this.hadError){if(!TL[this.state])return new Error("invalid state for EOF");this.state==="BODY_RAW"&&this.userCall()(this[B4]())}};j.prototype.consume=j.prototype.unconsume=j.prototype.getCurrentBuffer=function(){};j.prototype.userCall=function(){this.isUserCall=!0;var r=this;return function(e){return r.isUserCall=!1,e}};j.prototype.nextRequest=function(){this.userCall()(this[B4]()),this.reinitialize(this.type)};j.prototype.consumeLine=function(){for(var r=this.end,e=this.chunk,t=this.offset;t<r;t++)if(e[t]===10){var n=this.line+R(e.subarray(this.offset,t),j.encoding);return n.charAt(n.length-1)==="\r"&&(n=n.substr(0,n.length-1)),this.line="",this.offset=t+1,n}this.line+=R(e.subarray(this.offset,this.end),j.encoding),this.offset=this.end};var _L=/^([^: \t]+):[ \t]*((?:.*[^ \t])|)/,CL=/^[ \t]+(.*[^ \t])/;j.prototype.parseHeader=function(r,e){if(r.indexOf("\r")!==-1)throw Cp("HPE_LF_EXPECTED");var t=_L.exec(r),n=t&&t[1];if(n)e.push(n),e.push(t[2]);else{var o=CL.exec(r);o&&e.length&&(e[e.length-1]&&(e[e.length-1]+=" "),e[e.length-1]+=o[1])}};var kL=/^([A-Z-]+) ([^ ]+) HTTP\/(\d)\.(\d)$/;j.prototype.REQUEST_LINE=function(){var r=this.consumeLine();if(r){var e=kL.exec(r);if(e===null)throw Cp("HPE_INVALID_CONSTANT");if(this.info.method=this._compatMode0_11?e[1]:qE.indexOf(e[1]),this.info.method===-1)throw new Error("invalid request method");this.info.url=e[2],this.info.versionMajor=+e[3],this.info.versionMinor=+e[4],this.body_bytes=0,this.state="HEADER"}};var PL=/^HTTP\/(\d)\.(\d) (\d{3}) ?(.*)$/;j.prototype.RESPONSE_LINE=function(){var r=this.consumeLine();if(r){var e=PL.exec(r);if(e===null)throw Cp("HPE_INVALID_CONSTANT");this.info.versionMajor=+e[1],this.info.versionMinor=+e[2];var t=this.info.statusCode=+e[3];this.info.statusMessage=e[4],((t/100|0)===1||t===204||t===304)&&(this.body_bytes=0),this.state="HEADER"}};j.prototype.shouldKeepAlive=function(){if(this.info.versionMajor>0&&this.info.versionMinor>0){if(this.connection.indexOf("close")!==-1)return!1}else if(this.connection.indexOf("keep-alive")===-1)return!1;return!!(this.body_bytes!==null||this.isChunked)};j.prototype.HEADER=function(){var r=this.consumeLine();if(r!==void 0){var e=this.info;if(r)this.parseHeader(r,e.headers);else{for(var t=e.headers,n=!1,o,s=!1,i=0;i<t.length;i+=2)switch(t[i].toLowerCase()){case"transfer-encoding":this.isChunked=t[i+1].toLowerCase()==="chunked";break;case"content-length":if(o=+t[i+1],n){if(o!==this.body_bytes)throw Cp("HPE_UNEXPECTED_CONTENT_LENGTH")}else n=!0,this.body_bytes=o;break;case"connection":this.connection+=t[i+1].toLowerCase();break;case"upgrade":s=!0;break}this.isChunked&&n&&(n=!1,this.body_bytes=null),s&&this.connection.indexOf("upgrade")!=-1?e.upgrade=this.type===j.REQUEST||e.statusCode===101:e.upgrade=e.method===WE,this.isChunked&&e.upgrade&&(this.isChunked=!1),e.shouldKeepAlive=this.shouldKeepAlive();var a;if(HE?a=this.userCall()(this[M4](e)):a=this.userCall()(this[M4](e.versionMajor,e.versionMinor,e.headers,e.method,e.url,e.statusCode,e.statusMessage,e.upgrade,e.shouldKeepAlive)),a===2)return this.nextRequest(),!0;if(this.isChunked&&!a)this.state="BODY_CHUNKHEAD";else{if(a||this.body_bytes===0)return this.nextRequest(),e.upgrade;this.body_bytes===null?this.state="BODY_RAW":this.state="BODY_SIZED"}}}};j.prototype.BODY_CHUNKHEAD=function(){var r=this.consumeLine();r!==void 0&&(this.body_bytes=parseInt(r,16),this.body_bytes?this.state="BODY_CHUNK":this.state="BODY_CHUNKTRAILERS")};j.prototype.BODY_CHUNK=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[_p](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||(this.state="BODY_CHUNKEMPTYLINE")};j.prototype.BODY_CHUNKEMPTYLINE=function(){var r=this.consumeLine();if(r!==void 0){if(r!=="")throw new Error("Expected empty line");this.state="BODY_CHUNKHEAD"}};j.prototype.BODY_CHUNKTRAILERS=function(){var r=this.consumeLine();r!==void 0&&(r?this.parseHeader(r,this.trailers):(this.trailers.length&&this.userCall()(this[VE](this.trailers,"")),this.nextRequest()))};j.prototype.BODY_RAW=function(){this.userCall()(this[_p](this.chunk.slice(this.offset,this.end),0,this.end-this.offset)),this.offset=this.end};j.prototype.BODY_SIZED=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[_p](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||this.nextRequest()};["Headers","HeadersComplete","Body","MessageComplete"].forEach(function(r){var e=j["kOn"+r];Object.defineProperty(j.prototype,"on"+r,{get:function(){return this[e]},set:function(t){return this._compatMode0_11=!0,WE="CONNECT",this[e]=t}})});function Cp(r){var e=new Error("Parse Error");return e.code=r,e}function zE(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")}function U4(r,e={}){let t=zE(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(o){try{let{value:s,done:i}=await t.next();if(this._cancelled)return;if(i===!0){o.close();return}o.enqueue(s)}catch(s){o.error(s)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}var RL=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),GE=nc({name:"sha-1",code:17,encode:RL("SHA-1")});var kp=class extends globalThis.Request{constructor(e,t={}){let n=t.method??"GET",o=kn(t),s=t.body;Pp(n,o)&&(t.method="UPGRADE"),super(e,t),Object.defineProperties(this,{body:{value:s,writable:!1},method:{value:n,writable:!1},headers:{value:o,writable:!1}})}};var YE={100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a Teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"};var Pn=class extends globalThis.Response{constructor(e,t={}){let n=kn(t),o=t.status??200;(o<200||o>599)&&(t.status=200),super(e,t),Object.defineProperties(this,{status:{value:o,writable:!1},statusText:{value:YE[o],writable:!1},headers:{value:n,writable:!1}})}};var LL=["dns","dns4","dns6","dnsaddr"];function tu(r,e){if(r instanceof URL)return r;let t=Lp(r,e),{httpPath:n}=Dp(r);return new URL(`http://${t}${n}`)}function ru(r){return r instanceof Uint8Array?r:r instanceof DataView?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r,0,r.byteLength)}function XE(r,e){let t={method:r.method,headers:r.headers};if((t.method!=="GET"||r.upgrade)&&t.method!=="HEAD"){let n=e;r.upgrade||(n=NL(e,r.headers.get("content-length"))),t.body=U4(n),t.duplex="half"}return new kp(F4(r).toString(),t)}async function QE(r,e){if(e.send(C([`HTTP/1.1 ${r.status} ${r.statusText}`,...Rp(r.headers),"",""].join(`\r
52
- `))),r.body==null){await e.close().catch(n=>{e.abort(n)});return}let t=r.body.getReader();for(;;){let n=await t.read();if(n.value!=null&&(e.send(n.value)||await e.onDrain()),n.done)break}await e.close().catch(n=>{e.abort(n)})}var ZE=C(["HTTP/1.1 404 Not Found","Connection: close","",""].join(`\r
53
- `)),DL=C(["HTTP/1.1 400 Bad Request","Connection: close","",""].join(`\r
54
- `)),rde=C(["HTTP/1.1 500 Internal Server Error","Connection: close","",""].join(`\r
55
- `)),nde=C(["HTTP/1.1 501 Not Implemented","Connection: close","",""].join(`\r
56
- `));function Rp(r){let e=[];r.get("Connection")==null&&r.set("Connection","close");for(let[t,n]of r.entries())e.push(`${t}: ${n}`);return e}async function*NL(r,e){if(e=parseInt(`${e??""}`),e==null||isNaN(e))return r;let t=0;for await(let n of r){if(t+=n.byteLength,t>e){yield n.subarray(0,t-e);return}if(yield n.subarray(),t===e)return}}function Fa(r,e){if(typeof r=="string"&&(r.startsWith("/")?r=q(r):r=new URL(r)),Rt(r)&&(r=q(`/p2p/${r}`)),r instanceof URL&&r.protocol==="multiaddr:"&&(r=mh(r.toString())),yn(r)&&(r=[r]),Array.isArray(r)){for(let t of r)if(t.getComponents().some(({name:o})=>o==="http")){let o=qo(t);return new URL(`${o}${e??""}`)}}return e==null?r:r instanceof URL?new URL(`${r}${e.substring(1)}`):r.map(t=>t.encapsulate(`/http-path/${encodeURIComponent(e.substring(1))}`))}function kn(r={}){return r.headers instanceof Headers||(r.headers=new Headers(r.headers)),r.headers}function eu(r){return r!=null&&r!==""}function Lp(r,e){let t,n=80,o="http:";if(r instanceof URL&&(t=r.hostname,n=parseInt(r.port,10),o=r.protocol),eu(t)||(t=e.get("host")??void 0),!eu(t)&&Array.isArray(r))for(let s of r){let a=s.getComponents().filter(({name:c})=>LL.includes(c))?.[0]?.value;if(a!=null){t=a;break}}if(!eu(t)&&Array.isArray(r))for(let s of r){let i=s.getComponents().findLast(a=>a.code===421)?.value;try{let a=oe(s);a.port!=null&&(n=a.port)}catch{}if(i!=null){t=Me(i).toCID().toString(Ar);break}}if(!eu(t)&&Array.isArray(r))for(let s of r)try{let i=oe(s);i.host!=null&&(t=i.host);break}catch{}if(eu(t))return o==="http:"&&n!==80&&(t=`${t}:${n}`),o==="https:"&&n!==443&&(t=`${t}:${n}`),t;throw new A("Could not determine request host name - a request must have a host header, be made to a DNS or IP-based multiaddr or an http(s) URL")}function Dp(r){let e="/";return r=r.map(t=>q(t.getComponents().filter(n=>n.name==="http-path"?(e=n.value??"/",!1):!0))),{httpPath:e,addresses:r}}function Np(r,e=["GET"]){return r==null?e:(typeof r=="string"&&(r=[r]),r.map(t=>t.toUpperCase()))}function F4(r){let e=r.url??"/";if(e.startsWith("http"))return new URL(e);let t=OL(r);return new URL(`http://${t}${e}`)}function OL(r){let e=r.headers?.host;if(e==null&&(e=r.headers?.Host),e==null&&typeof r.headers.get=="function"&&(e=r.headers.get("host")),e==null)throw new A("Could not read host");return e}function Pp(r,e){return r==="GET"&&e.get("connection")?.toLowerCase()==="upgrade"&&e.get("upgrade")?.toLowerCase()==="websocket"}function jE(r,e){if(r instanceof Headers)return r.get(e)??void 0;let t=r[e];return Array.isArray(t)?t.join(","):t}async function $4(r){if(jE(r,"sec-websocket-version")!=="13")throw new as("Invalid version");let e=jE(r,"sec-websocket-key");if(e==null)throw new as("Missing sec-websocket-key");let t=`${e}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,n=await GE.digest(C(t)),o=Ja.encode(n.digest).substring(1);return new Headers({Upgrade:"websocket",Connection:"upgrade","Sec-WebSocket-Accept":o})}async function JE(r,e){let t=new j("REQUEST"),n=new X,o;t[j.kOnHeadersComplete]=s=>{let i=new Headers;for(let a=0;a<s.headers.length;a+=2)i.set(s.headers[a].toLowerCase(),s.headers[a+1]);o={...s,headers:i,raw:n,method:j.methods[s.method]}};try{for(;;){let{data:s}=await Xt(r,"message",e?.signal),i=s.subarray(),a=t.execute(i,0,i.byteLength);if(a instanceof Error)throw a;if(n.append(i.subarray(0,a)),a<i.byteLength&&r.push(i.subarray(a)),o!=null)return o}}catch(s){r.abort(s)}finally{t.finish()}throw new Error("Failed to read header info from request")}var Op=class extends Error{static name="InvalidResponseError";name="InvalidResponseError"};var ML=[101,204,205,304];async function ex(r,e,t){let n=Promise.withResolvers(),o=new TransformStream,s=o.writable.getWriter(),i=!1,a=new j("RESPONSE");a.maxHeaderSize=t.maxHeaderSize??j.maxHeaderSize,a[j.kOnHeadersComplete]=l=>{t.log("response headers complete"),i=!0;let d=new Headers;for(let h=0;h<l.headers.length;h+=2)d.append(l.headers[h],l.headers[h+1]);let u=o.readable;ML.includes(l.statusCode)&&(o.writable.close().catch(()=>{}),o.readable.cancel().catch(()=>{}),u=null);let f=new Pn(u,{status:l.statusCode,statusText:l.statusMessage,headers:d});n.resolve(f)},a[j.kOnBody]=l=>{t.log("response read body %d bytes",l.byteLength),s.write(l).catch(d=>{n.reject(d)})},a[j.kOnMessageComplete]=()=>{t.log("response message complete"),s.close().catch(l=>{n.reject(l)})};let c=0;return r.addEventListener("message",({data:l})=>{t.log("response stream read %d bytes",l.byteLength),c+=l.byteLength;let d=a.execute(l.subarray(),0,l.byteLength);d instanceof Error&&(r.abort(d),a.finish())}),r.addEventListener("remoteCloseWrite",()=>{i||n.reject(new Op(`Response ended before headers were received, read ${c} bytes`)),a.finish()}),n.promise}function tx(r,e){return e.set("Content-Length",`${r.size}`),e.set("Content-Type",r.type!=null&&r.type!==""?r.type:"application/octet-stream"),r.stream()}function rx(r,e){return e.set("Content-Length",`${r.byteLength}`),e.set("Content-Type","application/octet-stream"),new ReadableStream({start(t){t.enqueue(ru(r)),t.close()}})}function BL(r,e,t){let n=[`--${t}`],o=0,s=2;return typeof e=="string"?(n.push(`Content-Disposition: form-data; name="${r}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${e.length}`,""),o=e.length+s):(n.push(`Content-Disposition: form-data; name="${r}"; filename="${encodeURIComponent(e.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${e.size}`,""),o=e.size+s),C(n.join(`\r
57
- `)).byteLength+o}function nx(r,e){let t=`-----------------------------${crypto.randomUUID()}`;e.set("Content-Type",`multipart/form-data; boundary=${t}`);let n=0;for(let[c,l]of r.entries())n+=BL(c,l,t);e.set("Content-Length",`${n}`);let o=r.entries(),s;function i(c,l,d,u){let f=[`--${u}`];typeof d=="string"?f.push(`Content-Disposition: form-data; name="${l}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${d.length}`,"",d,""):(f.push(`Content-Disposition: form-data; name="${l}"; filename="${encodeURIComponent(d.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${d.size}`,""),s=d.stream().getReader()),c.enqueue(C(f.join(`\r
58
- `)))}async function a(c,l){if(s!=null){let f=await s.read();f.value!=null&&c.enqueue(f.value),f.done&&(c.enqueue(C(`\r
59
- `)),s=void 0);return}let{done:d,value:u}=o.next();if(u!=null){let[f,h]=u;i(c,f,h,l)}d===!0&&c.close()}return new ReadableStream({async pull(c){await a(c,t)}})}function ox(r,e){e.set("Content-Type","application/octet-stream"),e.set("Transfer-Encoding","chunked");let t=r.getReader();return new ReadableStream({async pull(n){let{done:o,value:s}=await t.read();s!=null&&(n.enqueue(C(`${s.byteLength}\r
60
- `)),n.enqueue(s),n.enqueue(C(`\r
61
- `))),o&&(n.enqueue(C(`0\r
50
+ `)}`:`${t} :`}};MA=Ki;oe.Constructed=MA;Ki.NAME="CONSTRUCTED";var C0=class extends nr{fromBER(e,t,n){return t}toBER(e){return uo}};C0.override="EndOfContentValueBlock";var UA,k0=class extends Ht{constructor(e={}){super(e,C0),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};UA=k0;oe.EndOfContent=UA;k0.NAME=md;var FA,ca=class extends Ht{constructor(e={}){super(e,nr),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}`}};FA=ca;oe.Null=FA;ca.NAME="NULL";var R0=class extends ri(nr){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=Ie.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=Ie.BufferSourceConverter.toUint8Array(e);return ti(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,z8.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};R0.NAME="BooleanValueBlock";var $A,P0=class extends Ht{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,R0),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};$A=P0;oe.Boolean=$A;P0.NAME="BOOLEAN";var L0=class extends ri(co){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=co.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let i=0;i<this.value.length;i++){let s=this.value[i].constructor.NAME;if(s===md){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==DA)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?co.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};L0.NAME="OctetStringValueBlock";var Y8,Zo=class extends Ht{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},L0),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 i=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(i.byteLength){let s=am(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Ki.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=Ie.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${t}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof Y8&&e.push(t.valueBlock.valueHexView);return Ie.BufferSourceConverter.concat(e)}};Y8=Zo;oe.OctetString=Y8;Zo.NAME=DA;var D0=class extends ri(co){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=co.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===md){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==NA)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 i=Ie.BufferSourceConverter.toUint8Array(e);if(!ti(this,i,t,n))return-1;let s=i.subarray(t,t+n);if(this.unusedBits=s[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=s.subarray(1);try{if(a.byteLength){let c=am(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=s.subarray(1),this.blockLength=s.length,t+n}toBER(e,t){if(this.isConstructed)return co.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let o=new Uint8Array(1);return o[0]=0,o.buffer}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}}};D0.NAME="BitStringValueBlock";var VA,N0=class extends Ht{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},D0),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 Ki.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let s of t)e.push(s.toString(2).padStart(8,"0"));let n=e.join(""),o=this.constructor.NAME,i=n.substring(0,n.length-this.valueBlock.unusedBits);return`${o} : ${i}`}}};VA=N0;oe.BitString=VA;N0.NAME=NA;var KA;function TU(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l=0,u=c<s?s:c,d=0;for(let f=u;f>=0;f--,d++){switch(!0){case d<a.length:l=i[s-d]+a[c-d]+t[0];break;default:l=i[s-d]+t[0]}switch(t[0]=l/10,!0){case d>=i.length:i=E0(new Uint8Array([l%10]),i);break;default:i[s-d]=l%10}}return t[0]>0&&(i=E0(t,i)),i}function LA(r){if(r>=fd.length)for(let e=fd.length;e<=r;e++){let t=new Uint8Array([0]),n=fd[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let i=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=i[0]/10,n[o]=i[0]%10}t[0]>0&&(n=E0(t,n)),fd.push(n)}return fd[r]}function _U(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l,u=0;for(let d=c;d>=0;d--,u++)switch(l=i[s-u]-a[c-u]-t,!0){case l<0:t=1,i[s-u]=l+10;break;default:t=0,i[s-u]=l}if(t>0)for(let d=s-c+1;d>=0;d--,u++)if(l=i[s-u]-t,l<0)t=1,i[s-u]=l+10;else{t=0,i[s-u]=l;break}return i.slice()}var gd=class extends ri(nr){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=z8.call(this)))}constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(kA(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let i=this.fromBER(e,t,n);if(i===-1)return i;let s=this.valueHexView;return s[0]===0&&(s[1]&128)!==0?this.valueHexView=s.subarray(1):o!==0&&s.length<o&&(o-s.length>1&&(o=s.length+1),this.valueHexView=s.subarray(o-s.length)),i}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,i=this.valueHexView,s="",a=!1;for(let c=i.byteLength-1;c>=0;c--){o=i[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=_U(LA(n),t),s="-";break;default:t=TU(t,LA(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=PA.charAt(t[c]));return a===!1&&(s+=PA.charAt(0)),s}};KA=gd;gd.NAME="IntegerValueBlock";Object.defineProperty(KA.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var hd,Jo=class extends Ht{constructor(e={}){super(e,gd),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return v0(),BigInt(this.valueBlock.toString())}static fromBigInt(e){v0();let t=BigInt(e),n=new pd,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(Ie.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${Ie.Convert.ToHex(a)}`)+t,u=Ie.BufferSourceConverter.toUint8Array(Ie.Convert.FromHex(l.toString(16)));u[0]|=128,n.write(u)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new hd({valueHex:n.final()})}convertToDER(){let e=new hd({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new hd({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};hd=Jo;oe.Integer=hd;Jo.NAME="INTEGER";var HA,O0=class extends Jo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};HA=O0;oe.Enumerated=HA;O0.NAME="ENUMERATED";var yd=class extends ri(nr){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=Ie.BufferSourceConverter.toUint8Array(e);if(!ti(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(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=aa(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){v0();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,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=Vi(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",uo;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n}toString(){let e="";if(this.isHexOnly)e=Ie.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}}};yd.NAME="sidBlock";var B0=class extends nr{constructor({value:e=$c,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new yd;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.value.length===0&&(i.isFirstSid=!0),this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}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,uo;t.push(o)}return W8(t)}fromString(e){this.value=[];let t=0,n=0,o="",i=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,i){let s=this.value[0],a=0;switch(s.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;s.valueDec=c+a,i=!1}else{let s=new yd;if(o>Number.MAX_SAFE_INTEGER){v0();let a=BigInt(o);s.valueBigInt=a}else if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,i=!0),this.value.push(s)}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}};B0.NAME="ObjectIdentifierValueBlock";var qA,lo=class extends Ht{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,B0),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};qA=lo;oe.ObjectIdentifier=qA;lo.NAME="OBJECT IDENTIFIER";var wd=class extends ri(Qo){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=Ie.BufferSourceConverter.toUint8Array(e);if(!ti(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(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=aa(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,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=Vi(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",uo;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n.buffer}toString(){let e="";return this.isHexOnly?e=Ie.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};wd.NAME="relativeSidBlock";var M0=class extends nr{constructor({value:e=$c,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new wd;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let i=this.value[o].toBER(e);if(i.byteLength===0)return this.error=this.value[o].error,uo;n.push(i)}return W8(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 i=new wd;if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return!0;this.value.push(i)}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}};M0.NAME="RelativeObjectIdentifierValueBlock";var zA,U0=class extends Ht{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,M0),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};zA=U0;oe.RelativeObjectIdentifier=zA;U0.NAME="RelativeObjectIdentifier";var WA,Sr=class extends Ki{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};WA=Sr;oe.Sequence=WA;Sr.NAME="SEQUENCE";var GA,F0=class extends Ki{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};GA=F0;oe.Set=GA;F0.NAME="SET";var $0=class extends ri(nr){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=$c}toJSON(){return{...super.toJSON(),value:this.value}}};$0.NAME="StringValueBlock";var V0=class extends $0{};V0.NAME="SimpleStringValueBlock";var mr=class extends T0{constructor({...e}={}){super(e,V0)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,Ie.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}};mr.NAME="SIMPLE STRING";var K0=class extends mr{fromBuffer(e){this.valueBlock.valueHexView=Ie.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=Ie.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=Ie.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(Ie.Convert.FromUtf8String(e)),this.valueBlock.value=e}};K0.NAME="Utf8StringValueBlock";var YA,ei=class extends K0{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};YA=ei;oe.Utf8String=YA;ei.NAME="UTF8String";var H0=class extends mr{fromBuffer(e){this.valueBlock.value=Ie.Convert.ToUtf16String(e),this.valueBlock.valueHexView=Ie.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(Ie.Convert.FromUtf16String(e))}};H0.NAME="BmpStringValueBlock";var jA,q0=class extends H0{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};jA=q0;oe.BmpString=jA;q0.NAME="BMPString";var z0=class extends mr{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 i=Vi(e.charCodeAt(o),8),s=new Uint8Array(i);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[o*4+c+a]=s[c]}this.valueBlock.value=e}};z0.NAME="UniversalStringValueBlock";var XA,W0=class extends z0{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};XA=W0;oe.UniversalString=XA;W0.NAME="UniversalString";var QA,G0=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};QA=G0;oe.NumericString=QA;G0.NAME="NumericString";var ZA,Y0=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};ZA=Y0;oe.PrintableString=ZA;Y0.NAME="PrintableString";var JA,j0=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};JA=j0;oe.TeletexString=JA;j0.NAME="TeletexString";var eT,X0=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};eT=X0;oe.VideotexString=eT;X0.NAME="VideotexString";var tT,Q0=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};tT=Q0;oe.IA5String=tT;Q0.NAME="IA5String";var rT,Z0=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};rT=Z0;oe.GraphicString=rT;Z0.NAME="GraphicString";var nT,bd=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};nT=bd;oe.VisibleString=nT;bd.NAME="VisibleString";var oT,J0=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};oT=J0;oe.GeneralString=oT;J0.NAME="GeneralString";var iT,em=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};iT=em;oe.CharacterString=iT;em.NAME="CharacterString";var sT,xd=class extends bd{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,Ie.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]=vr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=vr(this.month,2),t[2]=vr(this.day,2),t[3]=vr(this.hour,2),t[4]=vr(this.minute,2),t[5]=vr(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}}};sT=xd;oe.UTCTime=sT;xd.NAME="UTCTime";var aT,tm=class extends xd{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(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}fromString(e){let t=!1,n="",o="",i=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let d=new Number(e[e.length-1]);if(isNaN(d.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 d=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),d=-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=d*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=d*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let d=new Number(`0${n.substring(l)}`);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");i=d.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.minute=Math.floor(d),d=60*(d-this.minute),this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=1e3*i;this.millisecond=Math.floor(d)}break;default:throw new Error("Wrong input string for conversion")}let u=s.exec(o);if(u===null)throw new Error("Wrong input string for conversion");for(let d=1;d<u.length;d++)switch(d){case 1:this.year=parseInt(u[d],10);break;case 2:this.month=parseInt(u[d],10);break;case 3:this.day=parseInt(u[d],10);break;case 4:this.hour=parseInt(u[d],10)+a;break;case 5:this.minute=parseInt(u[d],10)+c;break;case 6:this.second=parseInt(u[d],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let d=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=d.getUTCFullYear(),this.month=d.getUTCMonth(),this.day=d.getUTCDay(),this.hour=d.getUTCHours(),this.minute=d.getUTCMinutes(),this.second=d.getUTCSeconds(),this.millisecond=d.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(vr(this.year,4)),t.push(vr(this.month,2)),t.push(vr(this.day,2)),t.push(vr(this.hour,2)),t.push(vr(this.minute,2)),t.push(vr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(vr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};aT=tm;oe.GeneralizedTime=aT;tm.NAME="GeneralizedTime";var cT,rm=class extends ei{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};cT=rm;oe.DATE=cT;rm.NAME="DATE";var lT,nm=class extends ei{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};lT=nm;oe.TimeOfDay=lT;nm.NAME="TimeOfDay";var uT,om=class extends ei{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};uT=om;oe.DateTime=uT;om.NAME="DateTime";var dT,im=class extends ei{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};dT=im;oe.Duration=dT;im.NAME="Duration";var fT,sm=class extends ei{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};fT=sm;oe.TIME=fT;sm.NAME="TIME";async function lm(r,e){let n=await Uc.create().encrypt(r,e);return mt.encode(n)}async function j8(r,e,t){if(r.type==="RSA")return RU(r,e,t);if(r.type==="Ed25519")return IU(r,e,t);if(r.type==="secp256k1")return CU(r,e,t);if(r.type==="ECDSA")return kU(r,e,t);throw new mn}async function IU(r,e,t="libp2p-key"){if(t==="libp2p-key")return lm(Cs(r),e);throw new _(`export format '${t}' is not supported`)}async function CU(r,e,t="libp2p-key"){if(t==="libp2p-key")return lm(Cs(r),e);throw new _("Export format is not supported")}async function kU(r,e,t="libp2p-key"){if(t==="libp2p-key")return lm(Cs(r),e);throw new _(`export format '${t}' is not supported`)}async function RU(r,e,t="pkcs-8"){if(t==="pkcs-8")return PU(r,e);if(t==="libp2p-key")return lm(Cs(r),e);throw new _("Export format is not supported")}async function PU(r,e){let t=gt.get(),o=new Sr({value:[new Jo({value:0}),new Sr({value:[new lo({value:"1.2.840.113549.1.1.1"}),new ca]}),new Zo({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=dr(16),a=await Gf(pi,e,s,{c:1e4,dkLen:32}),c=dr(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),d=new Sr({value:[new Zo({valueHex:s}),new Jo({value:1e4}),new Jo({value:32}),new Sr({value:[new lo({value:"1.2.840.113549.2.11"}),new ca]})]}),f=new Sr({value:[new lo({value:"1.2.840.113549.1.5.13"}),new Sr({value:[new Sr({value:[new lo({value:"1.2.840.113549.1.5.12"}),d]}),new Sr({value:[new lo({value:"2.16.840.1.101.3.4.1.42"}),new Zo({valueHex:c})]})]})]}),p=new Sr({value:[f,new Zo({valueHex:u})]}).toBER(),y=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...N(y,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
51
+ `)}async function X8(r,e){try{let t=await LU(r,e);return Y9(t)}catch{}if(!r.includes("BEGIN"))throw new _("Encrypted key was not a libp2p-key or a PEM file");return DU(r,e)}async function LU(r,e){let t=mt.decode(r);return Uc.create().decrypt(t,e)}async function DU(r,e){let t=gt.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=R(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=cm(i),{iv:a,salt:c,iterations:l,keySize:u,cipherText:d}=NU(s),f=await Gf(pi,e,c,{c:l,dkLen:u}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Ed(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,d)),{result:y}=cm(p);n=gT(y)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=R(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=cm(i);n=gT(s)}else throw new _("Could not parse private key from PEM data");let o=j9(n);if(o.type!=="RSA")throw new _("Could not parse RSA private key from PEM data");return o}function NU(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new _("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 _("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=Ed(i.valueBlock.value[0].getValue()),a=1e4,c=32;if(i.valueBlock.value.length===3)a=Number(i.valueBlock.value[1].toBigInt()),c=Number(i.valueBlock.value[2].toBigInt());else if(i.valueBlock.value.length===2)throw new _("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],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new _("Only AES-CBC encryption schemes are supported")}}}}let d=Ed(l.valueBlock.value[1].getValue());return{cipherText:Ed(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:d}}function gT(r){return Ed(r.valueBlock.value[2].getValue())}function Ed(r){return new Uint8Array(r,0,r.byteLength)}var OU="/pkcs8/",Q8="/info/",vd=new WeakMap,la={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3};function Vc(r){return r==null||typeof r!="string"?!1:r===(0,yT.default)(r.trim())&&r.length>0}async function qt(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function ua(r){return new Ze(OU+r)}function Kc(r){return new Ze(Q8+r)}async function BU(r){let e=Cs(r),t=await st.digest(e);return Ge.encode(t.bytes).substring(1)}var um=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init={...t,dek:{...H8,...t.dek}},this.self=t.selfKey??"self",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<la.minKeyLength)throw new Error(`dek.keyLength must be least ${la.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<la.minSaltLength)throw new Error(`dek.saltLength must be least ${la.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<la.minIterationCount)throw new Error(`dek.iterationCount must be least ${la.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Hl(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";vd.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Te]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},this.options),t=Math.ceil(la.minSaltLength/3)*3;return e.dek!=null&&(e.dek.salt=N(dr(t),"base64")),e}static get options(){return{dek:{...H8}}}async findKeyByName(e){if(!Vc(e))throw await qt(),new _(`Invalid key name '${e}'`);let t=Kc(e);try{let n=await this.components.datastore.get(t);return JSON.parse(N(n))}catch(n){throw await qt(),this.log.error("could not read key from datastore - %e",n),new We(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:Q8};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(N(n.value));if(o.id===e)return o}throw new _(`Key with id '${e}' does not exist.`)}catch(t){throw await qt(),t}}async importKey(e,t){if(!Vc(e))throw await qt(),new _(`Invalid key name '${e}'`);if(t==null)throw await qt(),new _("Key is required");let n=ua(e);if(await this.components.datastore.has(n))throw await qt(),new _(`Key '${e}' already exists`);let i,s;try{i=await BU(t);let l=vd.get(this);if(l==null)throw new _("dek missing");let u=l.dek;s=await j8(t,u,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await qt(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,R(s)),c.put(Kc(e),R(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Vc(e))throw await qt(),new _(`Invalid key name '${e}'`);let t=ua(e);try{let n=await this.components.datastore.get(t),o=N(n),i=vd.get(this);if(i==null)throw new _("dek missing");let s=i.dek;return await X8(o,s)}catch(n){throw await qt(),n}}async removeKey(e){if(!Vc(e)||e===this.self)throw await qt(),new _(`Invalid key name '${e}'`);let t=ua(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Kc(e)),await o.commit(),n}async listKeys(){let e={prefix:Q8},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(N(n.value)));return t}async renameKey(e,t){if(!Vc(e)||e===this.self)throw await qt(),new _(`Invalid old key name '${e}'`);if(!Vc(t)||t===this.self)throw await qt(),new _(`Invalid new key name '${t}'`);let n=ua(e),o=ua(t),i=Kc(e),s=Kc(t);if(await this.components.datastore.has(o))throw await qt(),new _(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),u=JSON.parse(N(l));u.name=t;let d=this.components.datastore.batch();return d.put(o,c),d.put(s,R(JSON.stringify(u))),d.delete(n),d.delete(i),await d.commit(),u}catch(c){throw await qt(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await qt(),new _(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await qt(),new _(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await qt(),new _(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=vd.get(this);if(n==null)throw new _("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?Hl(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";vd.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(ua(a.name)),l=N(c),u=await X8(l,o),d=i.toString(),f=await j8(u,d,u.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(ua(a.name),R(f)),h.put(Kc(a.name),R(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function dm(r={}){return e=>new um(e,r)}async function Z8(r,e={}){let t=e.selfKey??"self",n=dm(e)({datastore:r,logger:uc()}),o;return await r.has(new Ze(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await zf(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var Hc=!!globalThis.process?.env?.DUMP_SESSION_KEYS,J8=16;function MU(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function fm(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function hm(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function Ot(r,e,t=""){let n=MU(r),o=r?.length,i=e!==void 0;if(!n||i&&o!==e){let s=t&&`"${t}" `,a=i?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(s+"expected Uint8Array"+a+", got "+c)}return r}function e5(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 wT(r,e){Ot(r,void 0,"output");let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function ni(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function oi(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function UU(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var FU=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function bT(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function xT(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 t5=(r,e)=>{function t(n,...o){if(Ot(n,void 0,"key"),!FU)throw new Error("Non little-endian hardware is not yet supported");if(r.nonceLength!==void 0){let u=o[0];Ot(u,r.varSizeNonce?void 0:r.nonceLength,"nonce")}let i=r.tagLength;i&&o[1]!==void 0&&Ot(o[1],void 0,"AAD");let s=e(n,...o),a=(u,d)=>{if(d!==void 0){if(u!==2)throw new Error("cipher output not supported");Ot(d,void 0,"output")}},c=!1;return{encrypt(u,d){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,Ot(u),a(s.encrypt.length,d),s.encrypt(u,d)},decrypt(u,d){if(Ot(u),i&&u.length<i)throw new Error('"ciphertext" expected length bigger than tagLength='+i);return a(s.decrypt.length,d),s.decrypt(u,d)}}}return Object.assign(t,r),t};function r5(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error('"output" expected Uint8Array of length '+r+", got: "+e.length);if(t&&!$U(e))throw new Error("invalid output, must be aligned");return e}function ET(r,e,t){fm(t);let n=new Uint8Array(16),o=UU(n);return o.setBigUint64(0,BigInt(e),t),o.setBigUint64(8,BigInt(r),t),n}function $U(r){return r.byteOffset%4===0}function qc(r){return Uint8Array.from(r)}var ST=r=>Uint8Array.from(r.split(""),e=>e.charCodeAt(0)),VU=ST("expand 16-byte k"),KU=ST("expand 32-byte k"),HU=ni(VU),qU=ni(KU);function ie(r,e){return r<<e|r>>>32-e}function n5(r){return r.byteOffset%4===0}var pm=64,zU=16,AT=2**32-1,vT=Uint32Array.of();function WU(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(pm),u=ni(l),d=n5(o)&&n5(i),f=d?ni(o):vT,h=d?ni(i):vT;for(let p=0;p<c;s++){if(r(e,t,n,u,s,a),s>=AT)throw new Error("arx: counter overflow");let y=Math.min(pm,c-p);if(d&&y===pm){let g=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let m=0,b;m<zU;m++)b=g+m,h[b]=f[b]^u[m];p+=pm;continue}for(let g=0,m;g<y;g++)m=p+g,i[m]=o[m]^l[g];p+=y}}function o5(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=bT({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return hm(o),hm(s),fm(i),fm(t),(a,c,l,u,d=0)=>{Ot(a,void 0,"key"),Ot(c,void 0,"nonce"),Ot(l,void 0,"data");let f=l.length;if(u===void 0&&(u=new Uint8Array(f)),Ot(u,void 0,"output"),hm(d),d<0||d>=AT)throw new Error("arx: counter overflow");if(u.length<f)throw new Error(`arx: output (${u.length}) is shorter than data (${f})`);let h=[],p=a.length,y,g;if(p===32)h.push(y=qc(a)),g=qU;else if(p===16&&t)y=new Uint8Array(32),y.set(a),y.set(a,16),g=HU,h.push(y);else throw Ot(a,32,"arx key"),new Error("invalid key size");n5(c)||h.push(c=qc(c));let m=ni(y);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(g,m,ni(c.subarray(0,16)),m),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 L=new Uint8Array(12);L.set(c,i?0:12-c.length),c=L,h.push(c)}let v=ni(c);return WU(r,g,m,v,l,u,d,s),oi(...h),u}}function zt(r,e){return r[e++]&255|(r[e++]&255)<<8}var i5=class{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;constructor(e){e=qc(Ot(e,32,"key"));let t=zt(e,0),n=zt(e,2),o=zt(e,4),i=zt(e,6),s=zt(e,8),a=zt(e,10),c=zt(e,12),l=zt(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|i<<9)&8191,this.r[4]=(i>>>4|s<<12)&255,this.r[5]=s>>>1&8190,this.r[6]=(s>>>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 u=0;u<8;u++)this.pad[u]=zt(e,16+2*u)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],d=s[4],f=s[5],h=s[6],p=s[7],y=s[8],g=s[9],m=zt(e,t+0),b=zt(e,t+2),v=zt(e,t+4),L=zt(e,t+6),V=zt(e,t+8),$=zt(e,t+10),Y=zt(e,t+12),T=zt(e,t+14),S=i[0]+(m&8191),O=i[1]+((m>>>13|b<<3)&8191),U=i[2]+((b>>>10|v<<6)&8191),D=i[3]+((v>>>7|L<<9)&8191),A=i[4]+((L>>>4|V<<12)&8191),E=i[5]+(V>>>1&8191),x=i[6]+((V>>>14|$<<2)&8191),k=i[7]+(($>>>11|Y<<5)&8191),M=i[8]+((Y>>>8|T<<8)&8191),B=i[9]+(T>>>5|o),P=0,H=P+S*a+O*(5*g)+U*(5*y)+D*(5*p)+A*(5*h);P=H>>>13,H&=8191,H+=E*(5*f)+x*(5*d)+k*(5*u)+M*(5*l)+B*(5*c),P+=H>>>13,H&=8191;let q=P+S*c+O*a+U*(5*g)+D*(5*y)+A*(5*p);P=q>>>13,q&=8191,q+=E*(5*h)+x*(5*f)+k*(5*d)+M*(5*u)+B*(5*l),P+=q>>>13,q&=8191;let Q=P+S*l+O*c+U*a+D*(5*g)+A*(5*y);P=Q>>>13,Q&=8191,Q+=E*(5*p)+x*(5*h)+k*(5*f)+M*(5*d)+B*(5*u),P+=Q>>>13,Q&=8191;let Ce=P+S*u+O*l+U*c+D*a+A*(5*g);P=Ce>>>13,Ce&=8191,Ce+=E*(5*y)+x*(5*p)+k*(5*h)+M*(5*f)+B*(5*d),P+=Ce>>>13,Ce&=8191;let Ae=P+S*d+O*u+U*l+D*c+A*a;P=Ae>>>13,Ae&=8191,Ae+=E*(5*g)+x*(5*y)+k*(5*p)+M*(5*h)+B*(5*f),P+=Ae>>>13,Ae&=8191;let xe=P+S*f+O*d+U*u+D*l+A*c;P=xe>>>13,xe&=8191,xe+=E*a+x*(5*g)+k*(5*y)+M*(5*p)+B*(5*h),P+=xe>>>13,xe&=8191;let ke=P+S*h+O*f+U*d+D*u+A*l;P=ke>>>13,ke&=8191,ke+=E*c+x*a+k*(5*g)+M*(5*y)+B*(5*p),P+=ke>>>13,ke&=8191;let ze=P+S*p+O*h+U*f+D*d+A*u;P=ze>>>13,ze&=8191,ze+=E*l+x*c+k*a+M*(5*g)+B*(5*y),P+=ze>>>13,ze&=8191;let ft=P+S*y+O*p+U*h+D*f+A*d;P=ft>>>13,ft&=8191,ft+=E*u+x*l+k*c+M*a+B*(5*g),P+=ft>>>13,ft&=8191;let Pe=P+S*g+O*y+U*p+D*h+A*f;P=Pe>>>13,Pe&=8191,Pe+=E*d+x*u+k*l+M*c+B*a,P+=Pe>>>13,Pe&=8191,P=(P<<2)+P|0,P=P+H|0,H=P&8191,P=P>>>13,q+=P,i[0]=H,i[1]=q,i[2]=Q,i[3]=Ce,i[4]=Ae,i[5]=xe,i[6]=ke,i[7]=ze,i[8]=ft,i[9]=Pe}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 i=(o^1)-1;for(let a=0;a<10;a++)n[a]&=i;i=~i;for(let a=0;a<10;a++)e[a]=e[a]&i|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 s=e[0]+t[0];e[0]=s&65535;for(let a=1;a<8;a++)s=(e[a]+t[a]|0)+(s>>>16)|0,e[a]=s&65535;oi(n)}update(e){e5(this),Ot(e),e=qc(e);let{buffer:t,blockLen:n}=this,o=e.length;for(let i=0;i<o;){let s=Math.min(n-this.pos,o-i);if(s===n){for(;n<=o-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+s),this.pos),this.pos+=s,i+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){oi(this.h,this.r,this.buffer,this.pad)}digestInto(e){e5(this),wT(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 i=0;for(let s=0;s<8;s++)e[i++]=n[s]>>>0,e[i++]=n[s]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function GU(r){let e=(n,o)=>r(o).update(n).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var TT=GU(r=>new i5(r));function CT(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],f=e[2],h=e[3],p=e[4],y=e[5],g=e[6],m=e[7],b=o,v=t[0],L=t[1],V=t[2],$=s,Y=a,T=c,S=l,O=u,U=d,D=f,A=h,E=p,x=y,k=g,M=m,B=b,P=v,H=L,q=V;for(let Ce=0;Ce<i;Ce+=2)$=$+O|0,B=ie(B^$,16),E=E+B|0,O=ie(O^E,12),$=$+O|0,B=ie(B^$,8),E=E+B|0,O=ie(O^E,7),Y=Y+U|0,P=ie(P^Y,16),x=x+P|0,U=ie(U^x,12),Y=Y+U|0,P=ie(P^Y,8),x=x+P|0,U=ie(U^x,7),T=T+D|0,H=ie(H^T,16),k=k+H|0,D=ie(D^k,12),T=T+D|0,H=ie(H^T,8),k=k+H|0,D=ie(D^k,7),S=S+A|0,q=ie(q^S,16),M=M+q|0,A=ie(A^M,12),S=S+A|0,q=ie(q^S,8),M=M+q|0,A=ie(A^M,7),$=$+U|0,q=ie(q^$,16),k=k+q|0,U=ie(U^k,12),$=$+U|0,q=ie(q^$,8),k=k+q|0,U=ie(U^k,7),Y=Y+D|0,B=ie(B^Y,16),M=M+B|0,D=ie(D^M,12),Y=Y+D|0,B=ie(B^Y,8),M=M+B|0,D=ie(D^M,7),T=T+A|0,P=ie(P^T,16),E=E+P|0,A=ie(A^E,12),T=T+A|0,P=ie(P^T,8),E=E+P|0,A=ie(A^E,7),S=S+O|0,H=ie(H^S,16),x=x+H|0,O=ie(O^x,12),S=S+O|0,H=ie(H^S,8),x=x+H|0,O=ie(O^x,7);let Q=0;n[Q++]=s+$|0,n[Q++]=a+Y|0,n[Q++]=c+T|0,n[Q++]=l+S|0,n[Q++]=u+O|0,n[Q++]=d+U|0,n[Q++]=f+D|0,n[Q++]=h+A|0,n[Q++]=p+E|0,n[Q++]=y+x|0,n[Q++]=g+k|0,n[Q++]=m+M|0,n[Q++]=b+B|0,n[Q++]=v+P|0,n[Q++]=L+H|0,n[Q++]=V+q|0}function YU(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],d=e[3],f=e[4],h=e[5],p=e[6],y=e[7],g=t[0],m=t[1],b=t[2],v=t[3];for(let V=0;V<20;V+=2)o=o+c|0,g=ie(g^o,16),f=f+g|0,c=ie(c^f,12),o=o+c|0,g=ie(g^o,8),f=f+g|0,c=ie(c^f,7),i=i+l|0,m=ie(m^i,16),h=h+m|0,l=ie(l^h,12),i=i+l|0,m=ie(m^i,8),h=h+m|0,l=ie(l^h,7),s=s+u|0,b=ie(b^s,16),p=p+b|0,u=ie(u^p,12),s=s+u|0,b=ie(b^s,8),p=p+b|0,u=ie(u^p,7),a=a+d|0,v=ie(v^a,16),y=y+v|0,d=ie(d^y,12),a=a+d|0,v=ie(v^a,8),y=y+v|0,d=ie(d^y,7),o=o+l|0,v=ie(v^o,16),p=p+v|0,l=ie(l^p,12),o=o+l|0,v=ie(v^o,8),p=p+v|0,l=ie(l^p,7),i=i+u|0,g=ie(g^i,16),y=y+g|0,u=ie(u^y,12),i=i+u|0,g=ie(g^i,8),y=y+g|0,u=ie(u^y,7),s=s+d|0,m=ie(m^s,16),f=f+m|0,d=ie(d^f,12),s=s+d|0,m=ie(m^s,8),f=f+m|0,d=ie(d^f,7),a=a+c|0,b=ie(b^a,16),h=h+b|0,c=ie(c^h,12),a=a+c|0,b=ie(b^a,8),h=h+b|0,c=ie(c^h,7);let L=0;n[L++]=o,n[L++]=i,n[L++]=s,n[L++]=a,n[L++]=g,n[L++]=m,n[L++]=b,n[L++]=v}var jU=o5(CT,{counterRight:!1,counterLength:4,allowShortKeys:!1}),XU=o5(CT,{counterRight:!1,counterLength:8,extendNonceFn:YU,allowShortKeys:!1});var QU=new Uint8Array(16),_T=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(QU.subarray(t))},ZU=new Uint8Array(32);function IT(r,e,t,n,o){o!==void 0&&Ot(o,void 0,"AAD");let i=r(e,t,ZU),s=ET(n.length,o?o.length:0,!0),a=TT.create(i);o&&_T(a,o),_T(a,n),a.update(s);let c=a.digest();return oi(i,s),c}var kT=r=>(e,t,n)=>({encrypt(i,s){let a=i.length;s=r5(a+16,s,!1),s.set(i);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=IT(r,e,t,c,n);return s.set(l,a),oi(l),s},decrypt(i,s){s=r5(i.length-16,s,!1);let a=i.subarray(0,-16),c=i.subarray(-16),l=IT(r,e,t,a,n);if(!xT(c,l))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),r(e,t,s,s,1),oi(l),s}}),s5=t5({blockSize:64,nonceLength:12,tagLength:16},kT(jU)),d0e=t5({blockSize:64,nonceLength:24,tagLength:16},kT(XU));function PT(r,e,t){return So(r),t===void 0&&(t=new Uint8Array(r.outputLen)),wi(r,t,e)}var a5=Uint8Array.of(0),RT=Uint8Array.of();function LT(r,e,t,n=32){So(r),jt(n,"length");let o=r.outputLen;if(n>255*o)throw new Error("Length must be <= 255*HashLen");let i=Math.ceil(n/o);t===void 0?t=RT:ge(t,void 0,"info");let s=new Uint8Array(i*o),a=wi.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let u=0;u<i;u++)a5[0]=u+1,c.update(u===0?RT:l).update(t).update(a5).digestInto(l),s.set(l,o*u),a._cloneInto(c);return a.destroy(),c.destroy(),Xt(l,a5),s.slice(0,n)}var c5={hashSHA256(r){return Jr(r.subarray())},getHKDF(r,e){let t=PT(Jr,e,r),o=LT(Jr,t,void 0,96),i=o.subarray(0,32),s=o.subarray(32,64),a=o.subarray(64,96);return[i,s,a]},generateX25519KeyPair(){let r=Pl.utils.randomSecretKey();return{publicKey:Pl.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Pl.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Pl.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return s5(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return s5(n,e,t).decrypt(r.subarray(),o)}};var DT=c5;function NT(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 zc=r=>{let e=Re(2);return e[0]=r>>8,e[1]=r,e};zc.bytes=2;var Wc=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)};Wc.bytes=2;function OT(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 l5(r,e){!e.enabled||!Hc||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${N(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${N(r.privateKey,"hex")}`)):e("Missing local static keys."))}function u5(r,e){!e.enabled||!Hc||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${N(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${N(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function BT(r,e){!e.enabled||!Hc||e(r?`REMOTE_STATIC_PUBLIC_KEY ${N(r.subarray(),"hex")}`:"Missing remote static public key.")}function d5(r,e){!e.enabled||!Hc||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${N(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function f5(r,e,t){!t.enabled||!Hc||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&N(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&N(e.k,"hex")}`))}function Un(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Re(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var Gc=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var JU=0,eF=4294967295,tF="Cipherstate has reached maximum n, a new handshake must be performed",mm=class{n;bytes;view;constructor(e=JU){this.n=e,this.bytes=de(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>eF)throw new Error(tF)}};var da=de(0),Yc=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new mm(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}},h5=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=R(t,"utf-8");this.h=rF(e,n),this.ck=this.h,this.cs=new Yc(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Yc(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ne(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,da);return[new Yc(this.crypto,e),new Yc(this.crypto,t)]}},p5=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:i,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new h5(t,n),this.ss.mixHash(o),this.initiator=i,this.s=s,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()}},Sd=class extends p5{writeMessageA(e){return new ne(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ne(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ne(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Gc(`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 Gc(`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 Gc(`handshake stage 2 validation fail: ${t.message}`)}}};function rF(r,e){if(e.length<=32){let t=de(32);return t.set(e),t}else return r.hash(e)}var m5=new Float32Array([-0]),Hi=new Uint8Array(m5.buffer);function MT(r,e,t){m5[0]=r,e[t]=Hi[0],e[t+1]=Hi[1],e[t+2]=Hi[2],e[t+3]=Hi[3]}function UT(r,e){return Hi[0]=r[e],Hi[1]=r[e+1],Hi[2]=r[e+2],Hi[3]=r[e+3],m5[0]}var g5=new Float64Array([-0]),or=new Uint8Array(g5.buffer);function FT(r,e,t){g5[0]=r,e[t]=or[0],e[t+1]=or[1],e[t+2]=or[2],e[t+3]=or[3],e[t+4]=or[4],e[t+5]=or[5],e[t+6]=or[6],e[t+7]=or[7]}function $T(r,e){return or[0]=r[e],or[1]=r[e+1],or[2]=r[e+2],or[3]=r[e+3],or[4]=r[e+4],or[5]=r[e+5],or[6]=r[e+6],or[7]=r[e+7],g5[0]}var nF=BigInt(Number.MAX_SAFE_INTEGER),oF=BigInt(Number.MIN_SAFE_INTEGER),jr=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 fa;if(e<nF&&e>oF)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>VT&&(o=0n,++n>VT&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return fa;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):fa}},fa=new jr(0,0);fa.toBigInt=function(){return 0n};fa.zzEncode=fa.zzDecode=function(){return this};fa.length=function(){return 1};var VT=4294967296n;function KT(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 HT(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(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,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function y5(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,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 Fn(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function gm(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var w5=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,Fn(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 Fn(this,4);return gm(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Fn(this,4);return gm(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Fn(this,4);let e=UT(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Fn(this,4);let e=$T(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 Fn(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return HT(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Fn(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Fn(this);while((this.buf[this.pos++]&128)!==0);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 jr(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 Fn(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 Fn(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 Fn(this,8);let e=gm(this.buf,this.pos+=4),t=gm(this.buf,this.pos+=4);return new jr(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=Ts(this.buf,this.pos);return this.pos+=ye(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 b5(r){return new w5(r instanceof Uint8Array?r:r.subarray())}function ym(r,e,t){let n=b5(r);return e.decode(n,void 0,t)}function x5(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Re(s);o+s>e&&(n=Re(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var ha=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function E5(){}var S5=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},iF=x5();function sF(r){return globalThis.Buffer!=null?Re(r):iF(r)}var Td=class{len;head;tail;states;constructor(){this.len=0,this.head=new ha(E5,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ha(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new A5((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(wm,10,jr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=jr.fromBigInt(e);return this._push(wm,t.length(),t)}uint64Number(e){return this._push(Xn,ye(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=jr.fromBigInt(e).zzEncode();return this._push(wm,t.length(),t)}sint64Number(e){let t=jr.fromNumber(e).zzEncode();return this._push(wm,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(v5,1,e?1:0)}fixed32(e){return this._push(Ad,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=jr.fromBigInt(e);return this._push(Ad,4,t.lo)._push(Ad,4,t.hi)}fixed64Number(e){let t=jr.fromNumber(e);return this._push(Ad,4,t.lo)._push(Ad,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(MT,4,e)}double(e){return this._push(FT,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(v5,1,0):this.uint32(t)._push(cF,t,e)}string(e){let t=KT(e);return t!==0?this.uint32(t)._push(y5,t,e):this._push(v5,1,0)}fork(){return this.states=new S5(this),this.head=this.tail=new ha(E5,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 ha(E5,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=sF(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function v5(r,e,t){e[t]=r&255}function aF(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var A5=class extends ha{next;constructor(e,t){super(aF,e,t),this.next=void 0}};function wm(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 Ad(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 cF(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Td.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(lF,e,r),this},Td.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(uF,e,r),this});function lF(r,e,t){e.set(r,t)}function uF(r,e,t){r.length<40?y5(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(R(r),t)}function T5(){return new Td}function bm(r,e){let t=T5();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var _d;(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"})(_d||(_d={}));function _5(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function xm(r,e){return _5("message",_d.LENGTH_DELIMITED,r,e)}var Id=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"};var Em;(function(r){let e;r.codec=()=>(e==null&&(e=xm((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);if(t.streamMuxers!=null)for(let i of t.streamMuxers)n.uint32(18),n.string(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={webtransportCerthashes:[],streamMuxers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&i.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new Id('Decode error - map field "webtransportCerthashes" had too many elements');i.webtransportCerthashes.push(t.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&i.streamMuxers.length===o.limits.streamMuxers)throw new Id('Decode error - map field "streamMuxers" had too many elements');i.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>bm(t,r.codec()),r.decode=(t,n)=>ym(t,r.codec(),n)})(Em||(Em={}));var Cd;(function(r){let e;r.codec=()=>(e==null&&(e=xm((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),Em.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={identityKey:de(0),identitySig:de(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.identityKey=t.bytes();break}case 2:{i.identitySig=t.bytes();break}case 4:{i.extensions=Em.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>bm(t,r.codec()),r.decode=(t,n)=>ym(t,r.codec(),n)})(Cd||(Cd={}));async function C5(r,e,t){let n=await r.sign(WT(e));return Cd.encode({identityKey:_t(r.publicKey),identitySig:n,extensions:t})}async function k5(r,e,t){try{let n=Cd.decode(r),o=pt(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 i=WT(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new cf(n.message)}}function WT(r){let e=R("noise-libp2p-static-key:");return r instanceof Uint8Array?je([e,r],e.length+r.length):(r.prepend(e),r)}var I5=class extends Ei{stream;handshake;metrics;decoder;constructor(e,t,n){super({log:e.log,inactivityTimeout:e.inactivityTimeout,maxReadBufferLength:e.maxReadBufferLength,direction:e.direction}),this.stream=e,this.handshake=t,this.metrics=n,this.decoder=new gh({lengthDecoder:Wc,maxBufferSize:16*1024*1024,encodingLength:()=>2});let o=c=>{try{for(let l of this.decoder.decode(c.data))this.onData(this.decrypt(l))}catch(l){this.abort(l)}};this.stream.addEventListener("message",o);let i=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",i);let s=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",s);let a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){let t=new ne;for(let n=0;n<e.byteLength;n+=65519){let o=n+65519;o>e.byteLength&&(o=e.byteLength);let i;e instanceof Uint8Array?i=this.handshake.encrypt(e.subarray(n,o)):i=this.handshake.encrypt(e.sublist(n,o)),this.metrics?.encryptedPackets.increment(),t.append(zc(i.byteLength)),t.append(i)}return t}decrypt(e){let t=new ne;for(let n=0;n<e.byteLength;n+=65535){let o=n+65535;if(o>e.byteLength&&(o=e.byteLength),o-J8<n)throw new Error("Invalid chunk");let i;e instanceof Uint8Array?i=e.subarray(n,o):i=e.sublist(n,o);let s=e.subarray(n,o-J8);try{let a=this.handshake.decrypt(i,s);this.metrics?.decryptedPackets.increment(),t.append(a)}catch(a){throw this.metrics?.decryptErrors.increment(),a}}return t}close(e){return this.stream.close(e)}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}sendReset(e){this.stream.abort(e)}sendData(e){return{sentBytes:e.byteLength,canSendMore:this.stream.send(this.encrypt(e))}}};function R5(r,e,t){return new I5(r,e,t)}async function GT(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await C5(i,a.publicKey,l),d=new Sd({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});l5(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(da),e),t.trace("Stage 0 - Initiator finished sending first message."),u5(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),d5(d.re,t),BT(d.rs,t),t.trace("Initiator going to check remote's signature...");let h=await k5(f,d.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(d.writeMessageC(u),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,y]=d.ss.split();return f5(p,y,t),{payload:h,encrypt:g=>p.encryptWithAd(da,g),decrypt:(g,m)=>y.decryptWithAd(da,g,m)}}async function YT(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await C5(i,a.publicKey,l),d=new Sd({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});l5(d.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),d5(d.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(d.writeMessageB(u),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),u5(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await k5(f,d.rs,c),[p,y]=d.ss.split();return f5(p,y,t),{payload:h,encrypt:g=>y.encryptWithAd(da,g),decrypt:(g,m)=>p.decryptWithAd(da,g,m)}}var vm=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");let c=i??DT;this.crypto=NT(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?OT(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??de(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Te]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=e.log?.newScope("noise")??this.log,o=_i(e,{lengthEncoder:zc,lengthDecoder:Wc,maxDataLength:65535}),i=await this.performHandshakeInitiator(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),s=pt(i.payload.identityKey);return{connection:R5(o.unwrap(),i,this.metrics),remoteExtensions:i.payload.extensions,remotePeer:io(s),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let o=t.get(n);if(o!=null)return o}if(e.length)throw new lf("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=e.log?.newScope("noise")??this.log,o=_i(e,{lengthEncoder:zc,lengthDecoder:Wc,maxDataLength:65535}),i=await this.performHandshakeResponder(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),s=pt(i.payload.identityKey);return{connection:R5(o.unwrap(),i,this.metrics),remoteExtensions:i.payload.extensions,remotePeer:io(s),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o,i){let s,a=i?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{s=await GT({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return s}async performHandshakeResponder(e,t,n,o,i){let s,a=i?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{s=await YT({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return s}};function Sm(r={}){return e=>new vm(e,r)}var at;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(at||(at={}));var Me;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(Me||(Me={}));var l2e=Object.values(Me).filter(r=>typeof r!="string"),jT=0,Et;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Et||(Et={}));var fo=12;var ii=class extends Error{static name="ProtocolError";reason;constructor(e,t){super(e),this.name="ProtocolError",this.reason=t}};function XT(r){return r?.reason!==null}var Xr=class extends ii{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e,Et.ProtocolError),this.name="InvalidFrameError"}},jc=class extends ii{static name="UnRequestedPingError";constructor(e="Un-requested ping error"){super(e,Et.ProtocolError),this.name="UnRequestedPingError"}},Xc=class extends ii{static name="NotMatchingPingError";constructor(e="Not matching ping error"){super(e,Et.ProtocolError),this.name="NotMatchingPingError"}};var Am=class extends ii{static name="StreamAlreadyExistsError";constructor(e="Stream already exists"){super(e,Et.ProtocolError),this.name="StreamAlreadyExistsError"}},Tm=class extends ii{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e,Et.ProtocolError),this.name="DecodeInvalidVersionError"}},_m=class extends ii{static name="BothClientsError";constructor(e="Both clients"){super(e,Et.ProtocolError),this.name="BothClientsError"}},Qc=class extends ii{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e,Et.ProtocolError),this.name="ReceiveWindowExceededError"}};var p2e=new Set([Xr.name,jc.name,Xc.name,Am.name,Tm.name,_m.name,Qc.name]),Rd=256*1024,Im=16*1024*1024;var Pd={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,maxMessageSize:64*1024,maxEarlyStreams:10,streamOptions:{initialStreamWindowSize:Rd,maxStreamWindowSize:Im,inactivityTimeout:12e4,maxReadBufferLength:4194304,maxWriteBufferLength:1/0}};function QT(r){if(r.keepAliveInterval!=null&&r.keepAliveInterval<=0)throw new _("keep-alive interval must be positive");if(r.maxInboundStreams!=null&&r.maxInboundStreams<0)throw new _("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams!=null&&r.maxOutboundStreams<0)throw new _("max outbound streams must be larger or equal 0");if(r.maxMessageSize!=null&&r.maxMessageSize<1024)throw new _("MaxMessageSize must be greater than a kilobyte");if(r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize<Rd)throw new _("InitialStreamWindowSize must be larger or equal 256 kB");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize<r.streamOptions?.initialStreamWindowSize)throw new _("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize>2**32-1)throw new _("MaxStreamWindowSize must be less than equal MAX_UINT32")}function JT(r){return r.header.type===at.Data&&r.data!==null}var ZT=2**24;function dF(r){if(r[0]!==jT)throw new Xr("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*ZT+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*ZT+(r[9]<<16)+(r[10]<<8)+r[11]}}var Cm=class{buffer;constructor(){this.buffer=new ne}*emitFrames(e){for(this.buffer.append(e);;){let t=this.readFrame();if(t===void 0)break;yield t}}readFrame(){let e=fo;if(this.buffer.byteLength<fo)return;let t=dF(this.buffer.subarray(0,fo));if(t.type===at.Data){if(e+=t.length,this.buffer.byteLength<e)return;let n=this.buffer.sublist(fo,e);return this.buffer.consume(e),{header:t,data:n}}return this.buffer.consume(e),{header:t}}};function P5(r){let e=new Uint8Array(fo);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}var gr;(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",r[r.Paused=5]="Paused"})(gr||(gr={}));var km=class extends Ai{streamId;state;sendWindowCapacity;recvWindow;recvWindowCapacity;maxStreamWindowSize;epochStart;getRTT;sendFrame;constructor(e){let t=e.initialStreamWindowSize??Rd;super({...e,maxMessageSize:t-fo}),this.streamId=e.streamId,this.state=e.state,this.sendWindowCapacity=t,this.recvWindow=t,this.recvWindowCapacity=this.recvWindow,this.maxStreamWindowSize=e.maxStreamWindowSize??Im,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame;let n=()=>{this.state=gr.Finished};this.addEventListener("close",n)}sendData(e){let t=e.byteLength,n=0,o=!0;for(this.log?.trace("send window capacity is %d bytes",this.sendWindowCapacity);e.byteLength>0;){if(this.sendWindowCapacity===0){o=!1,this.log?.trace("sent %d/%d bytes, exhausted send window, waiting for window update",n,t);break}let i=Math.min(this.sendWindowCapacity,e.byteLength),s=this.getSendFlags(),a=e.sublist(0,i);e.consume(i);let c=this.sendFrame({type:at.Data,flag:s,streamID:this.streamId,length:i},a);if(this.sendWindowCapacity-=i,n+=i,!c){o=c,this.log.trace("sent %d/%d bytes, wait for muxer to have more send capacity",n,t);break}}return{sentBytes:n,canSendMore:o}}sendReset(){this.sendFrame({type:at.WindowUpdate,flag:Me.RST,streamID:this.streamId,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|Me.FIN;this.sendFrame({type:at.WindowUpdate,flag:e,streamID:this.streamId,length:0})}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){this.state=gr.Paused}sendResume(){this.state=gr.Established,this.sendWindowUpdate()}handleWindowUpdate(e){this.processFlags(e.header.flag),this.sendWindowCapacity+=e.header.length,this.maxMessageSize=this.sendWindowCapacity-fo,this.maxMessageSize<0&&(this.maxMessageSize=0),this.maxMessageSize!==0&&this.writeBuffer.byteLength>0&&(this.log?.trace("window update of %d bytes allows more data to be sent, have %d bytes queued, sending data %s",e.header.length,this.writeBuffer.byteLength,this.sendingData),this.safeDispatchEvent("drain"))}handleData(e){if(!JT(e))throw new Xr("Frame was not data frame");if(this.processFlags(e.header.flag),this.recvWindowCapacity<e.header.length)throw new Qc("Receive window exceeded");this.recvWindowCapacity-=e.header.length,this.onData(e.data),this.sendWindowUpdate()}processFlags(e){(e&Me.ACK)===Me.ACK&&this.state===gr.SYNSent&&(this.state=gr.Established),(e&Me.FIN)===Me.FIN&&this.onRemoteCloseWrite(),(e&Me.RST)===Me.RST&&this.onRemoteReset()}getSendFlags(){switch(this.state){case gr.Init:return this.state=gr.SYNSent,Me.SYN;case gr.SYNReceived:return this.state=gr.Established,Me.ACK;default:return 0}}sendWindowUpdate(){if(this.state===gr.Paused){this.epochStart=Date.now();return}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.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:at.WindowUpdate,flag:e,streamID:this.streamId,length:o})}};function e_(r){return{type:at[r.type],flags:[(r.flag&Me.SYN)===Me.SYN?"SYN":void 0,(r.flag&Me.ACK)===Me.ACK?"ACK":void 0,(r.flag&Me.FIN)===Me.FIN?"FIN":void 0,(r.flag&Me.RST)===Me.RST?"RST":void 0].filter(Boolean),streamID:r.streamID,length:r.length}}var t_="/yamux/1.0.0",Rm=class{protocol=t_;_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Te]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new L5(e,{...this._init})}},L5=class extends Si{nextStreamID;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;decoder;keepAlive;enableKeepAlive;keepAliveInterval;maxInboundStreams;maxOutboundStreams;constructor(e,t={}){super(e,{...t,protocol:t_,name:"yamux"}),this.client=e.direction==="outbound",QT(t),this.enableKeepAlive=t.enableKeepAlive??Pd.enableKeepAlive,this.keepAliveInterval=t.keepAliveInterval??Pd.keepAliveInterval,this.maxInboundStreams=t.maxInboundStreams??Pd.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Pd.maxOutboundStreams,this.decoder=new Cm,this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log.trace("muxer created"),this.enableKeepAlive&&(this.log.trace("muxer keepalive enabled interval=%s",this.keepAliveInterval),this.keepAlive=fc(async n=>{try{await this.ping(n)}catch(o){this.log.error("ping error: %s",o)}},this.keepAliveInterval,{runImmediately:!0}),this.keepAlive.start())}onData(e){for(let t of this.decoder.emitFrames(e))this.handleFrame(t)}onCreateStream(){if(this.remoteGoAway!==void 0)throw new hn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new hn("Muxer closed locally");let e=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.maxOutboundStreams)throw new Aa("max outbound streams exceeded");this.log.trace("new outgoing stream id=%s",e);let t=this._newStream(e,gr.Init,"outbound");return this.numOutboundStreams++,queueMicrotask(()=>{t.sendWindowUpdate()}),t}async ping(e){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!=null)return qe(this.activePing.promise,e?.signal);this.activePing=Object.assign(Promise.withResolvers(),{id:this.nextPingID++,start:Date.now()}),this.sendPing(this.activePing.id);try{this.rtt=await qe(this.activePing.promise,e?.signal)}finally{this.activePing=void 0}return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.status==="open")try{let t=e?.reason??Et.NormalTermination;this.log.trace("muxer close reason=%s",Et[t]),await super.close(e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}abort(e){if(this.status==="open")try{super.abort(e);let t=Et.InternalError;XT(e)&&(t=e.reason),this.log.error("muxer abort reason=%s error=%s",t,e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}onTransportClosed(){try{super.onTransportClosed()}finally{this.keepAlive?.stop()}}_newStream(e,t,n){if(this.streams.find(i=>i.streamId===e)!=null)throw new _("Stream already exists with that id");let o=new km({...this.streamOptions,id:`${e}`,streamId:e,state:t,direction:n,sendFrame:this.sendFrame.bind(this),log:this.log.newScope(`${n}:${e}`),getRTT:this.getRTT.bind(this)});return o.addEventListener("close",()=>{this.closeStream(e)},{once:!0}),o}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--}handleFrame(e){let{streamID:t,type:n,length:o}=e.header;if(this.log.trace("received frame %o",e_(e.header)),t===0)switch(n){case at.Ping:{this.handlePing(e.header);return}case at.GoAway:{this.handleGoAway(o);return}default:throw new Xr("Invalid frame type")}else switch(e.header.type){case at.Data:case at.WindowUpdate:{this.handleStreamMessage(e);return}default:throw new Xr("Invalid frame type")}}handlePing(e){if(e.flag===Me.SYN)this.log.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,Me.ACK);else if(e.flag===Me.ACK)this.log.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new Xr("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new jc("ping not requested");if(this.activePing.id!==e)throw new Xc("ping doesn't match our id");this.activePing.resolve(Date.now()-this.activePing.start)}handleGoAway(e){this.log.trace("received GoAway reason=%s",Et[e]??"unknown"),this.remoteGoAway=e,e===Et.NormalTermination?this.onTransportClosed():this.abort(new Error("Remote sent GoAway"))}handleStreamMessage(e){let{streamID:t,flag:n,type:o}=e.header;(n&Me.SYN)===Me.SYN&&this.incomingStream(t);let i=this.streams.find(s=>s.streamId===t);if(i===void 0){this.log.trace("frame for missing stream id=%s",t);return}switch(o){case at.WindowUpdate:{i.handleWindowUpdate(e);return}case at.Data:{i.handleData(e);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new _("Both endpoints are clients");if(this.streams.find(n=>n.streamId===e))return;if(this.log.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:at.WindowUpdate,flag:Me.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.maxInboundStreams){this.log("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:at.WindowUpdate,flag:Me.RST,streamID:e,length:0});return}let t=this._newStream(e,gr.SYNReceived,"inbound");this.numInboundStreams++,this.onRemoteStream(t)}sendFrame(e,t){let n;if(e.type===at.Data){if(t==null)throw new Xr("Invalid frame");n=new ne(P5(e),t)}else n=P5(e);return this.log.trace("sending frame %o",e_(e)),this.send(n)}sendPing(e,t=Me.SYN){t===Me.SYN?this.log.trace("sending ping request pingId=%s",e):this.log.trace("sending ping response pingId=%s",e),this.sendFrame({type:at.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Et.NormalTermination){this.log("sending GoAway reason=%s",Et[e]),this.localGoAway=e,this.sendFrame({type:at.GoAway,flag:0,streamID:0,length:e})}};function r_(r={}){return()=>new Rm(r)}var n_="libp2p",o_="autonat",i_="1.0.0";var rt;(function(r){let e;(function(f){f.DIAL="DIAL",f.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(f){f[f.DIAL=0]="DIAL",f[f.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),(function(f){f.codec=()=>lt(t)})(e=r.MessageType||(r.MessageType={}));let n;(function(f){f.OK="OK",f.E_DIAL_ERROR="E_DIAL_ERROR",f.E_DIAL_REFUSED="E_DIAL_REFUSED",f.E_BAD_REQUEST="E_BAD_REQUEST",f.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(f){f[f.OK=0]="OK",f[f.E_DIAL_ERROR=100]="E_DIAL_ERROR",f[f.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",f[f.E_BAD_REQUEST=200]="E_BAD_REQUEST",f[f.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),(function(f){f.codec=()=>lt(o)})(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(f){let h;f.codec=()=>(h==null&&(h=me((m,b,v={})=>{if(v.lengthDelimited!==!1&&b.fork(),m.id!=null&&(b.uint32(10),b.bytes(m.id)),m.addrs!=null&&m.addrs.length>0)for(let L of m.addrs)b.uint32(18),b.bytes(L);v.lengthDelimited!==!1&&b.ldelim()},(m,b,v={})=>{let L={addrs:[]},V=b==null?m.len:m.pos+b;for(;m.pos<V;){let $=m.uint32();switch($>>>3){case 1:{L.id=m.bytes();break}case 2:{if(v.limits?.addrs!=null&&L.addrs.length===v.limits.addrs)throw new Ee('Decode error - repeated field "addrs" had too many elements');L.addrs.push(m.bytes());break}default:{m.skipType($&7);break}}}return L},function*(m,b,v,L={}){let V={addrs:0},$=b==null?m.len:m.pos+b;for(;m.pos<$;){let Y=m.uint32();switch(Y>>>3){case 1:{yield{field:`${v}.id`,value:m.bytes()};break}case 2:{if(L.limits?.addrs!=null&&V.addrs===L.limits.addrs)throw new Ee('Streaming decode error - repeated field "addrs" had too many elements');yield{field:`${v}.addrs[]`,index:V.addrs,value:m.bytes()},V.addrs++;break}default:{m.skipType(Y&7);break}}}})),h);function p(m){return he(m,f.codec())}f.encode=p;function y(m,b){return fe(m,f.codec(),b)}f.decode=y;function g(m,b){return pe(m,f.codec(),b)}f.stream=g})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(f){let h;f.codec=()=>(h==null&&(h=me((m,b,v={})=>{v.lengthDelimited!==!1&&b.fork(),m.peer!=null&&(b.uint32(10),r.PeerInfo.codec().encode(m.peer,b)),v.lengthDelimited!==!1&&b.ldelim()},(m,b,v={})=>{let L={},V=b==null?m.len:m.pos+b;for(;m.pos<V;){let $=m.uint32();switch($>>>3){case 1:{L.peer=r.PeerInfo.codec().decode(m,m.uint32(),{limits:v.limits?.peer});break}default:{m.skipType($&7);break}}}return L},function*(m,b,v,L={}){let V=b==null?m.len:m.pos+b;for(;m.pos<V;){let $=m.uint32();switch($>>>3){case 1:{yield*r.PeerInfo.codec().stream(m,m.uint32(),`${v}.peer`,{limits:L.limits?.peer});break}default:{m.skipType($&7);break}}}})),h);function p(m){return he(m,f.codec())}f.encode=p;function y(m,b){return fe(m,f.codec(),b)}f.decode=y;function g(m,b){return pe(m,f.codec(),b)}f.stream=g})(s=r.Dial||(r.Dial={}));let a;(function(f){let h;f.codec=()=>(h==null&&(h=me((m,b,v={})=>{v.lengthDelimited!==!1&&b.fork(),m.status!=null&&(b.uint32(8),r.ResponseStatus.codec().encode(m.status,b)),m.statusText!=null&&(b.uint32(18),b.string(m.statusText)),m.addr!=null&&(b.uint32(26),b.bytes(m.addr)),v.lengthDelimited!==!1&&b.ldelim()},(m,b,v={})=>{let L={},V=b==null?m.len:m.pos+b;for(;m.pos<V;){let $=m.uint32();switch($>>>3){case 1:{L.status=r.ResponseStatus.codec().decode(m);break}case 2:{L.statusText=m.string();break}case 3:{L.addr=m.bytes();break}default:{m.skipType($&7);break}}}return L},function*(m,b,v,L={}){let V=b==null?m.len:m.pos+b;for(;m.pos<V;){let $=m.uint32();switch($>>>3){case 1:{yield{field:`${v}.status`,value:r.ResponseStatus.codec().decode(m)};break}case 2:{yield{field:`${v}.statusText`,value:m.string()};break}case 3:{yield{field:`${v}.addr`,value:m.bytes()};break}default:{m.skipType($&7);break}}}})),h);function p(m){return he(m,f.codec())}f.encode=p;function y(m,b){return fe(m,f.codec(),b)}f.decode=y;function g(m,b){return pe(m,f.codec(),b)}f.stream=g})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=me((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.type!=null&&(h.uint32(8),r.MessageType.codec().encode(f.type,h)),f.dial!=null&&(h.uint32(18),r.Dial.codec().encode(f.dial,h)),f.dialResponse!=null&&(h.uint32(26),r.DialResponse.codec().encode(f.dialResponse,h)),p.lengthDelimited!==!1&&h.ldelim()},(f,h,p={})=>{let y={},g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{y.type=r.MessageType.codec().decode(f);break}case 2:{y.dial=r.Dial.codec().decode(f,f.uint32(),{limits:p.limits?.dial});break}case 3:{y.dialResponse=r.DialResponse.codec().decode(f,f.uint32(),{limits:p.limits?.dialResponse});break}default:{f.skipType(m&7);break}}}return y},function*(f,h,p,y={}){let g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{yield{field:`${p}.type`,value:r.MessageType.codec().decode(f)};break}case 2:{yield*r.Dial.codec().stream(f,f.uint32(),`${p}.dial`,{limits:y.limits?.dial});break}case 3:{yield*r.DialResponse.codec().stream(f,f.uint32(),`${p}.dialResponse`,{limits:y.limits?.dialResponse});break}default:{f.skipType(m&7);break}}}})),c);function l(f){return he(f,r.codec())}r.encode=l;function u(f,h){return fe(f,r.codec(),h)}r.decode=u;function d(f,h){return pe(f,r.codec(),h)}r.stream=d})(rt||(rt={}));var yF=4,wF=8,Pm=class{components;protocol;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;started;log;topologyId;dialResults;findPeers;addressFilter;connectionThreshold;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:auto-nat"),this.started=!1,this.protocol=`/${t.protocolPrefix??n_}/${o_}/${i_}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??20,this.connectionThreshold=t.connectionThreshold??80,this.maxMessageSize=t.maxMessageSize??8192,this.dialResults=yt({name:"libp2p_autonat_dial_results",metrics:e.metrics}),this.findPeers=fc(this.findRandomPeers.bind(this),6e4),this.addressFilter=Mt(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Te]=["@libp2p/autonat"];get[Ir](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,(e,t)=>{this.handleIncomingAutonatStream(e,t).catch(n=>{this.log.error("error handling incoming autonat stream - %e",n)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=we([AbortSignal.timeout(1e4),e?.signal]);try{this.log("starting random walk to find peers to run AutoNAT");for await(let n of this.components.randomWalk.walk({signal:t})){if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable %s",n.id,n.multiaddrs.map(o=>o.toString()).join(", "));continue}try{this.log.trace("dial random peer %p",n.id),await this.components.connectionManager.openConnection(n.multiaddrs,{signal:t})}catch{}if(this.allAddressesAreVerified()){this.log("stopping random walk, all addresses are verified");return}if(!this.hasConnectionCapacity()){this.log("stopping random walk, too close to max connections");return}}}catch{}}async handleIncomingAutonatStream(e,t){let n=AbortSignal.timeout(this.timeout);try{let o=Qe(e,{maxDataLength:this.maxMessageSize}).pb(rt),i=await o.read({signal:n}),s=await this.handleAutonatMessage(i,t,{signal:n});await o.write(s,{signal:n}),await e.close({signal:n})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(d=>ce(d).host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=i.peer;if(a?.id==null)return this.log.error("peerId missing from message"),{type:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=He(a.id);s=dt(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",s),!t.remotePeer.equals(s))return this.log("target peer %p did not equal sending peer %p",s,t.remotePeer),{type:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>j(d)).filter(d=>{try{let f=ce(d);return ut(d)?!1:f.host!==ce(t.remoteAddr).host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):o.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}catch{return!1}}).map(d=>(d.getComponents().find(f=>f.code===421)?.value==null&&(d=d.encapsulate(`/p2p/${s.toString()}`)),d));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(d=>d.toString()).join(", "),s);let l="",u=c[0];for(let d of c){let f;u=d;try{if(f=await this.components.connectionManager.openConnection(d,n),!f.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,f.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,d),{type:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(421).bytes}}}catch(h){this.log.error("could not dial %p - %e",s,h),l=h.message}finally{f!=null&&await f.close()}}return{type:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,i)=>o.type==="observed"&&i.type!=="observed"?1:i.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||ce(o.multiaddr).type==="ip6"&&(!t||!Zf(o.multiaddr))||ut(o.multiaddr)));for(let o of n){let i=o.multiaddr.toString(),s=this.dialResults.get(i);if(s!=null){if(s.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",s.multiaddr,e);continue}if(s.queue.size>10){this.log.trace("%a already has enough peers queued",s.multiaddr);continue}}if(s==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(i),this.addressFilter.has(i))continue;this.addressFilter.add(i),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",i),s={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:P6(),queue:new Kt({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(i,s)}return s}}removeOutdatedMultiaddrResults(){let e=new Set(this.components.addressManager.getAddressesWithMetadata().filter(({expires:t})=>t<Date.now()).map(({multiaddr:t})=>t.toString()));for(let t of this.dialResults.keys())e.has(t)||(this.log.trace("remove results for %a",t),this.dialResults.delete(t))}async verifyExternalAddresses(e){if(!this.isStarted())return;this.removeOutdatedMultiaddrResults();let n=(await this.components.peerStore.get(e.remotePeer)).addresses.some(({multiaddr:s})=>ce(s).type==="ip6"),o=this.getNetworkSegment(e.remoteAddr),i=this.getFirstUnverifiedMultiaddr(o,n);if(i==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){i.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",i.multiaddr),this.confirmAddress(i)):this.log("skipping verifying %a because we are too close to the connection limit",i.multiaddr);return}i.queue.add(async s=>{await this.askPeerToVerify(e,o,s)},{peerId:e.remotePeer,multiaddr:i.multiaddr}).catch(s=>{i?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,i?.multiaddr,s)})}async askPeerToVerify(e,t,n){let o=this.dialResults.get(n.multiaddr.toString());if(o==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let i=AbortSignal.timeout(this.timeout);this.log.trace("asking %a to verify multiaddr %s",e.remoteAddr,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=Qe(s).pb(rt),[,c]=await Promise.all([a.write({type:rt.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==rt.MessageType.DIAL_RESPONSE||c.dialResponse==null){this.log("invalid autonat response from %p - %j",e.remotePeer,c);return}let l=c.dialResponse.status;if(this.log.trace("autonat response from %p for %a is %s",e.remotePeer,n.multiaddr,l),l!==rt.ResponseStatus.OK&&l!==rt.ResponseStatus.E_DIAL_ERROR)return;if(o=this.dialResults.get(n.multiaddr.toString()),o==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(o.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(o.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(o.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(o.verifyingPeers.add(e.remotePeer),o.networkSegments.push(t),l===rt.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===rt.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===yF&&this.confirmAddress(o),o.failure===wF&&this.unconfirmAddress(o)}finally{try{await s.close({signal:i})}catch(a){s.abort(a)}}}hasConnectionCapacity(){let t=this.components.connectionManager.getConnections().length,n=this.components.connectionManager.getMaxConnections();return t/n*100<this.connectionThreshold}confirmAddress(e){this.log("%s address %a is externally dialable",e.type,e.multiaddr),this.components.addressManager.confirmObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!0,e.queue.abort()}unconfirmAddress(e){this.log("%s address %a is not externally dialable",e.type,e.multiaddr),this.components.addressManager.removeObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!1,e.queue.abort()}getNetworkSegment(e){let t=ce(e);switch(t.type){case"ip4":return t.host.split(".")[0].padStart(3,"0");case"ip6":return t.host.split(":")[0].padStart(4,"0");default:throw new _(`Remote address ${e} was not an IPv4 or Ipv6 address`)}}};function s_(r={}){return e=>new Pm(e,r)}var bF="bootstrap",xF=50,EF=1e3,D5=class extends ue{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??EF,this.list=t.list.map(n=>j(n)).filter(n=>Cc.matches(n)?n.getComponents().findLast(i=>i.code===421)?.value==null?(this.log.error("invalid bootstrap multiaddr without peer id"),!1):!0:(this.log.error("invalid multiaddr %a",n),!1)).map(n=>({id:Xe(n.getComponents().findLast(o=>o.code===421)?.value??""),multiaddrs:[n]})),this._init=t}[as]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Te]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error("failed to discover bootstrap peers - %e",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??bF]:{value:this._init.tagValue??xF,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",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function a_(r){return e=>new D5(e,r)}var N5=1e3,c_=60*N5;var pge=120*c_,l_=1,Lm=5e3,u_=100;var Ld=`${cs}-circuit-relay`,mge=2*c_,gge=BigInt(1<<17),pa="/libp2p/circuit/relay/0.2.0/hop",O5="/libp2p/circuit/relay/0.2.0/stop",yge=30*N5,wge=30*N5,B5=300,d_=4096,f_=.001;var Wi;(function(r){let e;(function(a){a.RESERVE="RESERVE",a.CONNECT="CONNECT",a.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.RESERVE=0]="RESERVE",a[a.CONNECT=1]="CONNECT",a[a.STATUS=2]="STATUS"})(t||(t={})),(function(a){a.codec=()=>lt(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.peer!=null&&(c.uint32(18),qi.codec().encode(a.peer,c)),a.reservation!=null&&(c.uint32(26),Dd.codec().encode(a.reservation,c)),a.limit!=null&&(c.uint32(34),zi.codec().encode(a.limit,c)),a.status!=null&&(c.uint32(40),vt.codec().encode(a.status,c)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{u.peer=qi.codec().decode(a,a.uint32(),{limits:l.limits?.peer});break}case 3:{u.reservation=Dd.codec().decode(a,a.uint32(),{limits:l.limits?.reservation});break}case 4:{u.limit=zi.codec().decode(a,a.uint32(),{limits:l.limits?.limit});break}case 5:{u.status=vt.codec().decode(a);break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{yield*qi.codec().stream(a,a.uint32(),`${l}.peer`,{limits:u.limits?.peer});break}case 3:{yield*Dd.codec().stream(a,a.uint32(),`${l}.reservation`,{limits:u.limits?.reservation});break}case 4:{yield*zi.codec().stream(a,a.uint32(),`${l}.limit`,{limits:u.limits?.limit});break}case 5:{yield{field:`${l}.status`,value:vt.codec().decode(a)};break}default:{a.skipType(f&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(Wi||(Wi={}));var ho;(function(r){let e;(function(a){a.CONNECT="CONNECT",a.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.CONNECT=0]="CONNECT",a[a.STATUS=1]="STATUS"})(t||(t={})),(function(a){a.codec=()=>lt(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.peer!=null&&(c.uint32(18),qi.codec().encode(a.peer,c)),a.limit!=null&&(c.uint32(26),zi.codec().encode(a.limit,c)),a.status!=null&&(c.uint32(32),vt.codec().encode(a.status,c)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{u.peer=qi.codec().decode(a,a.uint32(),{limits:l.limits?.peer});break}case 3:{u.limit=zi.codec().decode(a,a.uint32(),{limits:l.limits?.limit});break}case 4:{u.status=vt.codec().decode(a);break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{yield*qi.codec().stream(a,a.uint32(),`${l}.peer`,{limits:u.limits?.peer});break}case 3:{yield*zi.codec().stream(a,a.uint32(),`${l}.limit`,{limits:u.limits?.limit});break}case 4:{yield{field:`${l}.status`,value:vt.codec().decode(a)};break}default:{a.skipType(f&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(ho||(ho={}));var qi;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.id!=null&&i.id.byteLength>0&&(s.uint32(10),s.bytes(i.id)),i.addrs!=null&&i.addrs.length>0)for(let c of i.addrs)s.uint32(18),s.bytes(c);a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={id:de(0),addrs:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.id=i.bytes();break}case 2:{if(a.limits?.addrs!=null&&c.addrs.length===a.limits.addrs)throw new Ee('Decode error - repeated field "addrs" had too many elements');c.addrs.push(i.bytes());break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={addrs:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{yield{field:`${a}.id`,value:i.bytes()};break}case 2:{if(c.limits?.addrs!=null&&l.addrs===c.limits.addrs)throw new Ee('Streaming decode error - repeated field "addrs" had too many elements');yield{field:`${a}.addrs[]`,index:l.addrs,value:i.bytes()},l.addrs++;break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(qi||(qi={}));var Dd;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.expire!=null&&i.expire!==0n&&(s.uint32(8),s.uint64(i.expire)),i.addrs!=null&&i.addrs.length>0)for(let c of i.addrs)s.uint32(18),s.bytes(c);i.voucher!=null&&(s.uint32(26),Od.codec().encode(i.voucher,s)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={expire:0n,addrs:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.expire=i.uint64();break}case 2:{if(a.limits?.addrs!=null&&c.addrs.length===a.limits.addrs)throw new Ee('Decode error - repeated field "addrs" had too many elements');c.addrs.push(i.bytes());break}case 3:{c.voucher=Od.codec().decode(i,i.uint32(),{limits:a.limits?.voucher});break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={addrs:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{yield{field:`${a}.expire`,value:i.uint64()};break}case 2:{if(c.limits?.addrs!=null&&l.addrs===c.limits.addrs)throw new Ee('Streaming decode error - repeated field "addrs" had too many elements');yield{field:`${a}.addrs[]`,index:l.addrs,value:i.bytes()},l.addrs++;break}case 3:{yield*Od.codec().stream(i,i.uint32(),`${a}.voucher`,{limits:c.limits?.voucher});break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Dd||(Dd={}));var zi;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.duration!=null&&(s.uint32(8),s.uint32(i.duration)),i.data!=null&&(s.uint32(16),s.uint64(i.data)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.duration=i.uint32();break}case 2:{c.data=i.uint64();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.duration`,value:i.uint32()};break}case 2:{yield{field:`${a}.data`,value:i.uint64()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(zi||(zi={}));var vt;(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"})(vt||(vt={}));var M5;(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"})(M5||(M5={}));(function(r){r.codec=()=>lt(M5)})(vt||(vt={}));var Nd;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.relay!=null&&i.relay.byteLength>0&&(s.uint32(10),s.bytes(i.relay)),i.peer!=null&&i.peer.byteLength>0&&(s.uint32(18),s.bytes(i.peer)),i.expiration!=null&&i.expiration!==0n&&(s.uint32(24),s.uint64(i.expiration)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={relay:de(0),peer:de(0),expiration:0n},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.relay=i.bytes();break}case 2:{c.peer=i.bytes();break}case 3:{c.expiration=i.uint64();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.relay`,value:i.bytes()};break}case 2:{yield{field:`${a}.peer`,value:i.bytes()};break}case 3:{yield{field:`${a}.expiration`,value:i.uint64()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Nd||(Nd={}));var Od;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.publicKey!=null&&i.publicKey.byteLength>0&&(s.uint32(10),s.bytes(i.publicKey)),i.payloadType!=null&&i.payloadType.byteLength>0&&(s.uint32(18),s.bytes(i.payloadType)),i.payload!=null&&(s.uint32(26),Nd.codec().encode(i.payload,s)),i.signature!=null&&i.signature.byteLength>0&&(s.uint32(42),s.bytes(i.signature)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={publicKey:de(0),payloadType:de(0),signature:de(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.publicKey=i.bytes();break}case 2:{c.payloadType=i.bytes();break}case 3:{c.payload=Nd.codec().decode(i,i.uint32(),{limits:a.limits?.payload});break}case 5:{c.signature=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.publicKey`,value:i.bytes()};break}case 2:{yield{field:`${a}.payloadType`,value:i.bytes()};break}case 3:{yield*Nd.codec().stream(i,i.uint32(),`${a}.payload`,{limits:c.limits?.payload});break}case 5:{yield{field:`${a}.signature`,value:i.bytes()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Od||(Od={}));var Bd=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},Dm=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},Nm=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function U5(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Md=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}},Om=Ke(Be(Cc.matchers[0],Ve(290))),Bm=Ke(Ve(290));var Mm=class extends ue{components;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.components=e,this.started=!1,this.running=!1,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal,this.dialPeer=this.dialPeer.bind(this),this.onPeer=this.onPeer.bind(this)}isStarted(){return this.started}async start(){this.topologyId=await this.components.registrar.register(pa,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.components.registrar.unregister(this.topologyId),this.running&&this.stopDiscovery(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,this.components.events.addEventListener("peer:discovery",this.onPeer),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.components.peerStore.all({filters:[n=>n.protocols.includes(pa)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=h_(n),s=h_(o);return i>s?-1:s>i?1:0}]});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=this.queue=new Kt({concurrency:5});this.log("start random walk");for await(let n of this.components.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.components.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(this.dialPeer,{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p - %e",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network - %e",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort(),this.queue?.clear(),this.components.events.removeEventListener("peer:discovery",this.onPeer)}onPeer(e){this.log.trace("maybe dialing discovered peer %p",e.detail.id),this.maybeDialPeer(e).catch(t=>{this.log.trace("error dialing discovered peer %p - %e",e.detail.id,t)})}async maybeDialPeer(e){if(this.queue==null)return;let t=e.detail.id,n=e.detail.multiaddrs;if(this.queue.has(t)){this.log.trace("random peer %p was already in queue",t);return}if(this.components.connectionManager.getConnections(t)?.length>0){this.log.trace("random peer %p was already connected",t);return}if(!await this.components.connectionManager.isDialable(n)){this.log.trace("random peer %p was not dialable",t);return}this.queue?.add(this.dialPeer,{peerId:e.detail.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to discovered peer %p - %e",e.detail.id,o)})}async dialPeer({peerId:e,signal:t}){let n=we([AbortSignal.timeout(5e3),t]);try{await this.components.connectionManager.openConnection(e,{signal:n})}finally{n.clear()}}};function h_(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(N(e)).getTime()}var F5=class extends ue{connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??Lm,this.reservationStore.addEventListener("relay:removed",this._onRemoveRelayPeer),this.reservationStore.addEventListener("relay:created-reservation",this._onAddRelayPeer)}_onRemoveRelayPeer=e=>{this.log("relay removed %p our relay %p",e.detail.relay,this.relay,this.relay?.equals(e.detail.relay)),this.relay?.equals(e.detail.relay)===!0&&(this.log("relay peer removed %p",e.detail.relay),this.listeningAddrs.forEach(t=>{this.addressManager.removeObservedAddr(t)}),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{details:t}=e.detail;t.type!=="configured"&&t.id===this.reservationId&&this.addedRelay(e.detail)};async listen(e){if(Bm.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(Om.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),o=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(o.remotePeer)){this.log("making reservation on peer %p",o.remotePeer);let i=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(i)}}else throw new ss(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}updateAnnounceAddrs(){}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),queueMicrotask(()=>{this.safeDispatchEvent("close")})}addedRelay(e){this.log("relay peer added %p",e.relay),this.relay=e.relay,this.listeningAddrs=e.details.reservation.addrs.map(t=>j(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function p_(r){return new F5(r)}var m_="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var g_=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=m_[t[r]&63];return e};var vF=60*1e3*10,SF=60*1e3*5,AF=30*1e3,Um=class extends ue{peerId;connectionManager;peerStore;events;reserveQueue;reservations;pendingReservations;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.peerStore=e.peerStore,this.events=e.events,this.reservations=new er,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??u_,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??Lm,this.started=!1,this.relayFilter=Mt(100),this.reserveQueue=new Kt({concurrency:t?.reservationConcurrency??l_,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(i=>i.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(i=>{this.log("could not remove relay %p - %e",n.detail,i)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Ld)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Ld]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error("failed to clean up and redial old relays during afterStart - %e",e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=g_();return this.pendingReservations.push(e),this.#r(),e}async addRelay(e,t){if(this.peerId.equals(e))throw this.log.trace("not trying to use self as relay"),new ss("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new Nm("The reservation queue is full");let n=this.reserveQueue.find(e);if(n!=null)return this.log.trace("potential relay peer %p is already in the reservation queue",e),n.join();if(this.relayFilter.has(e.toMultihash().bytes))throw new ss("The relay was previously invalid");return this.log.trace("try to reserve relay slot with %p",e),this.reserveQueue.add(async()=>{let o=Date.now();try{let i=this.reservations.get(e);if(i!=null){let p=this.connectionManager.getConnections(e),y=!1;if(p.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),p.map(g=>g.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),y=!0),y&&U5(i.reservation.expire)>vF)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:i};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new Bd("Not making reservation on discovered relay because we do not need any more relays");let s=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:s});if(Nt.matches(a.remoteAddr))throw new Dm("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=U5(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let u=Math.min(Math.max(l-SF,AF),Math.pow(2,31)-1),d=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async p=>{this.log.error("could not refresh reservation to relay %p - %e",e,p),await this.#t(e)}).catch(p=>{this.log.error("could not remove expired reservation to relay %p - %e",e,p)})},u),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Bd("Made reservation on relay but did not need any more discovered relays");f={timeout:d,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Ld]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(i){throw t==="discovered"&&i.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,i),(i.name==="DialError"||i.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)}),i}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(e){return e==null?this.reservations.size:[...this.reservations.values()].reduce((t,n)=>(n.type===e&&t++,t),0)}cancelReservations(){[...this.reservations.values()].forEach(e=>{clearTimeout(e.timeout)}),this.reservations.clear()}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(pa,t),i=Qe(n).pb(Wi);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:Wi.Type.RESERVE},t);let s;try{this.log.trace("reading response from %p",e.remotePeer),s=await i.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %s",s.status),s.status===vt.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=j(l);u.getComponents().find(d=>d.code===421)==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=j(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>j(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#t(e){let t=this.reservations.get(e);t!=null&&(this.log("removing relay reservation with %p from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),t.type==="discovered"&&this.pendingReservations.push(t.id),await this.peerStore.merge(e,{tags:{[Ld]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#r())}#r(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=Mt(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var $5=class extends vi{stream;init;constructor(e){super({...e,direction:e.stream.direction}),this.init=e,this.stream=e.stream,this.stream.addEventListener("close",t=>{this.onTransportClosed(t.error)}),this.stream.addEventListener("remoteCloseWrite",t=>{this.onRemoteCloseWrite(),this.close().catch(n=>{this.abort(n)})}),this.stream.addEventListener("message",t=>{e.onDataRead?.(t.data),this.onData(t.data)}),this.stream.addEventListener("drain",()=>{this.safeDispatchEvent("drain")})}sendData(e){return this.init.onDataWrite?.(e),{sentBytes:e.byteLength,canSendMore:this.stream.send(e)}}async sendClose(e){await this.stream.close(e)}sendReset(){this.stream.abort(new Error("An error occurred"))}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}};function V5(r){return new $5(r)}var TF=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(j)}catch{return!1}return!0},y_={maxInboundStopStreams:B5,maxOutboundStopStreams:B5,stopTimeout:3e4},Fm=class{components;discovery;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.maxInboundStopStreams=t.maxInboundStopStreams??y_.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??y_.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new Mm(e,{filter:t.discoveryFilter??L6(d_,f_)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p - %e",n.detail,o)})}),this.reservationStore=new Um(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1,this.onStop=this.onStop.bind(this)}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Te]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[Ir](){return this.discovery!=null?["@libp2p/identify"]:[]}[li]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,this.shutdownController.signal,await this.components.registrar.handle(O5,this.onStop,{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await xt(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await St(this.discovery,this.reservationStore),await this.components.registrar.unhandle(O5),this.started=!1}async dial(e,t){let n=e.toString().split("/p2p-circuit"),o=j(n[0]),i=j(n[n.length-1]),s=o.getComponents().find(h=>h.code===421)?.value,a=i.getComponents().find(h=>h.code===421)?.value;if(s==null||a==null){let h=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${h}`),new ai(`C${h}`)}let c=Xe(s),l=Xe(a),d=this.components.connectionManager.getConnections(c)[0];d==null?(await this.components.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new K("circuit-relay:open-connection")),d=await this.components.connectionManager.openConnection(c,t)):t.onProgress?.(new K("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new K("circuit-relay:open-hop-stream")),f=await d.newStream(pa,t);let h=Qe(f).pb(Wi);t.onProgress?.(new K("circuit-relay:write-connect-message")),await h.write({type:Wi.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[j(i).bytes]}},t),t.onProgress?.(new K("circuit-relay:read-connect-response"));let p=await h.read(t);if(p.status!==vt.OK)throw new ve(`failed to connect via relay with status ${p?.status?.toString()??"undefined"}`);let y=new Md(p.limit),g=V5({stream:h.unwrap().unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.components.peerId.toString()}`),onDataRead:y.onData,onDataWrite:y.onData,log:f.log.newScope("circuit-relay:connection")}),m=await this.components.upgrader.upgradeOutbound(g,{...t,limits:y.getLimits()});return m.log("outbound relayed connection established to %p with limits %o, over connection %s",m.remotePeer,p.limit??"none",d.id),m}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed - %e",l,c,h),f?.abort(h),h}}createListener(e){return p_({peerId:this.components.peerId,connectionManager:this.components.connectionManager,addressManager:this.components.addressManager,reservationStore:this.reservationStore,logger:this.components.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Om.exactMatch(t)||Bm.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Nt.exactMatch(t))}async onStop(e,t){let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);try{if(!this.reservationStore.hasReservation(t.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.components.transportManager.listen([t.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on - %e",d)}let o=Qe(e).pb(ho),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",t.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",t.remotePeer),await o.write({type:ho.Type.STATUS,status:vt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(i.type!==ho.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:ho.Type.STATUS,status:vt.UNEXPECTED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(!TF(i)){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:ho.Type.STATUS,status:vt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}let s=dt(He(i.peer.id));if(await this.components.connectionGater.denyInboundRelayedConnection?.(t.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",t.remotePeer),await o.write({type:ho.Type.STATUS,status:vt.PERMISSION_DENIED},{signal:n}),await e.close({signal:n});return}this.log.trace("sending success response to %p",t.remotePeer),await o.write({type:ho.Type.STATUS,status:vt.OK},{signal:n});let a=new Md(i.limit),c=t.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.components.addressManager.getAddresses()[0],u=V5({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,onDataRead:a.onData,onDataWrite:a.onData,log:e.log.newScope("circuit-relay:connection")});await this.components.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),u.log("inbound relayed connection established to %p with limits %o, over connection %s",s,i.limit??"none",t.id)}finally{n?.clear()}}};function w_(r={}){return e=>new Fm(e,r)}var $n;(function(r){let e;(function(a){a.UNUSED="UNUSED",a.CONNECT="CONNECT",a.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.UNUSED=0]="UNUSED",a[a.CONNECT=100]="CONNECT",a[a.SYNC=300]="SYNC"})(t||(t={})),(function(a){a.codec=()=>lt(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{if(l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.observedAddresses!=null&&a.observedAddresses.length>0)for(let u of a.observedAddresses)c.uint32(18),c.bytes(u);l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={observedAddresses:[]},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{if(l.limits?.observedAddresses!=null&&u.observedAddresses.length===l.limits.observedAddresses)throw new Ee('Decode error - repeated field "observedAddresses" had too many elements');u.observedAddresses.push(a.bytes());break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d={observedAddresses:0},f=c==null?a.len:a.pos+c;for(;a.pos<f;){let h=a.uint32();switch(h>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{if(u.limits?.observedAddresses!=null&&d.observedAddresses===u.limits.observedAddresses)throw new Ee('Streaming decode error - repeated field "observedAddresses" had too many elements');yield{field:`${l}.observedAddresses[]`,index:d.observedAddresses,value:a.bytes()},d.observedAddresses++;break}default:{a.skipType(h&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})($n||($n={}));function K5(r,e){return Nt.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:ap.matches(r)?!0:Jv.matches(r)?!ut(r):!1}var b_=1024*4,x_=100,$m={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Vm=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??$m.timeout,this.retries=t.retries??$m.retries,this.maxInboundStreams=t.maxInboundStreams??$m.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??$m.maxOutboundStreams,this.handleIncomingUpgrade=this.handleIncomingUpgrade.bind(this)}[Symbol.toStringTag]="@libp2p/dcutr";[Ir]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Ud,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{Nt.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt - %e",n)})}}),await this.registrar.handle(Ud,this.handleIncomingUpgrade,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Ud),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([Ud],{signal:o.signal,runOnLimitedConnection:!0});let i=Qe(t,{maxDataLength:b_}).pb($n);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:$n.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(d=>d.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==$n.Type.CONNECT)throw this.log("A sent wrong message type"),new ve("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 ve("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:$n.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await zb(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:o.signal,priority:x_,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d - %e",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let i=o.multiaddr;return i.getComponents().find(s=>s.code===421)?.value==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>K5(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(Nt.exactMatch(i.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,i.remoteAddr),await e.close({signal:o}),!0}catch(i){this.log.error("unilateral connection upgrade to %p on addresses %a failed - %e",e.remotePeer,n,i)}}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)},o=Qe(e,{maxDataLength:b_}).pb($n);this.log("A receiving connect");let i=await o.read(n);if(i.type!==$n.Type.CONNECT)throw this.log("B sent wrong message type"),new ve("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new ve("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs in %o",i.observedAddresses.map(l=>j(l))),new ve("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:$n.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==$n.Type.SYNC)throw new ve("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:x_,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n),await e.close(n)}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=j(n);if(!K5(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Ud="/libp2p/dcutr";function E_(r={}){return e=>new Vm(e,r)}function re(r){if(r!==void 0&&r!==re.REQUEST&&r!==re.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");r===void 0||this.initialize(r),this.maxHeaderSize=re.maxHeaderSize}re.prototype.initialize=function(r,e){if(r!==re.REQUEST&&r!==re.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");this.type=r,this.state=r+"_LINE",this.info={headers:[],upgrade:!1},this.trailers=[],this.line="",this.isChunked=!1,this.connection="",this.headerSize=0,this.body_bytes=null,this.isUserCall=!1,this.hadError=!1};re.encoding="ascii";re.maxHeaderSize=80*1024;re.REQUEST="REQUEST";re.RESPONSE="RESPONSE";var v_=re.kOnHeaders=1,H5=re.kOnHeadersComplete=2,Km=re.kOnBody=3,q5=re.kOnMessageComplete=4;re.prototype[v_]=re.prototype[H5]=re.prototype[Km]=re.prototype[q5]=function(){};var S_=!0;Object.defineProperty(re,"kOnExecute",{get:function(){return S_=!1,99}});var A_=re.methods=["DELETE","GET","HEAD","POST","PUT","CONNECT","OPTIONS","TRACE","COPY","LOCK","MKCOL","MOVE","PROPFIND","PROPPATCH","SEARCH","UNLOCK","BIND","REBIND","UNBIND","ACL","REPORT","MKACTIVITY","CHECKOUT","MERGE","M-SEARCH","NOTIFY","SUBSCRIBE","UNSUBSCRIBE","PATCH","PURGE","MKCALENDAR","LINK","UNLINK","SOURCE"],T_=A_.indexOf("CONNECT");re.prototype.reinitialize=re;re.prototype.close=re.prototype.pause=re.prototype.resume=re.prototype.remove=re.prototype.free=function(){};re.prototype._compatMode0_11=!1;re.prototype.getAsyncId=function(){return 0};var _F={REQUEST_LINE:!0,RESPONSE_LINE:!0,HEADER:!0};re.prototype.execute=function(r,e,t){if(!(this instanceof re))throw new TypeError("not a HTTPParser");e=e||0,t=typeof t=="number"?t:r.length,this.chunk=r,this.offset=e;var n=this.end=e+t;try{for(;this.offset<n&&!this[this.state](););}catch(o){if(this.isUserCall)throw o;return this.hadError=!0,o}return this.chunk=null,t=this.offset-e,_F[this.state]&&(this.headerSize+=t,this.headerSize>(this.maxHeaderSize||re.maxHeaderSize))?new Error("max header size exceeded"):t};var IF={REQUEST_LINE:!0,RESPONSE_LINE:!0,BODY_RAW:!0};re.prototype.finish=function(){if(!this.hadError){if(!IF[this.state])return new Error("invalid state for EOF");this.state==="BODY_RAW"&&this.userCall()(this[q5]())}};re.prototype.consume=re.prototype.unconsume=re.prototype.getCurrentBuffer=function(){};re.prototype.userCall=function(){this.isUserCall=!0;var r=this;return function(e){return r.isUserCall=!1,e}};re.prototype.nextRequest=function(){this.userCall()(this[q5]()),this.reinitialize(this.type)};re.prototype.consumeLine=function(){for(var r=this.end,e=this.chunk,t=this.offset;t<r;t++)if(e[t]===10){var n=this.line+N(e.subarray(this.offset,t),re.encoding);return n.charAt(n.length-1)==="\r"&&(n=n.substr(0,n.length-1)),this.line="",this.offset=t+1,n}this.line+=N(e.subarray(this.offset,this.end),re.encoding),this.offset=this.end};var CF=/^([^: \t]+):[ \t]*((?:.*[^ \t])|)/,kF=/^[ \t]+(.*[^ \t])/;re.prototype.parseHeader=function(r,e){if(r.indexOf("\r")!==-1)throw Hm("HPE_LF_EXPECTED");var t=CF.exec(r),n=t&&t[1];if(n)e.push(n),e.push(t[2]);else{var o=kF.exec(r);o&&e.length&&(e[e.length-1]&&(e[e.length-1]+=" "),e[e.length-1]+=o[1])}};var RF=/^([A-Z-]+) ([^ ]+) HTTP\/(\d)\.(\d)$/;re.prototype.REQUEST_LINE=function(){var r=this.consumeLine();if(r){var e=RF.exec(r);if(e===null)throw Hm("HPE_INVALID_CONSTANT");if(this.info.method=this._compatMode0_11?e[1]:A_.indexOf(e[1]),this.info.method===-1)throw new Error("invalid request method");this.info.url=e[2],this.info.versionMajor=+e[3],this.info.versionMinor=+e[4],this.body_bytes=0,this.state="HEADER"}};var PF=/^HTTP\/(\d)\.(\d) (\d{3}) ?(.*)$/;re.prototype.RESPONSE_LINE=function(){var r=this.consumeLine();if(r){var e=PF.exec(r);if(e===null)throw Hm("HPE_INVALID_CONSTANT");this.info.versionMajor=+e[1],this.info.versionMinor=+e[2];var t=this.info.statusCode=+e[3];this.info.statusMessage=e[4],((t/100|0)===1||t===204||t===304)&&(this.body_bytes=0),this.state="HEADER"}};re.prototype.shouldKeepAlive=function(){if(this.info.versionMajor>0&&this.info.versionMinor>0){if(this.connection.indexOf("close")!==-1)return!1}else if(this.connection.indexOf("keep-alive")===-1)return!1;return!!(this.body_bytes!==null||this.isChunked)};re.prototype.HEADER=function(){var r=this.consumeLine();if(r!==void 0){var e=this.info;if(r)this.parseHeader(r,e.headers);else{for(var t=e.headers,n=!1,o,i=!1,s=0;s<t.length;s+=2)switch(t[s].toLowerCase()){case"transfer-encoding":this.isChunked=t[s+1].toLowerCase()==="chunked";break;case"content-length":if(o=+t[s+1],n){if(o!==this.body_bytes)throw Hm("HPE_UNEXPECTED_CONTENT_LENGTH")}else n=!0,this.body_bytes=o;break;case"connection":this.connection+=t[s+1].toLowerCase();break;case"upgrade":i=!0;break}this.isChunked&&n&&(n=!1,this.body_bytes=null),i&&this.connection.indexOf("upgrade")!=-1?e.upgrade=this.type===re.REQUEST||e.statusCode===101:e.upgrade=e.method===T_,this.isChunked&&e.upgrade&&(this.isChunked=!1),e.shouldKeepAlive=this.shouldKeepAlive();var a;if(S_?a=this.userCall()(this[H5](e)):a=this.userCall()(this[H5](e.versionMajor,e.versionMinor,e.headers,e.method,e.url,e.statusCode,e.statusMessage,e.upgrade,e.shouldKeepAlive)),a===2)return this.nextRequest(),!0;if(this.isChunked&&!a)this.state="BODY_CHUNKHEAD";else{if(a||this.body_bytes===0)return this.nextRequest(),e.upgrade;this.body_bytes===null?this.state="BODY_RAW":this.state="BODY_SIZED"}}}};re.prototype.BODY_CHUNKHEAD=function(){var r=this.consumeLine();r!==void 0&&(this.body_bytes=parseInt(r,16),this.body_bytes?this.state="BODY_CHUNK":this.state="BODY_CHUNKTRAILERS")};re.prototype.BODY_CHUNK=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[Km](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||(this.state="BODY_CHUNKEMPTYLINE")};re.prototype.BODY_CHUNKEMPTYLINE=function(){var r=this.consumeLine();if(r!==void 0){if(r!=="")throw new Error("Expected empty line");this.state="BODY_CHUNKHEAD"}};re.prototype.BODY_CHUNKTRAILERS=function(){var r=this.consumeLine();r!==void 0&&(r?this.parseHeader(r,this.trailers):(this.trailers.length&&this.userCall()(this[v_](this.trailers,"")),this.nextRequest()))};re.prototype.BODY_RAW=function(){this.userCall()(this[Km](this.chunk.slice(this.offset,this.end),0,this.end-this.offset)),this.offset=this.end};re.prototype.BODY_SIZED=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[Km](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||this.nextRequest()};["Headers","HeadersComplete","Body","MessageComplete"].forEach(function(r){var e=re["kOn"+r];Object.defineProperty(re.prototype,"on"+r,{get:function(){return this[e]},set:function(t){return this._compatMode0_11=!0,T_="CONNECT",this[e]=t}})});function Hm(r){var e=new Error("Parse Error");return e.code=r,e}function __(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")}function z5(r,e={}){let t=__(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(o){try{let{value:i,done:s}=await t.next();if(this._cancelled)return;if(s===!0){o.close();return}o.enqueue(i)}catch(i){o.error(i)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}var LF=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),I_=pl({name:"sha-1",code:17,encode:LF("SHA-1")});var qm=class extends globalThis.Request{constructor(e,t={}){let n=t.method??"GET",o=po(t),i=t.body;zm(n,o)&&(t.method="UPGRADE"),super(e,t),Object.defineProperties(this,{body:{value:i,writable:!1},method:{value:n,writable:!1},headers:{value:o,writable:!1}})}};var C_={100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a Teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"};var mo=class extends globalThis.Response{constructor(e,t={}){let n=po(t),o=t.status??200;(o<200||o>599)&&(t.status=200),super(e,t),Object.defineProperties(this,{status:{value:o,writable:!1},statusText:{value:C_[o],writable:!1},headers:{value:n,writable:!1}})}};var DF=["dns","dns4","dns6","dnsaddr"];function $d(r,e){if(r instanceof URL)return r;let t=Gm(r,e),{httpPath:n}=Ym(r);return new URL(`http://${t}${n}`)}function Vd(r){return r instanceof Uint8Array?r:r instanceof DataView?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r,0,r.byteLength)}function R_(r,e){let t={method:r.method,headers:r.headers};if((t.method!=="GET"||r.upgrade)&&t.method!=="HEAD"){let n=e;r.upgrade||(n=OF(e,r.headers.get("content-length"))),t.body=z5(n),t.duplex="half"}return new qm(W5(r).toString(),t)}async function P_(r,e){if(e.send(R([`HTTP/1.1 ${r.status} ${r.statusText}`,...Wm(r.headers),"",""].join(`\r
52
+ `))),r.body==null){await e.close().catch(n=>{e.abort(n)});return}let t=r.body.getReader();for(;;){let n=await t.read();if(n.value!=null&&(e.send(n.value)||await e.onDrain()),n.done)break}await e.close().catch(n=>{e.abort(n)})}var L_=R(["HTTP/1.1 404 Not Found","Connection: close","",""].join(`\r
53
+ `)),NF=R(["HTTP/1.1 400 Bad Request","Connection: close","",""].join(`\r
54
+ `)),m4e=R(["HTTP/1.1 500 Internal Server Error","Connection: close","",""].join(`\r
55
+ `)),g4e=R(["HTTP/1.1 501 Not Implemented","Connection: close","",""].join(`\r
56
+ `));function Wm(r){let e=[];r.get("Connection")==null&&r.set("Connection","close");for(let[t,n]of r.entries())e.push(`${t}: ${n}`);return e}async function*OF(r,e){if(e=parseInt(`${e??""}`),e==null||isNaN(e))return r;let t=0;for await(let n of r){if(t+=n.byteLength,t>e){yield n.subarray(0,t-e);return}if(yield n.subarray(),t===e)return}}function Zc(r,e){if(typeof r=="string"&&(r.startsWith("/")?r=j(r):r=new URL(r)),Gt(r)&&(r=j(`/p2p/${r}`)),r instanceof URL&&r.protocol==="multiaddr:"&&(r=Rp(r.toString())),Jn(r)&&(r=[r]),Array.isArray(r)){for(let t of r)if(t.getComponents().some(({name:o})=>o==="http")){let o=Mi(t);return new URL(`${o}${e??""}`)}}return e==null?r:r instanceof URL?new URL(`${r}${e.substring(1)}`):r.map(t=>t.encapsulate(`/http-path/${encodeURIComponent(e.substring(1))}`))}function po(r={}){return r.headers instanceof Headers||(r.headers=new Headers(r.headers)),r.headers}function Fd(r){return r!=null&&r!==""}function Gm(r,e){let t,n=80,o="http:";if(r instanceof URL&&(t=r.hostname,n=parseInt(r.port,10),o=r.protocol),Fd(t)||(t=e.get("host")??void 0),!Fd(t)&&Array.isArray(r))for(let i of r){let a=i.getComponents().filter(({name:c})=>DF.includes(c))?.[0]?.value;if(a!=null){t=a;break}}if(!Fd(t)&&Array.isArray(r))for(let i of r){let s=i.getComponents().findLast(a=>a.code===421)?.value;try{let a=ce(i);a.port!=null&&(n=a.port)}catch{}if(s!=null){t=Xe(s).toCID().toString(Qr);break}}if(!Fd(t)&&Array.isArray(r))for(let i of r)try{let s=ce(i);s.host!=null&&(t=s.host);break}catch{}if(Fd(t))return o==="http:"&&n!==80&&(t=`${t}:${n}`),o==="https:"&&n!==443&&(t=`${t}:${n}`),t;throw new _("Could not determine request host name - a request must have a host header, be made to a DNS or IP-based multiaddr or an http(s) URL")}function Ym(r){let e="/";return r=r.map(t=>j(t.getComponents().filter(n=>n.name==="http-path"?(e=n.value??"/",!1):!0))),{httpPath:e,addresses:r}}function jm(r,e=["GET"]){return r==null?e:(typeof r=="string"&&(r=[r]),r.map(t=>t.toUpperCase()))}function W5(r){let e=r.url??"/";if(e.startsWith("http"))return new URL(e);let t=BF(r);return new URL(`http://${t}${e}`)}function BF(r){let e=r.headers?.host;if(e==null&&(e=r.headers?.Host),e==null&&typeof r.headers.get=="function"&&(e=r.headers.get("host")),e==null)throw new _("Could not read host");return e}function zm(r,e){return r==="GET"&&e.get("connection")?.toLowerCase()==="upgrade"&&e.get("upgrade")?.toLowerCase()==="websocket"}function k_(r,e){if(r instanceof Headers)return r.get(e)??void 0;let t=r[e];return Array.isArray(t)?t.join(","):t}async function G5(r){if(k_(r,"sec-websocket-version")!=="13")throw new is("Invalid version");let e=k_(r,"sec-websocket-key");if(e==null)throw new is("Missing sec-websocket-key");let t=`${e}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,n=await I_.digest(R(t)),o=ul.encode(n.digest).substring(1);return new Headers({Upgrade:"websocket",Connection:"upgrade","Sec-WebSocket-Accept":o})}async function D_(r,e){let t=new re("REQUEST"),n=new ne,o;t[re.kOnHeadersComplete]=i=>{let s=new Headers;for(let a=0;a<i.headers.length;a+=2)s.set(i.headers[a].toLowerCase(),i.headers[a+1]);o={...i,headers:s,raw:n,method:re.methods[i.method]}};try{for(;;){let{data:i}=await hr(r,"message",e?.signal),s=i.subarray(),a=t.execute(s,0,s.byteLength);if(a instanceof Error)throw a;if(n.append(s.subarray(0,a)),a<s.byteLength&&r.push(s.subarray(a)),o!=null)return o}}catch(i){r.abort(i)}finally{t.finish()}throw new Error("Failed to read header info from request")}var Xm=class extends Error{static name="InvalidResponseError";name="InvalidResponseError"};var MF=[101,204,205,304];async function N_(r,e,t){let n=Promise.withResolvers(),o=new TransformStream,i=o.writable.getWriter(),s=!1,a=new re("RESPONSE");a.maxHeaderSize=t.maxHeaderSize??re.maxHeaderSize,a[re.kOnHeadersComplete]=l=>{t.log("response headers complete"),s=!0;let u=new Headers;for(let h=0;h<l.headers.length;h+=2)u.append(l.headers[h],l.headers[h+1]);let d=o.readable;MF.includes(l.statusCode)&&(o.writable.close().catch(()=>{}),o.readable.cancel().catch(()=>{}),d=null);let f=new mo(d,{status:l.statusCode,statusText:l.statusMessage,headers:u});n.resolve(f)},a[re.kOnBody]=l=>{t.log("response read body %d bytes",l.byteLength),i.write(l).catch(u=>{n.reject(u)})},a[re.kOnMessageComplete]=()=>{t.log("response message complete"),i.close().catch(l=>{n.reject(l)})};let c=0;return r.addEventListener("message",({data:l})=>{t.log("response stream read %d bytes",l.byteLength),c+=l.byteLength;let u=a.execute(l.subarray(),0,l.byteLength);u instanceof Error&&(r.abort(u),a.finish())}),r.addEventListener("remoteCloseWrite",()=>{s||n.reject(new Xm(`Response ended before headers were received, read ${c} bytes`)),a.finish()}),n.promise}function O_(r,e){return e.set("Content-Length",`${r.size}`),e.set("Content-Type",r.type!=null&&r.type!==""?r.type:"application/octet-stream"),r.stream()}function B_(r,e){return e.set("Content-Length",`${r.byteLength}`),e.set("Content-Type","application/octet-stream"),new ReadableStream({start(t){t.enqueue(Vd(r)),t.close()}})}function UF(r,e,t){let n=[`--${t}`],o=0,i=2;return typeof e=="string"?(n.push(`Content-Disposition: form-data; name="${r}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${e.length}`,""),o=e.length+i):(n.push(`Content-Disposition: form-data; name="${r}"; filename="${encodeURIComponent(e.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${e.size}`,""),o=e.size+i),R(n.join(`\r
57
+ `)).byteLength+o}function M_(r,e){let t=`-----------------------------${crypto.randomUUID()}`;e.set("Content-Type",`multipart/form-data; boundary=${t}`);let n=0;for(let[c,l]of r.entries())n+=UF(c,l,t);e.set("Content-Length",`${n}`);let o=r.entries(),i;function s(c,l,u,d){let f=[`--${d}`];typeof u=="string"?f.push(`Content-Disposition: form-data; name="${l}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${u.length}`,"",u,""):(f.push(`Content-Disposition: form-data; name="${l}"; filename="${encodeURIComponent(u.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${u.size}`,""),i=u.stream().getReader()),c.enqueue(R(f.join(`\r
58
+ `)))}async function a(c,l){if(i!=null){let f=await i.read();f.value!=null&&c.enqueue(f.value),f.done&&(c.enqueue(R(`\r
59
+ `)),i=void 0);return}let{done:u,value:d}=o.next();if(d!=null){let[f,h]=d;s(c,f,h,l)}u===!0&&c.close()}return new ReadableStream({async pull(c){await a(c,t)}})}function U_(r,e){e.set("Content-Type","application/octet-stream"),e.set("Transfer-Encoding","chunked");let t=r.getReader();return new ReadableStream({async pull(n){let{done:o,value:i}=await t.read();i!=null&&(n.enqueue(R(`${i.byteLength}\r
60
+ `)),n.enqueue(i),n.enqueue(R(`\r
61
+ `))),o&&(n.enqueue(R(`0\r
62
62
  \r
63
- `)),n.close())}})}function K4(r,e){return e.set("Content-Length",`${r.length}`),e.set("Content-Type",'text/plain; charset="UTF-8"'),new ReadableStream({start(t){t.enqueue(C(r)),t.close()}})}function sx(r,e){if(r!=null){if(typeof r=="string")return K4(r,e);if(r instanceof Blob)return tx(r,e);if(UL(r))return rx(r,e);if(r instanceof URLSearchParams)return K4(r.toString(),e);if(r instanceof ReadableStream)return ox(r,e);if(r instanceof FormData)return nx(r,e);throw new Error("Unsupported body type")}}function UL(r){return r==null?!1:r.byteLength!=null}async function ix(r,e,t){let n=new Headers(t.headers),o=n.get("host")??e.hostname;n.set("host",o),n.get("user-agent")==null&&n.set("user-agent","libp2p/fetch");let s=sx(t.body,n),i=[`${t?.method?.toUpperCase()??"GET"} ${e.pathname??"/"} HTTP/1.1`,...Rp(n),"",""];r.send(C(i.join(`\r
64
- `)))||await r.onDrain({signal:t.signal??void 0}),s!=null&&(t.log("request sending body"),await FL(r,s,t))}async function FL(r,e,t){let n=e.getReader();for(;;){let{done:o,value:s}=await n.read();if(s!=null&&(t.log("request send %d bytes",s.byteLength),r.send(s)||await r.onDrain({signal:t.signal??void 0})),o){t.log("request finished sending body");break}}}async function ax(r,e,t={}){let n=r.log.newScope("http-fetch");e=typeof e=="string"?new URL(e):e;let[o]=await Promise.all([ex(r,e,{...t,log:n}),ix(r,e,{...t,log:n})]);return await r.close({signal:t.signal??void 0}),o}var Mp=class extends Event{message;error;filename="";lineno=0;colno=0;constructor(e){super("error"),this.error=e,this.message=e.message}},nu=class extends Event{code;reason;wasClean;constructor(e,t){super(e),this.code=t?.code??0,this.reason=t?.reason??"",this.wasClean=t?.wasClean??!0}};var $L={CONTINUATION:0,TEXT:1,BINARY:2,CONNECTION_CLOSE:8,PING:9,PONG:10},V4={0:"CONTINUATION",1:"TEXT",2:"BINARY",8:"CONNECTION_CLOSE",9:"PING",10:"PONG"};var ou={NORMAL_CLOSURE:1e3,GOING_AWAY:1001,PROTOCOL_ERROR:1002,UNSUPPORTED_DATA:1003,RESERVED:1004,NO_STATUS_RECEIVED:1005,ABNORMAL_CLOSURE:1006,INVALID_FRAME_PAYLOAD_DATA:1007,POLICY_VIOLATION:1008,MESSAGE_TOO_BIG:1009,MANDATORY_EXT:1010,INTERNAL_SERVER_ERROR:1011,TLS_HANDSHAKE:1015};function cx(r){let e=0;if(r.byteLength<e+1)return;let n=r.get(e)&15;if(e++,V4[n]==null)throw new Error(`Unknown opcode: ${n}`);if(r.byteLength<e+1)return;let o=r.get(e),s=(o&128)===128,i=o&127;if(e++,i===126){if(r.byteLength<e+2)return;i=r.getUint16(e),e+=2}else if(i===127){if(r.byteLength<e+8)return;i=r.getUint32(e),e+=8}if(i===0)return r.consume(e),{type:V4[n]};let a;if(s){if(r.byteLength<e+4)return;a=r.subarray(e,e+4),e+=4}if(r.byteLength<e+i)return;let c=r.subarray(e,e+i);return e+=i,a!=null&&(c=lx(c,a)),r.consume(e),{type:V4[n],data:c}}function lx(r,e){let t=0;for(let n=0;n<r.byteLength;n++)r[n]=r[n]^e[t],t++,t===e.byteLength&&(t=0);return r}function ux(r,e,t){let o=new X(Uint8Array.from([128|$L[r]])),s=e?.byteLength??0;if(s<126)o.append(Uint8Array.from([s|(t===!0?128:0)]));else if(s<65535){let i=new X(new Uint8Array(3));i.set(0,126|(t===!0?128:0)),i.setUint16(1,s),o.append(i)}else if(s<18446744073709552e3){let i=new X(new Uint8Array(9));i.set(0,127|(t===!0?128:0)),i.setUint32(1,s),o.append(i)}else throw new Error("Payload too large");if(t===!0&&e!=null){let i=Uint8Array.from([0,0,0,0]);o.append(i),e=lx(e,i)}return e!=null&&o.append(e),o}function dx(r){if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof DataView)return ru(r);if(typeof r=="string")return C(r);if(r instanceof Blob)return r.arrayBuffer().then(e=>ru(e));throw new A("Unsupported data type")}async function fx(r,e){return new Promise((t,n)=>{let o=!1,s=new j("RESPONSE");s[j.kOnHeadersComplete]=i=>{o=!0;let a=[];for(let c=0;c<i.headers.length;c+=2)a.push([i.headers[c],i.headers[c+1]]);t(new Pn(null,{status:i.statusCode,statusText:i.statusMessage,headers:new Headers(a)}))},Promise.resolve().then(async()=>{for(;;){let{data:i}=await Xt(r,"message",e.signal),a=i.subarray(),c=s.execute(a,0,a.byteLength);if(c instanceof Error)throw c;if(c<a.byteLength&&r.push(a.subarray(c)),o)break}}).catch(i=>{n(i)})})}async function*hx(r,e=[],t){let n=Ja.encode(crypto.getRandomValues(new Uint8Array(16))).substring(1);t.set("host",r.hostname),t.set("connection","upgrade"),t.set("upgrade","websocket"),t.set("pragma","no-cache"),t.set("cache-control","no-cache"),t.set("sec-websocket-version","13"),t.set("sec-websocket-key",n),e.length>0&&t.set("sec-websocket-protocol",e.join(", ")),yield C([`GET ${r.pathname??"/"} HTTP/1.1`,...[...t.entries()].map(([o,s])=>`${o}: ${s}`),"",""].join(`\r
65
- `))}var KL=["BINARY","TEXT","CONTINUATION"],VL=10485760;var HL="/http/1.1",Bp=class extends ie{binaryType="arraybuffer";bufferedAmount=0;extensions="";protocol="";readyState;url;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;_onclose;_onerror;_onmessage;_onopen;sentClose;isClient;buffer;maxMessageSize;_url;closeController;constructor(e,t={}){super(),this.readyState=this.CONNECTING,this.url=e.pathname,this.sentClose=!1,this.isClient=t.isClient??!0,this.buffer=new X,this.closeController=new AbortController,this.maxMessageSize=t.maxMessageSize??VL}send(e){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");let t=dx(e);Ed(t)?t.then(n=>{this._send("BINARY",n)}).catch(n=>{this._errored(n)}):this._send("BINARY",t)}_send(e,t){if(this.readyState!==this.OPEN)return;let n=ux(e,t,this.isClient),o=n.byteLength;this.bufferedAmount+=o,this._write(n,s=>{this.bufferedAmount-=o,s!=null&&this._errored(s)})}close(e,t){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");this.readyState=this.CLOSING,this.sentClose=!0,this._send("CONNECTION_CLOSE")}_errored(e){this.readyState=this.CLOSED,this.dispatchEvent(new Mp(e))}set onclose(e){this._onclose=e,this.addEventListener("close",e)}get onclose(){return this._onclose??null}set onerror(e){this._onerror=e,this.addEventListener("error",e)}get onerror(){return this._onerror??null}set onmessage(e){this._onmessage=e,this.addEventListener("message",e)}get onmessage(){return this._onmessage??null}set onopen(e){this._onopen=e,this.addEventListener("open",e)}get onopen(){return this._onopen??null}_push(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxMessageSize){this.close(ou.MESSAGE_TOO_BIG,"Max message size exceeded");return}for(;;){let t=cx(this.buffer);if(t==null)break;if(KL.includes(t.type)&&t.data!=null){let n;this.binaryType==="blob"?n=new Blob([t.data]):t.data.byteOffset===0&&t.data.byteLength===t.data.buffer.byteLength?n=t.data.buffer:(n=new ArrayBuffer(t.data.byteLength),new Uint8Array(n,0,n.byteLength).set(t.data)),this.dispatchEvent(new MessageEvent("message",{data:n,origin:this._url?.hostname}))}t.type==="PING"&&this._send("PONG",t.data),t.type==="CONNECTION_CLOSE"&&(this.sentClose||this.close(),this.closeController.abort(),this._close(void 0,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new nu("close"))}))}}_remoteClosed(e){this.readyState=this.CLOSING,this._close(e,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new nu("close"))})}};var su=class extends Bp{writer;writable;constructor(e,t,n={}){if(super(new URL(e.url),{...n,isClient:!1}),e.body==null)throw new A("Request body cannot be null");this.readyState=this.OPEN,this.writable=t,this.writer=t.getWriter();let o=e.body.getReader();Promise.resolve().then(async()=>{for(this.dispatchEvent(new Event("open"));;){let{value:s,done:i}=await o.read();if(s!=null&&this._push(s),i){this._remoteClosed();break}}}).catch(s=>{this._errored(s)})}_write(e,t){this.writer?.write(e).then(()=>{t()},n=>{t(n)})}_close(e,t){e!=null?this.writable.abort(e).then(()=>{t()},()=>{t()}):this.writable.close().then(()=>{t()},()=>{t()})}},iu=class extends Bp{stream;handshakeTimeout;drainTimeout;constructor(e,t,n,o){super(t,{...o,isClient:!0}),this.handshakeTimeout=o.handshakeTimeout??1e4,this.drainTimeout=o.drainTimeout??1e4,Promise.resolve().then(async()=>{let s=AbortSignal.timeout(this.handshakeTimeout);this.stream=await n.openStream(e,HL,{...o,signal:s});for await(let a of hx(t,o.protocols,kn(o)))this.stream.send(a)||await this.stream.onDrain({signal:s});let i=await fx(this.stream,{signal:s});if(i.status!==101)throw new Error("Invalid WebSocket handshake - response status "+i.status);await o.onHandshakeResponse?.(i,{signal:s}),this.protocol=i.headers.get("Sec-WebSocket-Protocol")??"",this.readyState=this.OPEN,this.dispatchEvent(new Event("open"));for await(let a of this.stream)this._push(a)}).catch(s=>{this._errored(s)})}_write(e,t){if(this.stream==null){t(new Error("WebSocket was not open"));return}this.stream.send(e)?t():this.stream.onDrain({signal:AbortSignal.timeout(this.drainTimeout)}).then(()=>{t()},n=>{t(n)})}_close(e,t){if(this.stream==null){t();return}if(e!=null){this.stream.abort(e),t();return}this.stream.close().catch(n=>{this.stream?.abort(n)}).finally(()=>{t()})}};var au="/http/1.1";var Up=Symbol.for("@libp2p/http/websocket-handler");var Ex=Ln(wx(),1),$p=class{log;cookies;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:http:cookies"),this.cookies=new Map}async prepareRequest(e,t){if((t.credentials??"same-origin")==="omit")return;let o=t.headers.get("origin");if(o==null||o==="null")return;let s=tu(e,t.headers),i=(this.cookies.get(s.hostname)??[]).filter(a=>!(a.expires!=null&&a.expires<Date.now()||a.path!=null&&!s.pathname.startsWith(a.path))).map(a=>`${a.name}=${a.value}`).join("; ");i.length>0&&t.headers.set("cookie",i)}async processResponse(e,t,n){if((t.credentials??"same-origin")==="omit"){bx(n);return}let s=t.headers.get("origin");if(s==null||s==="null")return;let i=tu(e,t.headers);for(let a of n.headers.getSetCookie()){let c=[...this.cookies.get(i.hostname)??[],...ZL(Ex.default.parse(a))];this.cookies.set(i.hostname,c)}bx(n)}};function bx(r){return r.headers.has("set-cookie")&&r.headers.delete("set-cookie"),r}function ZL(r){let e={},t=[];return Object.entries(r).forEach(([n,o])=>{n.toLowerCase()==="domain"&&o!=null&&(e.domain=o),n.toLowerCase()==="max-age"&&o!=null&&(e.expires=Date.now()+parseInt(o,10)*1e3),!JL.includes(n.toLowerCase())&&o!=null&&t.push({name:n,value:o})}),t.map(n=>({...n,...e}))}var JL=["domain","expires","httponly","max-age","partitioned","path","samesite","secure"];var Kp=class{async prepareRequest(e,t){if(t.headers.get("origin")!=null||t.mode==="no-cors")return;let n=tu(e,t.headers);t.headers.set("origin",`${n.protocol}//${n.host}`)}};function eD(r){return typeof r.init=="function"}function Vp(r,e){if(eD(r)){let t=r;return t.handler=r.init(e),delete t.init,t}return r}function xx(r){let e=Np(r.method,["GET"]);if(r.fallback==null&&e.filter(n=>n!=="GET").length>0)throw new A("WebSocket handlers only support the GET HTTP method");let t={...r,init:n=>{let o=Vp(r,n);return t[Up]=o.handler,async s=>{if(!Pp(s.method,s.headers))return r?.fallback!=null?r.fallback(s):new Pn(null,{status:400});let i=new TransformStream;try{let a=new Pn(i.readable,{status:101,headers:await $4(s.headers)}),c=new su(s,i.writable,r);return o.handler(c),a}catch{return new Pn(null,{status:500})}}}};return t}var Hp="/.well-known/libp2p/protocols";function vx(r){return xx({path:Hp,method:["GET"],cors:!0,handler:e=>{let t=JSON.stringify(r.getProtocolMap());e.send(t),e.close()},fallback:async e=>{let t=JSON.stringify(r.getProtocolMap());return new Response(t,{headers:{"Content-Type":"application/json","Content-Length":`${t.length}`}})}})}var qp=class{log;components;protocols;endpoint;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http:registrar"),this.protocols=[],this.onStream=this.onStream.bind(this),this.endpoint=t.server,this.handle("",vx(this))}async start(){await this.components.registrar.handle(au,this.onStream.bind(this))}async stop(){await this.components.registrar.unhandle(au)}async onStream(e,t){let n=await JE(e);if(this.canHandle(n)){this.log("handling incoming request %s %s",n.method,n.url);let o=await this.onRequest(XE(n,e));await QE(o,e),await e.close();return}if(this.endpoint==null){this.log("cannot handle incoming request %s %s and no endpoint configured",n.method,n.url),e.send(ZE),await e.close();return}this.log("passing incoming request %s %s to endpoint",n.method,n.url),this.endpoint.inject(n,e,t).catch(o=>{this.log.error("error injecting request to endpoint - %e",o),e.abort(o)})}canHandle(e){let t=F4(e).pathname;return this.protocols.find(n=>n.route.path===t)!=null?(this.log.trace("can handle %s",t),!0):(this.log.trace("cannot handle %s",t),!1)}async onRequest(e){this.log("incoming request %s %s",e.method,e.url);let t=this.findHandler(e.url);if(t==null)return new Response(null,{status:404});let n;return t.route.method.includes(e.method)?n=await t.route.handler(e):e.method==="OPTIONS"?n=new Response(null,{status:204}):n=new Response(null,{status:405}),tD(n,e,t),this.log("%s %s %d %s",e.method,e.url,n.status,n.statusText),n}onWebSocket(e){let t=this.findHandler(e.url);if(t!=null){let n=t.route[Up];if(n!=null){n(e);return}}e.close(ou.NORMAL_CLOSURE)}findHandler(e){let t=e.startsWith("/")?e:new URL(e).pathname;this.log("search for handler on path %s",t);let n=this.protocols.find(o=>o.route.path===t);return n!=null&&this.log("found handler for HTTP protocol %s on path %s",n.protocol,e),n}handle(e,t){if(t.path=t.path??e,this.protocols.find(n=>n.protocol===e)!=null)throw new A(`HTTP protocol handler for ${e} already registered`);(t.path===""||!t.path.startsWith("/"))&&(t.path=`/${t.path}`),t.cors=t.cors??!0,t.method=Np(t.method),t=Vp(t,this.components),this.protocols.push({protocol:e,route:t}),this.protocols.sort(({route:{path:n}},{route:{path:o}})=>o.length-n.length)}unhandle(e){this.protocols=this.protocols.filter(t=>t.protocol===e)}getProtocolMap(){let e={};for(let t of this.protocols)t.protocol!==""&&(e[t.protocol]={path:t.route.path});return e}};function tD(r,e,t){let n=[...new Set(["OPTIONS",...t.route.method])].join(", ");t.route.cors&&(e.headers.get("Access-Control-Request-Method")!=null&&r.headers.set("access-control-allow-methods",n),e.headers.get("Access-Control-Request-Headers")!=null&&r.headers.set("access-control-allow-headers",e.headers.get("Access-Control-Request-Headers")??""),e.headers.get("Origin")!=null&&(r.headers.set("access-control-allow-origin",e.headers.get("Origin")??""),r.headers.set("vary","Origin"))),e.method==="OPTIONS"&&r.headers.set("allow",n)}async function Sx(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function Ax(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function Ix(r,e,t){for(let n of e.middleware)await n.processResponse?.(r,e,t);return t}var Wp=class{log;components;httpRegistrar;origin;cookies;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http"),this.httpRegistrar=new qp(e,t),this.origin=new Kp,this.cookies=new $p(e,t)}[Symbol.toStringTag]="@libp2p/http";[me]=["@libp2p/http"];async start(){await at(this.httpRegistrar)}async stop(){await lt(this.httpRegistrar)}agent(...e){throw new Ga("This method is not supported in browsers")}dispatcher(...e){throw new Ga("This method is not supported in browsers")}async connect(e,t={}){let n=Fa(e),o=kn(t),s={...t,headers:o,method:"GET",middleware:t.middleware?.map(i=>i(this.components))??[]};return o.set("connection","upgrade"),o.set("upgrade","websocket"),Ax(n,s,async()=>{if(n instanceof URL){let c=new globalThis.WebSocket(n,t.protocols);return c.binaryType="arraybuffer",c}let{addresses:i,httpPath:a}=Dp(n);return new iu(i,new URL(`http://${Lp(n,s.headers)}${decodeURIComponent(a)}`),this.components.connectionManager,s)})}async fetch(e,t={}){let n=Fa(e),o={...t,headers:kn(t),method:"GET",middleware:[this.origin,this.cookies,...t.middleware?.map(i=>i(this.components))??[]]},s=await Sx(n,o,async()=>this.sendRequest(n,t));return Ix(n,o,s)}async connectProtocol(e,t,n){let o=await this.getProtocolPath(e,t,n),s=Fa(e,o);return this.connect(s,n)}async fetchProtocol(e,t,n={}){let o=await this.getProtocolPath(e,t,n),s=Fa(e,o);return this.fetch(s,n)}async getSupportedProtocols(e,t={}){let n=Fa(e,Hp),o=await this.fetch(n,{method:"GET",headers:{Accept:"application/json"},signal:t.signal});if(o.status!==200)throw new Error(`Unexpected status code: ${o.status}`);return o.json()}async getProtocolPath(e,t,n={}){let o=await this.getSupportedProtocols(e,n);if(o[t]==null)throw new Error(`Peer does not serve protocol: ${t}`);return o[t].path}canHandle(e){return this.httpRegistrar.canHandle(e)}async onRequest(e){return this.httpRegistrar.onRequest(e)}onWebSocket(e){this.httpRegistrar.onWebSocket(e)}handle(e,t){this.httpRegistrar.handle(e,t)}unhandle(e){this.httpRegistrar.unhandle(e)}getProtocolMap(){return this.httpRegistrar.getProtocolMap()}async sendRequest(e,t){if(e instanceof URL)return this.log("making request to %s with global fetch"),globalThis.fetch(e,t);this.log("making request to %s with libp2p fetch",e);let n=Lp(e,kn(t)),{addresses:o,httpPath:s}=Dp(e),a=await(await this.components.connectionManager.openConnection(o,{signal:t.signal??void 0})).newStream(au,{signal:t.signal??void 0});return ax(a,new URL(`http://${n}${decodeURIComponent(s)}`),t)}};function Tx(r={}){return e=>new Wp(e,r)}var _x="0.1.0";var Cx="id/push",kx="1.0.0",Px="1.0.0";var Qo;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 Ne('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 Ne('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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Qo||(Qo={}));var ar={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function Rx(r){if(r!=null&&r.length>0)try{return q(r)}catch{}}async function zp(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:q(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 vr.openAndCertify(c,Qt.DOMAIN),d=Qt.createFromProtobuf(l.payload),u=Jr(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=vr.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=C(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=C(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=>q(c)),observedAddr:o.observedAddr==null?void 0:q(o.observedAddr),protocols:o.protocols,signedPeerRecord:i,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var $a=class{host;components;protocol;started;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.components=e,this.log=t.log,this.timeout=t.timeout??ar.timeout,this.maxInboundStreams=t.maxInboundStreams??ar.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??ar.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??ar.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??ar.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??ar.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??ar.protocolPrefix}/${_x}`,agentVersion:e.nodeInfo.userAgent},this.handleProtocol=this.handleProtocol.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.peerStore.merge(this.components.peerId,{metadata:{AgentVersion:C(this.host.agentVersion),ProtocolVersion:C(this.host.protocolVersion)}}),await this.components.registrar.handle(this.protocol,this.handleProtocol,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}};var Gp=class extends $a{connectionManager;concurrency;_push;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${Cx}/${Px}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??ar.concurrency,this._push=Wn(this.sendPushMessage.bind(this),t.debounce??1e3),(t.runOnSelfUpdate??ar.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error("error pushing updates to peers - %e",o)})})}[me]=["@libp2p/identify-push"];async push(){this._push()}async sendPushMessage(){if(this.isStarted())try{let e=this.components.addressManager.getAddresses().map(d=>d.decapsulateCode(421)),t=new Qt({peerId:this.components.peerId,multiaddrs:e}),n=await vr.seal(t,this.components.privateKey),o=this.components.registrar.getProtocols(),s=await this.components.peerStore.get(this.components.peerId),i=R(s.metadata.get("AgentVersion")??C(this.host.agentVersion)),a=R(s.metadata.get("ProtocolVersion")??C(this.host.protocolVersion)),c=this;async function*l(){for(let d of c.connectionManager.getConnections())(await c.components.peerStore.get(d.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await d.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await Ue(f,{maxDataLength:c.maxMessageSize}).pb(Qo).write({listenAddrs:e.map(g=>g.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:i,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){f?.log.newScope("identify-push")?.error("could not push identify update to peer",p),f?.abort(p)}})}await er(io(l(),{concurrency:this.concurrency}))}catch(e){this.log.error("error pushing updates to peers - %e",e)}}async handleProtocol(e,t){let n=e.log.newScope("identify-push");if(this.components.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},i=await Ue(e,{maxDataLength:this.maxMessageSize}).pb(Qo).read(o);await e.close(o),await zp(this.components.peerStore,this.components.events,n,t,i),n.trace("handled push from %p",t.remotePeer)}};var Yp=class extends $a{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${"id"}/${kx}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??ar.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(()=>{})})}[me]=["@libp2p/identify"];async _identify(e,t={}){let n,o;if(t.signal==null){let s=AbortSignal.timeout(this.timeout);t={...t,signal:s}}this.log("run identify on new connection %a",e.remoteAddr);try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection}),o=n.log.newScope("identify");let s=Ue(n,{maxDataLength:this.maxMessageSize}).pb(Qo),i=await s.read(t);return await s.unwrap().unwrap().close(t),i}catch(s){throw o?.error("identify failed - %e",s),n?.abort(s),s}}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=Jr(a.toCID());if(!e.remotePeer.equals(c))throw new de("Identified peer does not match the expected peer");if(this.components.peerId.equals(c))throw new de("Identified peer is our own peer id?");return this.maybeAddObservedAddress(i),this.log("completed for peer %p and protocols %o",c,s),zp(this.components.peerStore,this.components.events,this.log,e,n)}maybeAddObservedAddress(e){let t=Rx(e);if(t==null||(this.log.trace("our observed address was %a",t),Qe(t)))return;let n=t.getComponents();if((n[0].code===41||n[0].code===42&&n[1].code===41)&&!dd(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Xs.exactMatch(t)||(this.log.trace("storing the observed address"),this.components.addressManager.addObservedAddr(t))}async handleProtocol(e,t){let n=e.log.newScope("identify");n("responding to identify");let o=AbortSignal.timeout(this.timeout);let s=await this.components.peerStore.get(this.components.peerId,{signal:o}),i=this.components.addressManager.getAddresses().map(d=>d.decapsulateCode(421)),a=s.peerRecordEnvelope;if(i.length>0&&a==null){let d=new Qt({peerId:this.components.peerId,multiaddrs:i});a=(await vr.seal(d,this.components.privateKey,{signal:o})).marshal().subarray()}let c=t.remoteAddr.bytes;N9.matches(t.remoteAddr)||(c=void 0);let l=Ue(e).pb(Qo);n("send response"),await l.write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:ft(this.components.privateKey.publicKey),listenAddrs:i.map(d=>d.bytes),signedPeerRecord:a,observedAddr:c,protocols:s.protocols},{signal:o}),n("close write"),await l.unwrap().unwrap().close({signal:o})}};function Lx(r={}){return e=>new Yp(e,r)}function Dx(r={}){return e=>new Gp(e,r)}var ai=1e3,W4=60*ai,jp=60*W4,Nx="/ipfs/kad/1.0.0",Xp=48*jp;var Ox=24*jp,Mx=10,Bx=16384,Ux=jp,z4=jp,khe=10*ai,Fx=10*ai;var Qp=20,Zo=10,$x=5*W4,Kx=ai,Vx=5*ai,Hx=5*W4,qx=30*ai,Wx=180*ai,G4=`${us}-kad-dht`;var cu;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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:ae(0),value:ae(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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(cu||(cu={}));function zx(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 Gx(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 Pt=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 cu.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:zx(this.timeReceived)}}static deserialize(e){let t=cu.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Gx(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 Jo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Zp=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},Jp=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Yx;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Yx||(Yx={}));var Ae;(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"})(Ae||(Ae={}));var e0;(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"})(e0||(e0={}));(function(r){r.codec=()=>We(e0)})(Ae||(Ae={}));var Va;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Va||(Va={}));var Y4;(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"})(Y4||(Y4={}));(function(r){r.codec=()=>We(Y4)})(Va||(Va={}));var Ka;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),Va.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:ae(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 Ne('Decode error - map field "multiaddrs" had too many elements');s.multiaddrs.push(t.bytes());break}case 3:{s.connection=Va.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ka||(Ka={}));var es;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&e0[t.type]!==0&&(n.uint32(8),Ae.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),Ka.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Ka.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={type:Ae.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=Ae.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 Ne('Decode error - map field "closer" had too many elements');s.closer.push(Ka.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 Ne('Decode error - map field "providers" had too many elements');s.providers.push(Ka.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(es||(es={}));function j4(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 lu(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 t0(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function sn(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function X4(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function uu(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function Q4(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function jx(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}function Xx(r,e,t){if(t.length===0)throw new A("No records given");let o=R(e).split("/");if(o.length<3)throw new A("Record key does not have a selector function");let s=r[o[1].toString()];if(s==null)throw new Jp(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:s(e,t)}function aD(r,e){return 0}var Qx={pk:aD};async function Ha(r,e,t){let n=e.key,s=R(n).split("/");if(s.length<3)return;let i=r[s[1].toString()];if(i==null)throw new A(`No validator available for key type "${s[1]}"`);await i(n,e.value,t)}var cD=async(r,e,t)=>{if(!(r instanceof Uint8Array))throw new A('"key" must be a Uint8Array');if(r.byteLength<5)throw new A("Invalid public key record");if(R(r.subarray(0,4))!=="/pk/")throw new A("key was not prefixed with /pk/");let o=tt(e),s=r.slice(4);if(!ee(s,o.toMultihash().bytes))throw new A("public key does not match passed in key")},Zx={pk:cD};var lD=C("/pk/");function Jx(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>!Qe(e))}}async function ts(r,e){let t=await ze.digest(r);return e?.signal?.throwIfAborted(),t.digest}async function cr(r,e){return ts(r.toMultihash().bytes,e)}function rs(r,e){return new Fe(`${r}/${R(e,"base32")}`,!1)}function ev(r){return Oe([lD,r.toMultihash().bytes])}function tv(r){return R(r.subarray(0,4))==="/pk/"}function rv(r){let e=ke(r.subarray(4));return Ze(e)}function Z4(r,e){let t=new Date;return new Pt(r,e,t).serialize()}function r0(r){let e=r.toString().split("/"),t=e.pop(),n=e.pop();if(t==null||n==null)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:G.createV1(Mn,ke(C(n,"base32"))),peerId:Me(t)}}function n0(r,e,t){let n=typeof e=="string"?e:R(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new Fe(o.join("/"))}function o0(r){return new Date(hr(r))}function ci(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),s=e.errorTime?.timer(t),i=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw i=!0,s?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),i||o?.()}}}function s0(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),s=e?.errorTime?.timer(t),i=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw i=!0,s?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),i||o?.()}}}var i0=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;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.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=s,this.queryManager=i,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e,t){this.log("getLocal %b",e);let n=rs(this.datastorePrefix,e);this.log("fetching record for key %k",n);let o=await this.components.datastore.get(n,t);this.log("found %k in local datastore",n);let s=Pt.deserialize(o);return await Ha(this.validators,s,t),s}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let s=Z4(e,n);for(let{value:i,from:a}of t){if(ee(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=rs(this.datastorePrefix,e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray(),o)}catch(d){this.log.error("failed error correcting self - %e",d)}continue}let c=!1,l={type:Ae.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&ee(d.record.value,Pt.deserialize(s).value)&&(c=!0),yield d;if(!c)throw new Jo("Could not send correction");this.log.error("failed error correcting entry")}}async*put(e,t,n){this.log("put key %b value %b",e,t);let o=Z4(e,t),s=rs(this.datastorePrefix,e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray(),n),yield*Yi(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),i=>Lr(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ae.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,path:a.path}))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&ee(d.record.value,Pt.deserialize(o).value)||c.push(sn({from:a.peer.id,error:new Jo("Value not put correctly"),path:d.path},n)));return c}),i=>io(i,{ordered:!1,concurrency:Zo}),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)){if(a.name==="VALUE"){n.push(a);continue}yield a}if(n.length===0)return;let o=n.map(a=>a.value),s=0;try{s=Xx(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 Le("Best value was not found");yield*this.sendCorrectionRecord(e,n,i,{...t,path:{index:-1,queued:0,running:0,total:0}}),yield n[s]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let s=await this.getLocal(e,t);yield uu({value:s.value,from:this.components.peerId,path:{index:-1,running:0,queued:0,total:0}},t)}catch(s){this.log("error getting local value for %b",e,s)}let n=this,o=async function*({peer:s,signal:i,path:a}){for await(let c of n.peerRouting.getValueOrPeers(s.id,e,{...t,signal:i,path:a}))yield c,c.name==="PEER_RESPONSE"&&c.record!=null&&(yield uu({from:s.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,o,t)}};function nv(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function du(r){if(r.id==null)throw new Error("Invalid peer in message");let e=ke(r.id);return{id:Ze(e),multiaddrs:(r.multiaddrs??[]).map(t=>q(t))}}var a0=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,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,d)=>(l.name==="PROVIDER"&&(d.providers??=[],d.providers.push(...l.providers.map(u=>u.id.toString()))),d)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,d)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(d.providers??=[],d.providers.push(l.from.toString())),d)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId,n);let s={type:Ae.ADD_PROVIDER,key:o,providers:[nv({id:this.components.peerId,multiaddrs:t})]},i=0,a=this;async function*c(u){try{a.log("sending provider record for %s to %p",e,u.peer.id);for await(let f of a.network.sendMessage(u.peer.id,s,{...n,path:u.path}))f.name==="PEER_RESPONSE"&&(a.log("sent provider record for %s to %p",e,u.peer.id),i++),yield f}catch(f){a.log.error("error sending provide record to peer %p - %e",u.peer.id,f),yield sn({from:u.peer.id,error:f,path:u.path},n)}}let l=vt({objectMode:!0}),d=new St({concurrency:Zo});d.addEventListener("idle",()=>{l.end()}),d.addEventListener("failure",u=>{this.log.error("error publishing provider record to peer - %e",u.detail.error)}),d.add(async()=>{let u=[];for await(let f of this.peerRouting.getClosestPeers(o,n))l.push(f),f.name==="FINAL_PEER"&&u.push(f);u.forEach(f=>{d.add(async()=>{for await(let h of c(f))l.push(h)}).catch(h=>{this.log.error("error publishing provider record to peer - %e",h)})})}).catch(u=>{l.end(u)}),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,t);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let f=await this.components.peerStore.get(u,t);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 lu({from:this.components.peerId,messageType:Ae.GET_PROVIDERS,providers:d,path:{index:-1,queued:0,running:0,total:0}},t),yield X4({from:this.components.peerId,providers:d,path:{index:-1,queued:0,running:0,total:0}},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u,path:f}){let h={type:Ae.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d.id,h,{...t,signal:u,path:f})},l=new xr(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 X4({from:d.from,providers:u,path:d.path},t),o+=u.length,o>=n))return}}};var c0=class extends ie{log;protocol;running;components;timeout;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=t.protocol,this.timeout=new Gr({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],s){return{...s,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((s,i)=>{o[`providers-${i}`]=s.id.toString()}),n.closer.length>0&&n.closer.forEach((s,i)=>{o[`closer-${i}`]=s.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],s){return{...s,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((s,i)=>{o[`providers-${i}`]=s.id.toString()}),n.closer.length>0&&n.closer.forEach((s,i)=>{o[`closer-${i}`]=s.id.toString()})),o)})??this.sendMessage}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 A("Message type was missing");let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield Q4({peer:e,path:n.path},n),s=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield j4({to:e,type:o,path:n.path},n);let a=await this._writeReadMessage(s,t,n);s.close(n).catch(c=>{this.log.error("error closing stream to %p - %e",e,c),s?.abort(c)}),yield lu({from:e,messageType:a.type,closer:a.closer.map(du),providers:a.providers.map(du),record:a.record==null?void 0:Pt.deserialize(a.record),path:n.path},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 sn({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async*sendMessage(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new A("Message type was missing");let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield Q4({peer:e,path:n.path},n),s=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield j4({to:e,type:o,path:n.path},n),await this._writeMessage(s,t,n),s.close(n).catch(a=>{this.log.error("error closing stream to %p - %e",e,a),s?.abort(a)}),yield lu({from:e,messageType:o,path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.abort(a),yield sn({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){await Ue(e).write(t,es,n)}async _writeReadMessage(e,t,n){let o=Ue(e);await o.write(t,es,n);let s=await o.read(es,n);return s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:du(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:du(i)})}),s}};function li(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 ns=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]}async add(e,t={index:-1,queued:0,running:0,total:0},n){let o=await cr(e.id,n);this.addWithKadId(e,o,t)}addWithKadId(e,t,n={index:-1,queued:0,running:0,total:0}){if(this.peerDistances.find(i=>i.peer.id.equals(e.id))!=null)return;let o={peer:e,distance:nn(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let i=this.peerDistances[this.peerDistances.length-1];if(i!=null&&li(o.distance,i.distance)!==-1)return}let s=!1;for(let i=0;i<this.peerDistances.length;i++){let a=li(this.peerDistances[i].distance,o.distance);if(a===0||a===1){s=!0,this.peerDistances.splice(i,0,o);break}}s||this.peerDistances.push(o),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e,t){if(this.length===0)return!0;let n=await cr(e,t),o=nn(n,this.originDhtKey),s=this.peerDistances[this.peerDistances.length-1].distance;return li(o,s)===-1}async anyCloser(e,t){return e.length===0?!1:Promise.any(e.map(async n=>this.isCloser(n,t)))}};var l0=class{log;routingTable;network;validators;queryManager;components;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e,t){let n,o=await this.routingTable.find(e,t);if(o!=null){this.log("findPeerLocal found %p in routing table",e);try{n=await this.components.peerStore.get(o,t)}catch(s){if(s.name!=="NotFoundError")throw s}}if(n==null)try{n=await this.components.peerStore.get(e,t)}catch(s){if(s.name!=="NotFoundError")throw s}if(n!=null)return this.log("findPeerLocal found %p in peer store",e),{id:n.id,multiaddrs:n.addresses.map(s=>s.multiaddr)}}async*_getValueSingle(e,t,n){let o={type:Ae.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=ev(e),o={index:-1,queued:0,running:0,total:0};for await(let s of this._getValueSingle(e,n,{...t,path:o}))if(yield s,s.name==="PEER_RESPONSE"&&s.record!=null){let i=tt(s.record.value),a=xn(i);if(!a.equals(e))throw new Nn("public key does not match id");if(a.publicKey==null)throw new Nn("public key missing");yield uu({from:e,value:s.record.value,path:o},t)}throw new Jo(`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,t);if(o!=null){this.log("found local"),yield t0({from:this.components.peerId,peer:o,path:{index:-1,queued:0,running:0,total:0}},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,s=async function*({peer:i,signal:a,path:c}){let l={type:Ae.FIND_NODE,key:e.toMultihash().bytes};for await(let d of o.network.sendRequest(i.id,l,{...t,signal:a,path:c}))if(yield d,d.name==="PEER_RESPONSE"){let u=d.closer.find(f=>f.id.equals(e));u!=null&&(yield t0({from:d.from,peer:u,path:d.path},t))}};for await(let i of this.queryManager.run(e.toMultihash().bytes,s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}if(!n)throw new Le("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await ts(e,t),o=new ns(n,this.routingTable.kBucketSize),s=this,i=async function*({peer:a,path:c,peerKadId:l,signal:d}){s.log("getClosestPeers asking %p",a.id);let u={type:Ae.FIND_NODE,key:e};yield*s.network.sendRequest(a.id,u,{...t,signal:d,path:c}),o.addWithKadId(a,l,c)};yield*this.queryManager.run(e,i,t),this.log("found %d peers close to %b",o.length,e);for(let{peer:a,path:c}of o.peers)try{if(a.multiaddrs.length===0&&(a=await s.components.peerStore.getInfo(a.id,t)),a.multiaddrs.length===0)continue;yield t0({from:this.components.peerId,peer:await s.components.peerStore.getInfo(a.id,t),path:{index:c.index,queued:0,running:0,total:0}},t)}catch{continue}}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,n)}catch{let i="invalid record received, discarded";this.log(i),yield sn({from:o.from,error:new Jo(i),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e,t){if(e.timeReceived==null)throw new Zp("invalid record received");await Ha(this.validators,new Pt(e.key,e.value,e.timeReceived),t)}async getClosestPeersOffline(e,t){let n=[];try{let i=ke(e),a=Ze(i),c=await this.components.peerStore.get(a,t);n.push({id:c.id,multiaddrs:c.addresses.map(({multiaddr:l})=>l)})}catch{}let o=await ts(e,t),s=this.routingTable.closestPeers(o,t);for(let i of s)try{n.push(await this.components.peerStore.getInfo(i,t))}catch(a){if(a.name!=="NotFoundError")throw a}return n.length>0?this.log("getClosestPeersOffline returning the %d closest peer(s) we know to %b",n.length,e):this.log("getClosestPeersOffline could not any peers close to %b with %d peers in the routing table",e,this.routingTable.size),n}};var u0=class{log;datastore;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore}async addProvider(e,t,n){this.log.trace("%p provides %s",t,e),await this.writeProviderEntry(e,t,n)}async removeProvider(e,t,n){let o=n0(this.datastorePrefix,e,t);this.log.trace("%p no longer provides %s",t,e),await this.datastore.delete(o,n)}async getProviders(e,t){this.log.trace("get providers for %c",e);let n=await this.loadProviders(e,t);return this.log.trace("got %d providers for %c",n.size,e),[...n.keys()]}async writeProviderEntry(e,t,n){let o=n0(this.datastorePrefix,e,t),s=Mt(n?.time?.getTime()??Date.now());await this.datastore.put(o,s,n)}async loadProviders(e,t){let n=new Ut,o=n0(this.datastorePrefix,e);for await(let s of this.datastore.query({prefix:o.toString()},t)){let{peerId:i}=r0(s.key);n.set(i,o0(s.value))}return n}};var dD=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 fD(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!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}=dD(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function ov(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=fD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}async function*sv(r){let{key:e,startingPeers:t,ourPeerId:n,query:o,alpha:s,path:i,numPaths:a,log:c,peersSeen:l,connectionManager:d,signal:u}=r,f=vt({objectMode:!0}),h=new St({concurrency:s,sort:(g,m)=>li(g.options.distance,m.options.distance)});h.addEventListener("idle",()=>{f.push(jx({path:{index:i,queued:h.queued,running:h.running,total:h.size}},r)),f.end()}),h.addEventListener("failure",g=>{c.error("error during query - %e",g.detail.error)});let p=()=>{h.abort(),f.end(new Vt)};u.addEventListener("abort",p);try{let m=function(w,T){if(w==null)return;l.add(w.id.toMultihash().bytes);let I=nn(T,g);h.add(async()=>{try{for await(let D of o({...r,key:e,peer:w,path:{index:i,queued:h.queued,running:h.running,total:h.size},numPaths:a,peerKadId:T,signal:u})){if(D.name==="PEER_RESPONSE")for(let F of D.closer){if(l.has(F.id.toMultihash().bytes)){c("already seen %p in query",F.id);continue}if(n.equals(F.id)){c("not querying ourselves");continue}if(!await d.isDialable(F.multiaddrs)){c("not querying undialable peer");continue}let $=await cr(F.id,{signal:u}),z=nn($,g);if(li(z,I)!==-1){c("skipping %p as they are not closer to %b than %p",F.id,e,w.id);continue}c("querying closer peer %p",F.id),m(F,$)}f.push({...D,path:{index:i,queued:h.queued,running:h.running,total:h.size}})}}catch(D){f.push(sn({from:w.id,error:D,path:{index:i,queued:h.queued,running:h.running-1,total:h.size-1}},r))}},{distance:I}).catch(D=>{c.error("error during query - %e",D)})},g=await ts(e,{signal:u});await Promise.all(t.map(async w=>{m({id:w,multiaddrs:[]},await cr(w,{signal:u}))})),yield*f}finally{u.removeEventListener("abort",p)}}var d0=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??Qp,this.alpha=t.alpha??Zo,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.allowQueryWithZeroPeers=t.allowQueryWithZeroPeers??!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(Wx);n={...n,signal:c}}let o=new AbortController,s=le([this.shutDownController.signal,o.signal,n.signal]);o.signal;let i=this.logger.forComponent(`${this.logPrefix}:query:`+R(e,"base58btc")),a=!1;try{this.routingTable.size===0&&!this.allowQueryWithZeroPeers&&(i("routing table was empty, waiting for some peers before running%s query",n.isSelfQuery===!0?" self":""),await ov(this.routingTable,"peer:add",{signal:s,filter:h=>!this.peerId.equals(h.detail)}),i("routing table has peers, continuing with%s query",n.isSelfQuery===!0?" self":"")),n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(i("waiting for initial self query before continuing"),await Pe(this.initialQuerySelfHasRun.promise,s),this.initialQuerySelfHasRun=void 0),i("query:start");let c=await ts(e,{signal:s}),l=this.routingTable.closestPeers(c,{count:this.routingTable.kBucketSize}),d=l.sort(()=>Math.random()>.5?1:-1).reduce((h,p,g)=>(h[g%this.disjointPaths].push(p),h),new Array(this.disjointPaths).fill(0).map(()=>[])).filter(h=>h.length>0);if(l.length===0){i.error("running query with no peers");return}let u=Et(1024),f=d.map((h,p)=>sv({...n,key:e,startingPeers:h,ourPeerId:this.peerId,signal:s,query:t,path:p,numPaths:d.length,alpha:this.alpha,log:i,peersSeen:u,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of jt(...f)){if(h.name==="QUERY_ERROR"&&i.error("query error - %e",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs,{signal:s})&&await this.routingTable.add(p.id,{signal:s});s.throwIfAborted(),yield h}a=!0}catch(c){if(this.running)throw c}finally{a||(i("query exited early"),o.abort()),s.clear(),i("query finished")}}};function hD(r){return r[Symbol.asyncIterator]!=null}function pD(r){if(hD(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 f0=pD;var h0=class{log;peerId;peerRouting;events;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.events=e.events,this.running=!1,this.peerRouting=t.peerRouting,this.count=t.count??Qp,this.interval=t.interval??$x,this.initialInterval=t.initialInterval??Kx,this.queryTimeout=t.queryTimeout??Vx,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=s0(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){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=fe(),this.running){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);e.push(n)}let t=le(e);this.controller.signal;try{this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Yi(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>Ho(i,this.count),async i=>f0(i));t?.throwIfAborted();let s=Date.now()-n;this.log("self-query found %d peers in %dms",o,s),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:o,duration:s}}))}catch(n){this.log.error("self-query error - %e",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.interval))}};var p0=class extends ie{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new St({concurrency:t.concurrency??Mx,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Gr({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_timeout_milliseconds`}),this.datastore=e.datastore,this.addressManager=e.addressManager,this.datastorePrefix=`${t.datastorePrefix}/provider`,this.reprovideThreshold=t.threshold??Ox,this.maxQueueSize=t.maxQueueSize??Bx,this.validity=t.validity??Xp,this.interval=t.interval??Ux,this.contentRouting=t.contentRouting,this.running=!1,this.reprovide=s0(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(z4)}).catch(e=>{this.log.error("error running process to reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async processRecords(e){try{this.safeDispatchEvent("reprovide:start"),this.log("starting reprovide/cleanup");for await(let t of this.datastore.query({prefix:this.datastorePrefix},e))try{let{cid:n,peerId:o}=r0(t.key),i=o0(t.value).getTime()+this.validity,a=Date.now(),c=a>i,l=this.peerId.equals(o);this.log.trace("comparing: %d (now) < %d (expires) = %s %s",a,i,c,c?"(expired)":"(valid)"),c&&!l&&await this.datastore.delete(t.key,e),this.shouldReprovide(l,i)&&(this.log("reproviding %c as it is within the reprovide threshold (%d)",n,this.reprovideThreshold),this.queueReprovide(n).catch(d=>{this.log.error("could not reprovide %c - %e",n,d)}))}catch(n){this.log.error("error processing datastore key %s - %s",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{this.safeDispatchEvent("reprovide:end"),this.running&&(this.log("queuing next re-provide/cleanup run in %d ms",this.interval),this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(z4)}).catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}shouldReprovide(e,t){if(!e)return!1;let n=Date.now();return t<n?!0:t-n<this.reprovideThreshold}async queueReprovide(e,t){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize,t);let n=this.reprovideQueue.queue.find(o=>o.options.cid.equals(e));if(n!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),n.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async o=>{if(o.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let s=this.reprovideTimeout.getTimeoutSignal(o);try{await this.reprovide(o.cid,o)}finally{this.reprovideTimeout.cleanUp(s)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(o=>{this.log.error("could not re-provide key %c - %e",e,o)})}async reprovide(e,t){await er(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var mD=20,gD=5e3,yD="kad-close",wD=50,m0=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;running;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??gD,this.peerSetSize=t.peerSetSize??mD,this.closeTagName=t.closeTagName??yD,this.closeTagValue=t.closeTagValue??wD,this.closestPeers=new xr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await cr(this.components.peerId);this.newPeers=new ns(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.running=!1,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 xr(this.newPeers?.peers.map(({peer: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},[G4]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[G4]:void 0}})})])}};function fu(r){return Array.isArray(r?.peers)}var g0=class{peerId;root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e,t){this.peerId=e.peerId,this.prefixLength=t.prefixLength??iv,this.kBucketSize=t.kBucketSize??hu,this.splitThreshold=t.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=t.numberOfOldContactsToPing??av,this.lastPingThreshold=t.lastPingThreshold??cv,this.ping=t.ping,this.verify=t.verify,this.onAdd=t.onAdd,this.onRemove=t.onRemove,this.addingPeerMap=eo({name:`${t.metricsPrefix}_adding_peer_map`,metrics:e.metrics}),this.root={prefix:"",depth:0,peers:[]}}async start(){await this.addSelfPeer(this.peerId)}stop(){this.addingPeerMap.clear(),this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e,t){this.localPeer={peerId:e,kadId:await cr(e,t),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await cr(e,t),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,t),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!ED(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n,t);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,t);s&&await this._add(e,t)}*closest(e,t){let n=new ns(e,t?.count??this.kBucketSize);for(let o of this.toIterable())t?.exclude?.some(s=>s.equals(o.peerId))!==!0&&n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Lr(n.peers,({peer:o})=>o.id)}count(){function e(t){if(fu(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,t){let n=this._determineBucket(e),o=this._indexOf(n,e);if(o>-1){let s=n.peers.splice(o,1)[0];await this.onRemove?.(s,n,t)}}*toIterable(){function*e(t){if(fu(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+R(nn(e,t),"base16"))}_determineBucket(e){let t=R(e,"base2");function n(o,s=0){return fu(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=>ee(n.kadId,t))}async _split(e,t){let n={prefix:"0",depth:e.depth+1,peers:[]},o={prefix:"1",depth:e.depth+1,peers:[]};for(let s of e.peers)R(s.kadId,"base2")[e.depth]==="0"?(n.peers.push(s),await this.onMove?.(s,e,n,t)):(o.peers.push(s),await this.onMove?.(s,e,o,t));bD(e,n,o)}};function bD(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function ED(r,e){return r.lastPing<Date.now()-e}var hu=20,iv=6;var xD=20,vD=100,av=3;var SD=20,AD=100,lv="kad-peer",ID=1,cv=6e5,TD=!0,_D=1e3,y0=class extends ie{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;shutdownController;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??hu,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??lv,this.peerTagValue=t.peerTagValue??ID,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??TD,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??_D,this.shutdownController=new AbortController,this.shutdownController.signal,this.pingOldContactQueue=new It({concurrency:t.pingOldContactConcurrency??SD,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??AD}),this.pingOldContactTimeout=new Gr({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new It({concurrency:t.pingNewContactConcurrency??xD,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??vD}),this.pingNewContactTimeout=new Gr({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new g0(e,{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,metricsPrefix:t.metricsPrefix}),this.closestPeerTagger=new m0(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.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,await at(this.closestPeerTagger,this.kb))}async afterStart(){let e=0;Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let t=le([this.shutdownController.signal,AbortSignal.timeout(2e4)]);try{for(let n of await this.components.peerStore.all({filters:[o=>o.protocols.includes(this.protocol)&&o.tags.has(lv)],limit:this.populateFromDatastoreLimit,signal:t})){if(!this.running)return;try{await this.add(n.id,{signal:t}),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(n.id,{tags:{[this.peerTagName]:void 0}})}}}finally{t.clear()}this.log("added %d peer store peers to the routing table",e)}).catch(t=>{this.log.error("error adding %d, peer store peers to the routing table - %e",e,t)})}async stop(){this.running=!1,await lt(this.closestPeerTagger,this.kb),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort(),this.shutdownController.abort()}async peerAdded(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}},n),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=le([c,this.shutdownController.signal,a?.signal]);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 io(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=le([n,this.shutdownController.signal,t?.signal]);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{return this.log("pinging contact %p",e.peerId),await this.components.ping.ping(e.peerId,t),this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0}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,t){let n=await cr(e,t);return this.kb.get(n)?.peerId}closestPeer(e){let t=this.closestPeers(e,{count:1});if(t.length>0)return t[0]}closestPeers(e,t){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,t){if(this.kb==null)throw new Error("RoutingTable is not started");let n=await cr(e,t);await this.kb.remove(n,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(fu(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 uv=[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 w0=15,b0=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??Hx,this.refreshQueryTimeout=i??qx,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,t){this.log("refreshing routing table");let n=this._maxCommonPrefix(),o=this._getTrackedCommonPrefixLengthsForRefresh(n);this.log(`max common prefix length ${n}`),this.log(`tracked CPLs [ ${o.map(s=>s.toISOString()).join(", ")} ]`),Promise.all(o.map(async(s,i)=>{try{if(await this._refreshCommonPrefixLength(i,s,e,t),this._numPeersForCpl(n)===0){let a=Math.min(2*(i+1),o.length-1);for(let c=i+1;c<a+1;c++)try{await this._refreshCommonPrefixLength(c,s,e,t)}catch(l){this.log.error("failed to refresh entries with common prefix length %d - %e",c,l)}}}catch(a){this.log.error("failed to refresh entries with common prefix length - %e",a)}})).catch(s=>{this.log.error("failed to refresh table - %e",s)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(s=>{this.log.error("failed to set refresh timeout - %e",s)})}async _refreshCommonPrefixLength(e,t,n,o){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 s=this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,s,this.routingTable.size);let i=le([o?.signal,AbortSignal.timeout(this.refreshQueryTimeout)]);try{let a=await f0(this.peerRouting.getClosestPeers(s.toMultihash().bytes,{signal:i}));this.log(`found ${a} peers that were close to imaginary peer %p`,s),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,s,this.routingTable.size)}finally{i.clear()}}_getTrackedCommonPrefixLengthsForRefresh(e){e>w0&&(e=w0);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}_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=Yt(2),n=(t[1]<<8)+t[0],o=this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),s=ke(o);return Ze(s)}_makePeerId(e,t,n){if(n>w0)throw new Error(`Cannot generate peer ID for common prefix length greater than ${w0}`);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=uv[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,ze.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=nn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var E0=class{peerId;providers;peerStore;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.peerId=e.peerId,this.providers=t.providers,this.peerStore=e.peerStore}async handle(e,t){if(t.key==null||t.key.length===0)throw new de("Missing key");let n;try{n=G.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, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let s=ke(o.id),i=Ze(s),a=o.multiaddrs.map(c=>q(c));if(!e.equals(i)){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,a),await this.providers.addProvider(n,i),await this.peerStore.merge(i,{multiaddrs:a})}))}};var x0=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){this.log("incoming request from %p for peers close to %b",e,t.key);try{if(t.key==null)throw new de("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getClosestPeersOffline(t.key,{exclude:[e,this.peerId]});ee(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(421))});let o={type:Ae.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 for %p",t.key,e):this.log("found %d peers close to %b for %p",o.closer.length,t.key,e),o}catch(n){throw this.log("error during finding peers closer to %b for %p - %e",t.key,e,n),n}}};var v0=class{peerId;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.peerId=e.peerId,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=G.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([no(Lr(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:d})=>d)}})),this.peerRouting.getClosestPeersOffline(t.key)]),i={type:Ae.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:s.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",i.providers.length,i.closer.length),i}async _getAddresses(e){return[]}};var S0=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,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:Ae.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(tv(n)){this.log("is public key");let a=rv(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Le("No public key found in key book");c=ft(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new Pt(n,c,new Date).serialize(),o}let[s,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getClosestPeersOffline(n)]);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=rs(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(s){if(s.name==="NotFoundError")return;throw s}let o=Pt.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>Xp){await this.datastore.delete(t);return}return o}};var A0=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 I0=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,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)throw this.log.error("empty record from %p",e),new de(`Empty record from: ${e}`);try{let o=Pt.deserialize(t.record);await Ha(this.validators,o),o.timeReceived=new Date;let s=rs(this.datastorePrefix,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 T0=class{handlers;log;metrics;incomingMessageTimeout;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`),rpcTime:e.metrics?.registerMetricGroup(`${t.metricsPrefix}_inbound_rpc_time_seconds`,{label:"operation"})},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.incomingMessageTimeout=t.incomingMessageTimeout??1e4,this.handlers={[Ae.GET_VALUE.toString()]:new S0(e,t),[Ae.PUT_VALUE.toString()]:new I0(e,t),[Ae.FIND_NODE.toString()]:new x0(e,t),[Ae.ADD_PROVIDER.toString()]:new E0(e,t),[Ae.GET_PROVIDERS.toString()]:new v0(e,t),[Ae.PING.toString()]:new A0(e,t)}}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})}}async onIncomingStream(e,t){let n=()=>{e.abort(new un)},o=AbortSignal.timeout(this.incomingMessageTimeout);o.addEventListener("abort",n);let s=Ue(e).pb(es);for(;;){if(e.readStatus!=="readable"){await e.close({signal:o});break}let i=await s.read({signal:o}),a=this.metrics?.rpcTime?.timer(i.type.toString()),c=this.metrics?.rpcTime?.timer(i.type.toString()),l=!1;try{this.log("incoming %s from %p",i.type,t.remotePeer);let d=await this.handleMessage(t.remotePeer,i);d!=null&&await s.write(d,{signal:o})}catch(d){throw l=!0,c?.(),d}finally{l||a?.()}o.removeEventListener("abort",n),o=AbortSignal.timeout(this.incomingMessageTimeout),o.addEventListener("abort",n)}}};var _0=class extends ie{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 J4=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await er(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers.map(o=>({...o,routing:"kad-dht"})))}async put(e,t,n){await er(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 Le("Could not find value for key")}},e6=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 Le("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},CD=32,kD=64,C0=class extends ie{k;a;d;protocol;routingTable;providers;network;peerRouting;components;log;running;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;onPeerConnectTimeout;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",s=t.metricsPrefix??"libp2p_kad_dht",i={queries:e.metrics?.registerMetricGroup(`${s}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${s}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${s}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${s}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.k=t.kBucketSize??hu,this.a=t.alpha??Zo,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??Nx,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??CD,this.maxOutboundStreams=t.maxOutboundStreams??kD,this.peerInfoMapper=t.peerInfoMapper??Jx,this.onPeerConnectTimeout=t.onPeerConnectTimeout??Fx,this.providers=new u0(e,{...t.providers,logPrefix:n,datastorePrefix:o}),this.validators={...Zx,...t.validators},this.selectors={...Qx,...t.selectors},this.network=new c0(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:s}),this.routingTable=new y0(e,{kBucketSize:this.k,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:s,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let a=fe();t.allowQueryWithZeroPeers===!0&&a.resolve(),this.queryManager=new d0(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:s,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new l0(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new i0(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new a0(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new b0(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new T0(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:s,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new _0(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new h0(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:i}),this.reprovider=new p0(e,{...t.reprovide,logPrefix:n,metricsPrefix:s,datastorePrefix:o,contentRouting:this.contentRouting,operationMetrics:i}),this.network.addEventListener("peer",c=>{let l=c.detail;this.onPeerConnect(l).catch(d=>{this.log.error("could not add %p to routing table - %e",l.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:l}))}),this.topologyListener.addEventListener("peer",c=>{let l=c.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(l),u={id:l,multiaddrs:d.addresses.map(({multiaddr:f})=>f),protocols:d.protocols};await this.onPeerConnect(u)}).catch(d=>{this.log.error("could not add %p to routing table - %e",l,d)})}),this.dhtPeerRouting=new e6(this),this.dhtContentRouting=new J4(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",c=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let l=c.detail.peer.addresses.some(({multiaddr:u})=>!Qe(u)&&!yt.exactMatch(u)),d=this.getMode();l&&d==="client"?await this.setMode("server"):d==="server"&&!l&&await this.setMode("client")}).catch(l=>{this.log.error("error setting dht server mode - %e",l)})}),this.get=ci(this.get.bind(this),i,"GET_VALUE"),this.findProviders=ci(this.findProviders.bind(this),i,"FIND_PROVIDERS"),this.findPeer=ci(this.findPeer.bind(this),i,"FIND_PEER"),this.getClosestPeers=ci(this.getClosestPeers.bind(this),i,"GET_CLOSEST_PEERS"),this.provide=ci(this.provide.bind(this),i,"PROVIDE"),this.put=ci(this.put.bind(this),i,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[me]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery","@libp2p/kad-dht"];[ur]=["@libp2p/identify","@libp2p/ping"];get[Dn](){return this.dhtContentRouting}get[On](){return this.dhtPeerRouting}get[ls](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id,e.multiaddrs),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(n=>n.toString()));return}let t=AbortSignal.timeout(this.onPeerConnectTimeout);try{await this.routingTable.add(e.id,{signal:t})}catch(n){this.log.error("could not add %p to routing table - %e",e.id,n)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t){if(e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol,t),e===this.getMode()&&t?.force!==!0){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),{signal:t?.signal,maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",{force:!0}),await at(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await at(this.querySelf))}async stop(){this.running=!1,await lt(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}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 cancelReprovide(e,t){await this.providers.removeProvider(e,this.components.peerId,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(e){this.routingTableRefresh.refreshTable(!0,e)}};var dv;(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",r[r.PATH_ENDED=8]="PATH_ENDED"})(dv||(dv={}));function fv(r={}){return e=>new C0(e,r)}var Ie;(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"})(Ie||(Ie={}));var pu=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),t6=Object.freeze({NEW_STREAM:Ie.NEW_STREAM,MESSAGE:Ie.MESSAGE_INITIATOR,CLOSE:Ie.CLOSE_INITIATOR,RESET:Ie.RESET_INITIATOR}),hv=Object.freeze({MESSAGE:Ie.MESSAGE_RECEIVER,CLOSE:Ie.CLOSE_RECEIVER,RESET:Ie.RESET_RECEIVER});var mu=1<<20,r6=4<<20,k0=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=mu,t=r6){this._buffer=new X,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===Ie.NEW_STREAM||o===Ie.MESSAGE_INITIATOR||o===Ie.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}=mv(e),{value:o,offset:s}=mv(e,n),i=t&7;if(pu[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}}},PD=128,pv=127;function mv(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&pv)<<n:(s&pv)*Math.pow(2,n),n+=7}while(s>=PD);return e=o-e,{value:t,offset:e}}var n6=10*1024,o6=class{_pool;_poolOffset;constructor(){this._pool=Ge(n6),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Mt(e.id<<3|e.type,n,o),o+=he(e.id<<3|e.type),(e.type===Ie.NEW_STREAM||e.type===Ie.MESSAGE_INITIATOR||e.type===Ie.MESSAGE_RECEIVER)&&e.data!=null?(Mt(e.data.length,n,o),o+=he(e.data.length)):(Mt(0,n,o),o+=he(0));let s=n.subarray(this._poolOffset,o);n6-o<100?(this._pool=Ge(n6),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===Ie.NEW_STREAM||e.type===Ie.MESSAGE_INITIATOR||e.type===Ie.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},RD=new o6;function gu(r){let e=new X;return RD.write(r,e),e}var s6=class extends Bo{streamId;types;maxDataSize;muxer;constructor(e){super(e),this.types=e.direction==="outbound"?t6:hv,this.maxDataSize=e.maxDataSize,this.muxer=e.muxer,this.streamId=parseInt(this.id.substring(1)),e.direction==="outbound"&&queueMicrotask(()=>{this.muxer.send(gu({id:this.streamId,type:t6.NEW_STREAM,data:new X(C(this.id))}))})}sendData(e){let t=new X,n=e.byteLength;for(;e.byteLength>0;){let o=Math.min(e.byteLength,this.maxDataSize),s=e.sublist(0,o);e=e.sublist(o),t.append(gu({id:this.streamId,type:this.types.MESSAGE,data:s}))}return{sentBytes:n,canSendMore:this.muxer.send(t)}}sendReset(){return this.muxer.send(gu({id:this.streamId,type:this.types.RESET}))}async sendCloseWrite(e){this.muxer.send(gu({id:this.streamId,type:this.types.CLOSE})),e?.signal?.throwIfAborted()}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}};function gv(r){let{id:e,muxer:t,direction:n,maxMsgSize:o=mu}=r;return new s6({...r,id:n==="outbound"?`i${e}`:`r${e}`,direction:n,maxDataSize:o,muxer:t,log:r.log.newScope(`${n}:${e}`),protocol:""})}var LD=5;function DD(r){let e={...r,type:`${pu[r.type]} (${r.type})`};return r.type===Ie.NEW_STREAM&&(e.data=R(r.data.subarray())),(r.type===Ie.MESSAGE_INITIATOR||r.type===Ie.MESSAGE_RECEIVER)&&(e.data=R(r.data.subarray(),"base16")),e}var P0=class extends Mo{_streamId;rateLimiter;maxMessageSize;maxUnprocessedMessageQueueSize;decoder;constructor(e,t){super(e,{...t,protocol:"/mplex/6.7.0",name:"mplex"}),this._streamId=0,this.maxMessageSize=t.maxMessageSize??mu,this.maxUnprocessedMessageQueueSize=t.maxUnprocessedMessageQueueSize??r6,this.decoder=new k0(this.maxMessageSize,this.maxUnprocessedMessageQueueSize),this.rateLimiter=new na({points:t.disconnectThreshold??LD,duration:1})}onData(e){for(let t of this.decoder.write(e))this.handleMessage(t)}onCreateStream(e){if(this.status!=="open")throw new Br("Muxer already closed");let t=this._streamId++;return this._newStream(t,"outbound",e)}_newStream(e,t,n){return this.log("new %s stream %s",t,e),gv({...n,id:e,direction:t,maxMsgSize:this.maxMessageSize,log:this.log,muxer:this})}handleMessage(e){if(this.log.enabled&&this.log.trace("incoming message",DD(e)),e.type===Ie.NEW_STREAM){try{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}let o=this._newStream(e.id,"inbound",this.streamOptions);this.onRemoteStream(o);return}let t=`${(e.type&1)===1?"i":"r"}${e.id}`,n=this.streams.find(o=>o.id===t);if(n==null){this.log("missing stream %s for message type %s",t,pu[e.type]);try{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}try{switch(e.type){case Ie.MESSAGE_INITIATOR:case Ie.MESSAGE_RECEIVER:n.onData(e.data);break;case Ie.CLOSE_INITIATOR:case Ie.CLOSE_RECEIVER:n.onRemoteCloseWrite();break;case Ie.RESET_INITIATOR:case Ie.RESET_RECEIVER:n.onRemoteReset();break;default:this.log("unknown message type")}}catch(o){this.log.error("error while processing message - %e",o),n.abort(o)}}};var i6=class{protocol="/mplex/6.7.0";_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@libp2p/mplex";[me]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new P0(e,{...this._init})}};function yv(r={}){return()=>new i6(r)}var ND=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 OD(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!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}=ND(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function wv(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=OD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var bv="1.0.0",Ev="ping",xv="ipfs";var R0=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;constructor(e,t={}){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??xv}/${Ev}/${bv}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handlePing=this.handlePing.bind(this)}[Symbol.toStringTag]="@libp2p/ping";[me]=["@libp2p/ping"];async start(){await this.components.registrar.handle(this.protocol,this.handlePing,{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}async handlePing(e,t){let n=e.log.newScope("ping");n.trace("ping from %p",t.remotePeer);let o=AbortSignal.timeout(this.timeout);o.addEventListener("abort",()=>{e.abort(new un("Ping timed out"))});let s=Date.now();for await(let i of e){if(e.status!=="open"){n("stream status changed to %s",e.status);break}e.send(i)||(n("waiting for stream to drain"),await wv(e,"drain",{rejectionEvents:["close"],signal:o}),n("stream drained"))}n("ping from %p complete in %dms",t.remotePeer,Date.now()-s),await e.close({signal:o})}async ping(e,t={}){let n=Yt(32),o=await this.components.connectionManager.openStream(e,this.protocol,{runOnLimitedConnection:this.runOnLimitedConnection,...t}),s=o.log.newScope("ping");try{let i=Date.now(),a=Promise.withResolvers(),c=new X,l=d=>{if(c.append(d.data),c.byteLength===32){o.removeEventListener("message",l);let u=Date.now()-i;Promise.all([o.closeRead(t)]).then(()=>{if(ee(n,c.subarray()))a.resolve(u);else throw new as(`Received wrong ping ack after ${u}ms`)}).catch(f=>{o.abort(f),a.reject(f)})}};return o.addEventListener("message",l),o.send(n),await o.close(t),await Pe(a.promise,t.signal)}catch(i){throw s.error("error while pinging %o - %e",e,i),o?.abort(i),i}finally{o?.close()}}};function Sv(r={}){return e=>new R0(e,r)}var Kt;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),(function(o){o.codec=()=>We(t)})(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=ne((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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(Kt||(Kt={}));var Av=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],a6=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),Iv="libp2p+webrtc+v1/",Tv=2*1024*1024,qa=16*1024;function FD(r=qa){let e=he(r-he(r)),t=1+he(Object.keys(Kt.Flag).length-1),n=1,o=r-e-t-n,s=he(o);return e+t+n+s}var _v=FD();var Cv=1e4,c6="/webrtc",yu="/webrtc-signaling/0.0.1";var $D=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 KD(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!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}=$D(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function wo(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=KD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var kv=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))},VD=(function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r})();var HD=(function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r})();var qD=(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 WD=(function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r})();var zD=(function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r})();var GD=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,YD=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,Pv=3,jD=[["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",GD]],Rv=[["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 Dv(r){return r?Lv(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new zD:typeof navigator<"u"?Lv(navigator.userAgent):ZD()}function XD(r){return r!==""&&jD.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 Lv(r){var e=XD(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new WD;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<Pv&&(o=kv(kv([],o,!0),JD(Pv-o.length),!0)):o=[];var s=o.join("."),i=QD(r),a=YD.exec(r);return a&&a[1]?new qD(t,s,i,a[1]):new VD(t,s,i)}function QD(r){for(var e=0,t=Rv.length;e<t;e++){var n=Rv[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function ZD(){var r=typeof process<"u"&&process.version;return r?new HD(process.version.slice(1)):null}function JD(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Nv=Dv(),L0=Nv!=null&&Nv.name==="firefox";async function l6(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Av.map(e=>({urls:[e]})),r}var Ov=(r=32)=>Iv+[...Array(r)].map(()=>a6.at(Math.floor(Math.random()*a6.length))).join("");var u6=class extends Bo{channel;incomingData;maxBufferedAmount;receivedFinAck;finAckTimeout;constructor(e){super({...e,maxMessageSize:(e.maxMessageSize??qa)-_v}),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=vt(),this.maxBufferedAmount=e.maxBufferedAmount??Tv,this.finAckTimeout=e.finAckTimeout??Cv,this.channel.onclose=()=>{this.log.trace("received datachannel close event"),this.onRemoteCloseWrite(),this.onTransportClosed()},this.channel.onerror=n=>{let o=n.error;this.log.trace("received datachannel error event - %e",o),this.abort(o)},this.channel.onmessage=async n=>{this.log("incoming message %d bytes",n.data.byteLength);let{data:o}=n;o===null||o.byteLength===0||this.incomingData.push(new Uint8Array(o,0,o.byteLength))},this.channel.bufferedAmountLowThreshold=0,this.channel.onbufferedamountlow=()=>{this.writableNeedsDrain&&this.safeDispatchEvent("drain")},Promise.resolve().then(async()=>{for await(let n of Ks(this.incomingData))this.processIncomingProtobuf(n)}).catch(n=>{this.log.error("error processing incoming data channel messages - %e",n)});let t=()=>{this.channel.readyState==="open"&&(this.log.trace("stream closed, closing underlying datachannel"),this.channel.close())};this.addEventListener("close",t),this.channel.readyState!=="open"&&(this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),wo(this.channel,"open",{rejectionEvents:["close","error"]}).then(()=>{this.log('channel ready state is now "%s", dispatching drain',this.channel.readyState),this.safeDispatchEvent("drain")}).catch(n=>{this.abort(n.error??n)}))}sendNewStream(){}_sendMessage(e){if(this.channel.readyState!=="open")throw new cn(`Invalid datachannel state - ${this.channel.readyState}`);if(this.log.trace('sending message, channel state "%s"',this.channel.readyState),L0){this.channel.send(e.subarray());return}for(let t of e)this.channel.send(t)}sendData(e){return this.channel.readyState!=="open"?{sentBytes:0,canSendMore:!1}:(this._sendMessage(Qn.single(Kt.encode({message:e.subarray()}))),{sentBytes:e.byteLength,canSendMore:this.channel.bufferedAmount<this.maxBufferedAmount})}sendReset(e){try{this.log.error("sending reset - %e",e),this._sendFlag(Kt.Flag.RESET),this.receivedFinAck?.reject(e)}catch(t){this.log.error("failed to send reset - %e",t)}}async sendCloseWrite(e){this._sendFlag(Kt.Flag.FIN),e?.signal?.throwIfAborted(),this.receivedFinAck=Promise.withResolvers();let t=e?.signal??AbortSignal.timeout(this.finAckTimeout),n=[wo(this.channel,"close",{signal:t}),wo(this.channel,"error",{signal:t})];await Promise.any([Pe(this.receivedFinAck.promise,t),...n]).finally(()=>{n.forEach(o=>o.cancel())})}async sendCloseRead(e){this._sendFlag(Kt.Flag.STOP_SENDING),e?.signal?.throwIfAborted()}processIncomingProtobuf(e){let t=Kt.decode(e);t.message!=null&&(this.readStatus==="readable"||this.readStatus==="paused")&&this.onData(new X(t.message)),t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Kt.Flag.FIN&&(this._sendFlag(Kt.Flag.FIN_ACK),this.onRemoteCloseWrite()),t.flag===Kt.Flag.RESET&&(this.receivedFinAck?.reject(new fi("The stream was reset")),this.onRemoteReset()),t.flag===Kt.Flag.STOP_SENDING&&this.onRemoteCloseRead(),t.flag===Kt.Flag.FIN_ACK&&this.receivedFinAck?.resolve())}_sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',e.toString(),this.channel.readyState),!1;this.log.trace("sending flag %s",e.toString());let t=Kt.encode({flag:e}),n=Qn.single(t);try{return this._sendMessage(n),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}sendPause(){}sendResume(){}};function wu(r){let{channel:e,direction:t,isHandshake:n}=r;return new u6({...r,id:`${e.id}`,log:r.log.newScope(`${n===!0?"handshake":t}:${e.id}`),protocol:""})}var os=class{protocol;peerConnection;metrics;dataChannelOptions;earlyDataChannels;constructor(e){this.onEarlyDataChannel=this.onEarlyDataChannel.bind(this),this.peerConnection=e.peerConnection,this.metrics=e.metrics,this.protocol=e.protocol??c6,this.dataChannelOptions=e.dataChannelOptions??{},this.peerConnection.addEventListener("datachannel",this.onEarlyDataChannel),this.earlyDataChannels=[]}onEarlyDataChannel(e){this.earlyDataChannels.push(e.channel)}createStreamMuxer(e){return this.peerConnection.removeEventListener("datachannel",this.onEarlyDataChannel),new d6(e,{peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,protocol:this.protocol,earlyDataChannels:this.earlyDataChannels})}},d6=class extends Mo{peerConnection;dataChannelOptions;constructor(e,t){super(e,{...t,name:"muxer"}),this.peerConnection=t.peerConnection,this.protocol=t.protocol??c6,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{this.onDataChannel(n)},queueMicrotask(()=>{if(this.status!=="open"){t.earlyDataChannels.forEach(n=>{n.close()});return}t.earlyDataChannels.forEach(n=>{this.onDataChannel(n)})})}onDataChannel(e){if(this.log("incoming datachannel with channel id %d, protocol %s and status %s",e.id,e.protocol,e.readyState),e.label==="init"){this.log.trace("closing init channel %d",e.id),e.close();return}let t=wu({...this.streamOptions,...this.dataChannelOptions,channel:e,direction:"inbound",log:this.log});this.onRemoteStream(t)}async onCreateStream(e){let t=this.peerConnection.createDataChannel("",{});return this.log("open channel %d for protocol %s",t.id,e?.protocol),wu({...e,...this.dataChannelOptions,channel:t,direction:"outbound",log:this.log})}onData(){}};var f6=class extends Oo{peerConnection;constructor(e){super(e),this.peerConnection=e.peerConnection;let t=e.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change %s initial state %s",this.peerConnection.connectionState,t),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.onTransportClosed(),this.peerConnection.close())}}sendData(e){return{sentBytes:e.byteLength,canSendMore:!0}}async sendClose(e){this.peerConnection.close(),e?.signal?.throwIfAborted()}sendReset(){this.peerConnection.close()}sendPause(){}sendResume(){}},bu=r=>new f6(r);var D0=globalThis.RTCPeerConnection,N0=globalThis.RTCSessionDescription,Mv=globalThis.RTCIceCandidate;var ss=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Mr=class extends ss{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var O0=class extends ss{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var M0=class extends ss{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},B0=class extends ss{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var lr;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),(function(o){o.codec=()=>We(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(lr||(lr={}));var U0=async(r,e,t)=>{try{let n=Promise.withResolvers();for(eN(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==lr.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 Mv(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 %o - %e",t.direction,s,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate - %e",t.direction,n),t.signal?.aborted===!0&&r.connectionState!=="connected")throw n}};function eN(r,e){if(r.connectionState==="connected"){e.resolve();return}r.onconnectionstatechange=t=>{switch(r.connectionState){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new di(`RTCPeerConnection connection state became "${r.connectionState}"`));break;default:break}}}function F0(r){let e;for(let t of r.getComponents())t.name==="p2p"&&(e=Me(t.value??""));if(e==null)throw new ln("Remote peerId must be present in multiaddr");return e}async function Bv({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:s,transportManager:i,log:a,logger:c,onProgress:l}){let{circuitAddress:d,targetPeer:u}=Uv(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing circuit address: %a",d);let f=s.getConnections(u),h;f.length===0?(l?.(new H("webrtc:dial-relay")),h=await i.dial(d,{signal:t,onProgress:l})):(l?.(new H("webrtc:reuse-relay-connection")),h=f[0]),l?.(new H("webrtc:open-signaling-stream"));let p=await h.newStream(yu,{signal:t,runOnLimitedConnection:!0}),g=Ue(p).pb(lr),m=new D0(r);m.addEventListener("connectionstatechange",()=>{switch(m.connectionState){case"closed":m.close();break;default:break}});let w=new os({peerConnection:m,dataChannelOptions:e});try{let T=m.createDataChannel("init");m.onicecandidate=({candidate:$})=>{if(m.connectionState==="connected"){a.trace("ignore new ice candidate as peer connection is already connected");return}if($==null||$?.candidate===""){a.trace("initiator detected end of ICE candidates");return}let z=JSON.stringify($?.toJSON()??null);a.trace("initiator sending ICE candidate %o",$),g.write({type:lr.Type.ICE_CANDIDATE,data:z},{signal:t}).catch(S=>{a.error("error sending ICE candidate - %e",S)})},m.onicecandidateerror=$=>{a.error("initiator ICE candidate error",$)};let I=await m.createOffer().catch($=>{throw a.error("could not execute createOffer - %e",$),new Mr("Failed to set createOffer")});a.trace("initiator send SDP offer %s",I.sdp),l?.(new H("webrtc:send-sdp-offer")),await g.write({type:lr.Type.SDP_OFFER,data:I.sdp},{signal:t}),await m.setLocalDescription(I).catch($=>{throw a.error("could not execute setLocalDescription - %e",$),new Mr("Failed to set localDescription")}),l?.(new H("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let D=await g.read({signal:t});if(D.type!==lr.Type.SDP_ANSWER)throw new Mr("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",D.data);let F=new N0({type:"answer",sdp:D.data});return await m.setRemoteDescription(F).catch($=>{throw a.error("could not execute setRemoteDescription - %e",$),new Mr("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await U0(m,g,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected"),T.readyState!=="open"&&(a.trace("wait for init channel to open"),await wo(T,"open",{signal:t})),a.trace("closing init channel"),T.close(),a.trace("waiting for init channel to close"),await wo(T,"close",{signal:t}),l?.(new H("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await p.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:m,muxerFactory:w}}catch(T){throw a.error("outgoing signaling error - %e",T),m.close(),p.abort(T),T}finally{m.onicecandidate=null,m.onicecandidateerror=null}}var Fv=Ce(pa.matchers[0],_e(290)),$0=class r extends ie{transportManager;shutdownController;events;constructor(e,t){super(),this.transportManager=e.transportManager,this.events=e.events,this.shutdownController=t.shutdownController,this.onTransportListening=this.onTransportListening.bind(this)}async listen(){this.events.addEventListener("transport:listening",this.onTransportListening)}onTransportListening(e){e.detail.getAddrs().filter(n=>Fv.exactMatch(n)).map(n=>n.encapsulate("/webrtc")).length>0&&this.safeDispatchEvent("listening")}getAddrs(){return this.transportManager.getListeners().filter(e=>!(e instanceof r)).map(e=>e.getAddrs().filter(t=>Fv.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}updateAnnounceAddrs(){}async close(){this.events.removeEventListener("transport:listening",this.onTransportListening),this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function $v(r,e,{peerConnection:t,signal:n,log:o}){o.trace("new inbound signaling stream");let s=Ue(r).pb(lr);try{t.onicecandidate=({candidate:u})=>{if(t.connectionState==="connected"){o.trace("ignore new ice candidate as peer connection is already connected");return}if(u==null||u?.candidate===""){o.trace("recipient detected end of ICE candidates");return}let f=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",f),s.write({type:lr.Type.ICE_CANDIDATE,data:f},{signal:n}).catch(h=>{o.error("error sending ICE candidate - %e",h)})},o.trace("recipient read SDP offer");let c=await s.read({signal:n});if(c.type!==lr.Type.SDP_OFFER)throw new Mr(`expected message type SDP_OFFER, received: ${c.type??"undefined"} `);o.trace("recipient received SDP offer %s",c.data);let l=new N0({type:"offer",sdp:c.data});await t.setRemoteDescription(l).catch(u=>{throw o.error("could not execute setRemoteDescription - %e",u),new Mr("Failed to set remoteDescription")});let d=await t.createAnswer().catch(u=>{throw o.error("could not execute createAnswer - %e",u),new Mr("Failed to create answer")});o.trace("recipient send SDP answer %s",d.sdp),await s.write({type:lr.Type.SDP_ANSWER,data:d.sdp},{signal:n}),await t.setLocalDescription(d).catch(u=>{throw o.error("could not execute setLocalDescription - %e",u),new Mr("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await U0(t,s,{direction:"recipient",signal:n,log:o})}catch(c){if(t.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a - %e",e.remoteAddr,c),t.close(),c;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",e.remoteAddr,c)}let i=F0(e.remoteAddr),a=q(`/webrtc/p2p/${i}`);return o.trace("recipient connected to remote address %s",a),{remoteAddress:a,remotePeer:i}}var K0=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,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"})})}[vo]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[me]=["@libp2p/transport"];[ur]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(yu,(e,t)=>{let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t,n).catch(o=>{this.log.error("failed to handle incoming connect from %p - %e",t.remotePeer,o)}).finally(()=>{n.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(yu),this._started=!1}createListener(e){return new $0(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(yl.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 Bv({rtcConfiguration:await l6(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=bu({peerConnection:o,remoteAddr:n,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,remotePeer:F0(e),muxerFactory:s,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,i),a}async _onProtocol(e,t,n){let o=new D0(await l6(this.init.rtcConfiguration));o.addEventListener("connectionstatechange",()=>{switch(o.connectionState){case"closed":o.close();break;default:break}});let s=new os({peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i,remotePeer:a}=await $v(e,t,{peerConnection:o,signal:n,log:this.log});await e.close({signal:n});let c=bu({peerConnection:o,remoteAddr:i,metrics:this.metrics?.listenerEvents,direction:"inbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")});await this.components.upgrader.upgradeInbound(c,{skipEncryption:!0,skipProtection:!0,remotePeer:a,muxerFactory:s,signal:n}),this._closeOnShutdown(o,c)}catch(i){throw this.log.error("incoming signaling error - %e",i),o.close(),e.abort(i),i}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection - %e",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function Uv(r){let e=r.getComponents().filter(({name:n})=>n==="p2p").map(({value:n})=>n).pop();if(e==null)throw new A("Destination peer id was missing");return{circuitAddress:q(r.getComponents().filter(({name:n})=>n!=="webrtc")),targetPeer:Me(e)}}var h6=Object.values(ps).map(r=>r.decoder).reduce((r,e)=>r.or(e)),tN=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Kv(r){return r?.match(tN)?.groups?.fingerprint}function p6(r){let t=r.getComponents().find(n=>n.code===466)?.value;if(t===void 0||t==="")throw new A(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function rN(r){return He.decode(h6.decode(r))}function nN(r){let e=rN(p6(r)),t=oN(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 O0(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function Vv(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=Wt(ze.code,t);return q(`/certhash/${ec.encode(n.bytes)}`)}function oN(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new B0(r)}}function Hv(r,e){let{host:t,port:n,type:o}=oe(r);if(o!=="ip4"&&o!=="ip6")throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`);let s=nN(r);return{type:"answer",sdp:`v=0
63
+ `)),n.close())}})}function Y5(r,e){return e.set("Content-Length",`${r.length}`),e.set("Content-Type",'text/plain; charset="UTF-8"'),new ReadableStream({start(t){t.enqueue(R(r)),t.close()}})}function F_(r,e){if(r!=null){if(typeof r=="string")return Y5(r,e);if(r instanceof Blob)return O_(r,e);if(FF(r))return B_(r,e);if(r instanceof URLSearchParams)return Y5(r.toString(),e);if(r instanceof ReadableStream)return U_(r,e);if(r instanceof FormData)return M_(r,e);throw new Error("Unsupported body type")}}function FF(r){return r==null?!1:r.byteLength!=null}async function $_(r,e,t){let n=new Headers(t.headers),o=n.get("host")??e.hostname;n.set("host",o),n.get("user-agent")==null&&n.set("user-agent","libp2p/fetch");let i=F_(t.body,n),s=[`${t?.method?.toUpperCase()??"GET"} ${e.pathname??"/"} HTTP/1.1`,...Wm(n),"",""];r.send(R(s.join(`\r
64
+ `)))||await r.onDrain({signal:t.signal??void 0}),i!=null&&(t.log("request sending body"),await $F(r,i,t))}async function $F(r,e,t){let n=e.getReader();for(;;){let{done:o,value:i}=await n.read();if(i!=null&&(t.log("request send %d bytes",i.byteLength),r.send(i)||await r.onDrain({signal:t.signal??void 0})),o){t.log("request finished sending body");break}}}async function V_(r,e,t={}){let n=r.log.newScope("http-fetch");e=typeof e=="string"?new URL(e):e;let[o]=await Promise.all([N_(r,e,{...t,log:n}),$_(r,e,{...t,log:n})]);return await r.close({signal:t.signal??void 0}),o}var Qm=class extends Event{message;error;filename="";lineno=0;colno=0;constructor(e){super("error"),this.error=e,this.message=e.message}},Kd=class extends Event{code;reason;wasClean;constructor(e,t){super(e),this.code=t?.code??0,this.reason=t?.reason??"",this.wasClean=t?.wasClean??!0}};var VF={CONTINUATION:0,TEXT:1,BINARY:2,CONNECTION_CLOSE:8,PING:9,PONG:10},j5={0:"CONTINUATION",1:"TEXT",2:"BINARY",8:"CONNECTION_CLOSE",9:"PING",10:"PONG"};var Hd={NORMAL_CLOSURE:1e3,GOING_AWAY:1001,PROTOCOL_ERROR:1002,UNSUPPORTED_DATA:1003,RESERVED:1004,NO_STATUS_RECEIVED:1005,ABNORMAL_CLOSURE:1006,INVALID_FRAME_PAYLOAD_DATA:1007,POLICY_VIOLATION:1008,MESSAGE_TOO_BIG:1009,MANDATORY_EXT:1010,INTERNAL_SERVER_ERROR:1011,TLS_HANDSHAKE:1015};function K_(r){let e=0;if(r.byteLength<e+1)return;let n=r.get(e)&15;if(e++,j5[n]==null)throw new Error(`Unknown opcode: ${n}`);if(r.byteLength<e+1)return;let o=r.get(e),i=(o&128)===128,s=o&127;if(e++,s===126){if(r.byteLength<e+2)return;s=r.getUint16(e),e+=2}else if(s===127){if(r.byteLength<e+8)return;s=r.getUint32(e),e+=8}if(s===0)return r.consume(e),{type:j5[n]};let a;if(i){if(r.byteLength<e+4)return;a=r.subarray(e,e+4),e+=4}if(r.byteLength<e+s)return;let c=r.subarray(e,e+s);return e+=s,a!=null&&(c=H_(c,a)),r.consume(e),{type:j5[n],data:c}}function H_(r,e){let t=0;for(let n=0;n<r.byteLength;n++)r[n]=r[n]^e[t],t++,t===e.byteLength&&(t=0);return r}function q_(r,e,t){let o=new ne(Uint8Array.from([128|VF[r]])),i=e?.byteLength??0;if(i<126)o.append(Uint8Array.from([i|(t===!0?128:0)]));else if(i<65535){let s=new ne(new Uint8Array(3));s.set(0,126|(t===!0?128:0)),s.setUint16(1,i),o.append(s)}else if(i<18446744073709552e3){let s=new ne(new Uint8Array(9));s.set(0,127|(t===!0?128:0)),s.setUint32(1,i),o.append(s)}else throw new Error("Payload too large");if(t===!0&&e!=null){let s=Uint8Array.from([0,0,0,0]);o.append(s),e=H_(e,s)}return e!=null&&o.append(e),o}function z_(r){if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof DataView)return Vd(r);if(typeof r=="string")return R(r);if(r instanceof Blob)return r.arrayBuffer().then(e=>Vd(e));throw new _("Unsupported data type")}async function W_(r,e){return new Promise((t,n)=>{let o=!1,i=new re("RESPONSE");i[re.kOnHeadersComplete]=s=>{o=!0;let a=[];for(let c=0;c<s.headers.length;c+=2)a.push([s.headers[c],s.headers[c+1]]);t(new mo(null,{status:s.statusCode,statusText:s.statusMessage,headers:new Headers(a)}))},Promise.resolve().then(async()=>{for(;;){let{data:s}=await hr(r,"message",e.signal),a=s.subarray(),c=i.execute(a,0,a.byteLength);if(c instanceof Error)throw c;if(c<a.byteLength&&r.push(a.subarray(c)),o)break}}).catch(s=>{n(s)})})}async function*G_(r,e=[],t){let n=ul.encode(crypto.getRandomValues(new Uint8Array(16))).substring(1);t.set("host",r.hostname),t.set("connection","upgrade"),t.set("upgrade","websocket"),t.set("pragma","no-cache"),t.set("cache-control","no-cache"),t.set("sec-websocket-version","13"),t.set("sec-websocket-key",n),e.length>0&&t.set("sec-websocket-protocol",e.join(", ")),yield R([`GET ${r.pathname??"/"} HTTP/1.1`,...[...t.entries()].map(([o,i])=>`${o}: ${i}`),"",""].join(`\r
65
+ `))}var KF=["BINARY","TEXT","CONTINUATION"],HF=10485760;var qF="/http/1.1",Zm=class extends ue{binaryType="arraybuffer";bufferedAmount=0;extensions="";protocol="";readyState;url;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;_onclose;_onerror;_onmessage;_onopen;sentClose;isClient;buffer;maxMessageSize;_url;closeController;constructor(e,t={}){super(),this.readyState=this.CONNECTING,this.url=e.pathname,this.sentClose=!1,this.isClient=t.isClient??!0,this.buffer=new ne,this.closeController=new AbortController,this.maxMessageSize=t.maxMessageSize??HF}send(e){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");let t=z_(e);ah(t)?t.then(n=>{this._send("BINARY",n)}).catch(n=>{this._errored(n)}):this._send("BINARY",t)}_send(e,t){if(this.readyState!==this.OPEN)return;let n=q_(e,t,this.isClient),o=n.byteLength;this.bufferedAmount+=o,this._write(n,i=>{this.bufferedAmount-=o,i!=null&&this._errored(i)})}close(e,t){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");this.readyState=this.CLOSING,this.sentClose=!0,this._send("CONNECTION_CLOSE")}_errored(e){this.readyState=this.CLOSED,this.dispatchEvent(new Qm(e))}set onclose(e){this._onclose=e,this.addEventListener("close",e)}get onclose(){return this._onclose??null}set onerror(e){this._onerror=e,this.addEventListener("error",e)}get onerror(){return this._onerror??null}set onmessage(e){this._onmessage=e,this.addEventListener("message",e)}get onmessage(){return this._onmessage??null}set onopen(e){this._onopen=e,this.addEventListener("open",e)}get onopen(){return this._onopen??null}_push(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxMessageSize){this.close(Hd.MESSAGE_TOO_BIG,"Max message size exceeded");return}for(;;){let t=K_(this.buffer);if(t==null)break;if(KF.includes(t.type)&&t.data!=null){let n;this.binaryType==="blob"?n=new Blob([t.data]):t.data.byteOffset===0&&t.data.byteLength===t.data.buffer.byteLength?n=t.data.buffer:(n=new ArrayBuffer(t.data.byteLength),new Uint8Array(n,0,n.byteLength).set(t.data)),this.dispatchEvent(new MessageEvent("message",{data:n,origin:this._url?.hostname}))}t.type==="PING"&&this._send("PONG",t.data),t.type==="CONNECTION_CLOSE"&&(this.sentClose||this.close(),this.closeController.abort(),this._close(void 0,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new Kd("close"))}))}}_remoteClosed(e){this.readyState=this.CLOSING,this._close(e,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new Kd("close"))})}};var qd=class extends Zm{writer;writable;constructor(e,t,n={}){if(super(new URL(e.url),{...n,isClient:!1}),e.body==null)throw new _("Request body cannot be null");this.readyState=this.OPEN,this.writable=t,this.writer=t.getWriter();let o=e.body.getReader();Promise.resolve().then(async()=>{for(this.dispatchEvent(new Event("open"));;){let{value:i,done:s}=await o.read();if(i!=null&&this._push(i),s){this._remoteClosed();break}}}).catch(i=>{this._errored(i)})}_write(e,t){this.writer?.write(e).then(()=>{t()},n=>{t(n)})}_close(e,t){e!=null?this.writable.abort(e).then(()=>{t()},()=>{t()}):this.writable.close().then(()=>{t()},()=>{t()})}},zd=class extends Zm{stream;handshakeTimeout;drainTimeout;constructor(e,t,n,o){super(t,{...o,isClient:!0}),this.handshakeTimeout=o.handshakeTimeout??1e4,this.drainTimeout=o.drainTimeout??1e4,Promise.resolve().then(async()=>{let i=AbortSignal.timeout(this.handshakeTimeout);this.stream=await n.openStream(e,qF,{...o,signal:i});for await(let a of G_(t,o.protocols,po(o)))this.stream.send(a)||await this.stream.onDrain({signal:i});let s=await W_(this.stream,{signal:i});if(s.status!==101)throw new Error("Invalid WebSocket handshake - response status "+s.status);await o.onHandshakeResponse?.(s,{signal:i}),this.protocol=s.headers.get("Sec-WebSocket-Protocol")??"",this.readyState=this.OPEN,this.dispatchEvent(new Event("open"));for await(let a of this.stream)this._push(a)}).catch(i=>{this._errored(i)})}_write(e,t){if(this.stream==null){t(new Error("WebSocket was not open"));return}this.stream.send(e)?t():this.stream.onDrain({signal:AbortSignal.timeout(this.drainTimeout)}).then(()=>{t()},n=>{t(n)})}_close(e,t){if(this.stream==null){t();return}if(e!=null){this.stream.abort(e),t();return}this.stream.close().catch(n=>{this.stream?.abort(n)}).finally(()=>{t()})}};var Wd="/http/1.1";var Jm=Symbol.for("@libp2p/http/websocket-handler");var eI=yo(Z_(),1),t2=class{log;cookies;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:http:cookies"),this.cookies=new Map}async prepareRequest(e,t){if((t.credentials??"same-origin")==="omit")return;let o=t.headers.get("origin");if(o==null||o==="null")return;let i=$d(e,t.headers),s=(this.cookies.get(i.hostname)??[]).filter(a=>!(a.expires!=null&&a.expires<Date.now()||a.path!=null&&!i.pathname.startsWith(a.path))).map(a=>`${a.name}=${a.value}`).join("; ");s.length>0&&t.headers.set("cookie",s)}async processResponse(e,t,n){if((t.credentials??"same-origin")==="omit"){J_(n);return}let i=t.headers.get("origin");if(i==null||i==="null")return;let s=$d(e,t.headers);for(let a of n.headers.getSetCookie()){let c=[...this.cookies.get(s.hostname)??[],...JF(eI.default.parse(a))];this.cookies.set(s.hostname,c)}J_(n)}};function J_(r){return r.headers.has("set-cookie")&&r.headers.delete("set-cookie"),r}function JF(r){let e={},t=[];return Object.entries(r).forEach(([n,o])=>{n.toLowerCase()==="domain"&&o!=null&&(e.domain=o),n.toLowerCase()==="max-age"&&o!=null&&(e.expires=Date.now()+parseInt(o,10)*1e3),!e$.includes(n.toLowerCase())&&o!=null&&t.push({name:n,value:o})}),t.map(n=>({...n,...e}))}var e$=["domain","expires","httponly","max-age","partitioned","path","samesite","secure"];var r2=class{async prepareRequest(e,t){if(t.headers.get("origin")!=null||t.mode==="no-cors")return;let n=$d(e,t.headers);t.headers.set("origin",`${n.protocol}//${n.host}`)}};function t$(r){return typeof r.init=="function"}function n2(r,e){if(t$(r)){let t=r;return t.handler=r.init(e),delete t.init,t}return r}function tI(r){let e=jm(r.method,["GET"]);if(r.fallback==null&&e.filter(n=>n!=="GET").length>0)throw new _("WebSocket handlers only support the GET HTTP method");let t={...r,init:n=>{let o=n2(r,n);return t[Jm]=o.handler,async i=>{if(!zm(i.method,i.headers))return r?.fallback!=null?r.fallback(i):new mo(null,{status:400});let s=new TransformStream;try{let a=new mo(s.readable,{status:101,headers:await G5(i.headers)}),c=new qd(i,s.writable,r);return o.handler(c),a}catch{return new mo(null,{status:500})}}}};return t}var o2="/.well-known/libp2p/protocols";function rI(r){return tI({path:o2,method:["GET"],cors:!0,handler:e=>{let t=JSON.stringify(r.getProtocolMap());e.send(t),e.close()},fallback:async e=>{let t=JSON.stringify(r.getProtocolMap());return new Response(t,{headers:{"Content-Type":"application/json","Content-Length":`${t.length}`}})}})}var i2=class{log;components;protocols;endpoint;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http:registrar"),this.protocols=[],this.onStream=this.onStream.bind(this),this.endpoint=t.server,this.handle("",rI(this))}async start(){await this.components.registrar.handle(Wd,this.onStream.bind(this))}async stop(){await this.components.registrar.unhandle(Wd)}async onStream(e,t){let n=await D_(e);if(this.canHandle(n)){this.log("handling incoming request %s %s",n.method,n.url);let o=await this.onRequest(R_(n,e));await P_(o,e),await e.close();return}if(this.endpoint==null){this.log("cannot handle incoming request %s %s and no endpoint configured",n.method,n.url),e.send(L_),await e.close();return}this.log("passing incoming request %s %s to endpoint",n.method,n.url),this.endpoint.inject(n,e,t).catch(o=>{this.log.error("error injecting request to endpoint - %e",o),e.abort(o)})}canHandle(e){let t=W5(e).pathname;return this.protocols.find(n=>n.route.path===t)!=null?(this.log.trace("can handle %s",t),!0):(this.log.trace("cannot handle %s",t),!1)}async onRequest(e){this.log("incoming request %s %s",e.method,e.url);let t=this.findHandler(e.url);if(t==null)return new Response(null,{status:404});let n;return t.route.method.includes(e.method)?n=await t.route.handler(e):e.method==="OPTIONS"?n=new Response(null,{status:204}):n=new Response(null,{status:405}),r$(n,e,t),this.log("%s %s %d %s",e.method,e.url,n.status,n.statusText),n}onWebSocket(e){let t=this.findHandler(e.url);if(t!=null){let n=t.route[Jm];if(n!=null){n(e);return}}e.close(Hd.NORMAL_CLOSURE)}findHandler(e){let t=e.startsWith("/")?e:new URL(e).pathname;this.log("search for handler on path %s",t);let n=this.protocols.find(o=>o.route.path===t);return n!=null&&this.log("found handler for HTTP protocol %s on path %s",n.protocol,e),n}handle(e,t){if(t.path=t.path??e,this.protocols.find(n=>n.protocol===e)!=null)throw new _(`HTTP protocol handler for ${e} already registered`);(t.path===""||!t.path.startsWith("/"))&&(t.path=`/${t.path}`),t.cors=t.cors??!0,t.method=jm(t.method),t=n2(t,this.components),this.protocols.push({protocol:e,route:t}),this.protocols.sort(({route:{path:n}},{route:{path:o}})=>o.length-n.length)}unhandle(e){this.protocols=this.protocols.filter(t=>t.protocol===e)}getProtocolMap(){let e={};for(let t of this.protocols)t.protocol!==""&&(e[t.protocol]={path:t.route.path});return e}};function r$(r,e,t){let n=[...new Set(["OPTIONS",...t.route.method])].join(", ");t.route.cors&&(e.headers.get("Access-Control-Request-Method")!=null&&r.headers.set("access-control-allow-methods",n),e.headers.get("Access-Control-Request-Headers")!=null&&r.headers.set("access-control-allow-headers",e.headers.get("Access-Control-Request-Headers")??""),e.headers.get("Origin")!=null&&(r.headers.set("access-control-allow-origin",e.headers.get("Origin")??""),r.headers.set("vary","Origin"))),e.method==="OPTIONS"&&r.headers.set("allow",n)}async function nI(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function oI(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function iI(r,e,t){for(let n of e.middleware)await n.processResponse?.(r,e,t);return t}var s2=class{log;components;httpRegistrar;origin;cookies;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http"),this.httpRegistrar=new i2(e,t),this.origin=new r2,this.cookies=new t2(e,t)}[Symbol.toStringTag]="@libp2p/http";[Te]=["@libp2p/http"];async start(){await xt(this.httpRegistrar)}async stop(){await St(this.httpRegistrar)}agent(...e){throw new ol("This method is not supported in browsers")}dispatcher(...e){throw new ol("This method is not supported in browsers")}async connect(e,t={}){let n=Zc(e),o=po(t),i={...t,headers:o,method:"GET",middleware:t.middleware?.map(s=>s(this.components))??[]};return o.set("connection","upgrade"),o.set("upgrade","websocket"),oI(n,i,async()=>{if(n instanceof URL){let c=new globalThis.WebSocket(n,t.protocols);return c.binaryType="arraybuffer",c}let{addresses:s,httpPath:a}=Ym(n);return new zd(s,new URL(`http://${Gm(n,i.headers)}${decodeURIComponent(a)}`),this.components.connectionManager,i)})}async fetch(e,t={}){let n=Zc(e),o={...t,headers:po(t),method:"GET",middleware:[this.origin,this.cookies,...t.middleware?.map(s=>s(this.components))??[]]},i=await nI(n,o,async()=>this.sendRequest(n,t));return iI(n,o,i)}async connectProtocol(e,t,n){let o=await this.getProtocolPath(e,t,n),i=Zc(e,o);return this.connect(i,n)}async fetchProtocol(e,t,n={}){let o=await this.getProtocolPath(e,t,n),i=Zc(e,o);return this.fetch(i,n)}async getSupportedProtocols(e,t={}){let n=Zc(e,o2),o=await this.fetch(n,{method:"GET",headers:{Accept:"application/json"},signal:t.signal});if(o.status!==200)throw new Error(`Unexpected status code: ${o.status}`);return o.json()}async getProtocolPath(e,t,n={}){let o=await this.getSupportedProtocols(e,n);if(o[t]==null)throw new Error(`Peer does not serve protocol: ${t}`);return o[t].path}canHandle(e){return this.httpRegistrar.canHandle(e)}async onRequest(e){return this.httpRegistrar.onRequest(e)}onWebSocket(e){this.httpRegistrar.onWebSocket(e)}handle(e,t){this.httpRegistrar.handle(e,t)}unhandle(e){this.httpRegistrar.unhandle(e)}getProtocolMap(){return this.httpRegistrar.getProtocolMap()}async sendRequest(e,t){if(e instanceof URL)return this.log("making request to %s with global fetch"),globalThis.fetch(e,t);this.log("making request to %s with libp2p fetch",e);let n=Gm(e,po(t)),{addresses:o,httpPath:i}=Ym(e),a=await(await this.components.connectionManager.openConnection(o,{signal:t.signal??void 0})).newStream(Wd,{signal:t.signal??void 0});return V_(a,new URL(`http://${n}${decodeURIComponent(i)}`),t)}};function sI(r={}){return e=>new s2(e,r)}var aI="0.1.0";var cI="id/push",lI="1.0.0",uI="1.0.0";var Yi;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.protocolVersion!=null&&(s.uint32(42),s.string(i.protocolVersion)),i.agentVersion!=null&&(s.uint32(50),s.string(i.agentVersion)),i.publicKey!=null&&(s.uint32(10),s.bytes(i.publicKey)),i.listenAddrs!=null&&i.listenAddrs.length>0)for(let c of i.listenAddrs)s.uint32(18),s.bytes(c);if(i.observedAddr!=null&&(s.uint32(34),s.bytes(i.observedAddr)),i.protocols!=null&&i.protocols.length>0)for(let c of i.protocols)s.uint32(26),s.string(c);i.signedPeerRecord!=null&&(s.uint32(66),s.bytes(i.signedPeerRecord)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={listenAddrs:[],protocols:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 5:{c.protocolVersion=i.string();break}case 6:{c.agentVersion=i.string();break}case 1:{c.publicKey=i.bytes();break}case 2:{if(a.limits?.listenAddrs!=null&&c.listenAddrs.length===a.limits.listenAddrs)throw new Ee('Decode error - repeated field "listenAddrs" had too many elements');c.listenAddrs.push(i.bytes());break}case 4:{c.observedAddr=i.bytes();break}case 3:{if(a.limits?.protocols!=null&&c.protocols.length===a.limits.protocols)throw new Ee('Decode error - repeated field "protocols" had too many elements');c.protocols.push(i.string());break}case 8:{c.signedPeerRecord=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={listenAddrs:0,protocols:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 5:{yield{field:`${a}.protocolVersion`,value:i.string()};break}case 6:{yield{field:`${a}.agentVersion`,value:i.string()};break}case 1:{yield{field:`${a}.publicKey`,value:i.bytes()};break}case 2:{if(c.limits?.listenAddrs!=null&&l.listenAddrs===c.limits.listenAddrs)throw new Ee('Streaming decode error - repeated field "listenAddrs" had too many elements');yield{field:`${a}.listenAddrs[]`,index:l.listenAddrs,value:i.bytes()},l.listenAddrs++;break}case 4:{yield{field:`${a}.observedAddr`,value:i.bytes()};break}case 3:{if(c.limits?.protocols!=null&&l.protocols===c.limits.protocols)throw new Ee('Streaming decode error - repeated field "protocols" had too many elements');yield{field:`${a}.protocols[]`,index:l.protocols,value:i.string()},l.protocols++;break}case 8:{yield{field:`${a}.signedPeerRecord`,value:i.bytes()};break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Yi||(Yi={}));var Ar={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function dI(r){if(r!=null&&r.length>0)try{return j(r)}catch{}}async function a2(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new ve("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:j(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=pt(o.publicKey);if(!io(c).equals(n.remotePeer))throw new ve("public key did not match remote PeerId");i.publicKey=c}let s;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await Yr.openAndCertify(c,pr.DOMAIN),u=pr.createFromProtobuf(l.payload),d=Dn(l.publicKey.toCID());if(!u.peerId.equals(d))throw new ve("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new ve("signing key does not match remote PeerId");let f;try{f=await r.get(u.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(i.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=Yr.createFromProtobuf(f.peerRecordEnvelope),p=pr.createFromProtobuf(h.payload);p.seqNumber>=u.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,u.seqNumber),u=p,c=f.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=u.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),s={seq:u.seqNumber,addresses:u.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,i),await r.patch(n.remotePeer,i),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=R(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=R(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=>j(c)),observedAddr:o.observedAddr==null?void 0:j(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var Jc=class{host;components;protocol;started;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.components=e,this.log=t.log,this.timeout=t.timeout??Ar.timeout,this.maxInboundStreams=t.maxInboundStreams??Ar.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Ar.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??Ar.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??Ar.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??Ar.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??Ar.protocolPrefix}/${aI}`,agentVersion:e.nodeInfo.userAgent},this.handleProtocol=this.handleProtocol.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.peerStore.merge(this.components.peerId,{metadata:{AgentVersion:R(this.host.agentVersion),ProtocolVersion:R(this.host.protocolVersion)}}),await this.components.registrar.handle(this.protocol,this.handleProtocol,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}};var c2=class extends Jc{connectionManager;concurrency;_push;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??Ar.protocolPrefix}/${cI}/${uI}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??Ar.concurrency,this._push=Ro(this.sendPushMessage.bind(this),t.debounce??1e3),(t.runOnSelfUpdate??Ar.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error("error pushing updates to peers - %e",o)})})}[Te]=["@libp2p/identify-push"];async push(){this._push()}async sendPushMessage(){if(this.isStarted())try{let e=this.components.addressManager.getAddresses().map(u=>u.decapsulateCode(421)),t=new pr({peerId:this.components.peerId,multiaddrs:e}),n=await Yr.seal(t,this.components.privateKey),o=this.components.registrar.getProtocols(),i=await this.components.peerStore.get(this.components.peerId),s=N(i.metadata.get("AgentVersion")??R(this.host.agentVersion)),a=N(i.metadata.get("ProtocolVersion")??R(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.components.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await u.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await Qe(f,{maxDataLength:c.maxMessageSize}).pb(Yi).write({listenAddrs:e.map(y=>y.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){f?.log.newScope("identify-push")?.error("could not push identify update to peer",p),f?.abort(p)}})}await yr(jo(l(),{concurrency:this.concurrency}))}catch(e){this.log.error("error pushing updates to peers - %e",e)}}async handleProtocol(e,t){let n=e.log.newScope("identify-push");if(this.components.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await Qe(e,{maxDataLength:this.maxMessageSize}).pb(Yi).read(o);await e.close(o),await a2(this.components.peerStore,this.components.events,n,t,s),n.trace("handled push from %p",t.remotePeer)}};var l2=class extends Jc{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??Ar.protocolPrefix}/${"id"}/${lI}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??Ar.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(()=>{})})}[Te]=["@libp2p/identify"];async _identify(e,t={}){let n,o;if(t.signal==null){let i=AbortSignal.timeout(this.timeout);t={...t,signal:i}}this.log("run identify on new connection %a",e.remoteAddr);try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection}),o=n.log.newScope("identify");let i=Qe(n,{maxDataLength:this.maxMessageSize}).pb(Yi),s=await i.read(t);return await i.unwrap().unwrap().close(t),s}catch(i){throw o?.error("identify failed - %e",i),n?.abort(i),i}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new ve("Public key was missing from identify message");let a=pt(o),c=Dn(a.toCID());if(!e.remotePeer.equals(c))throw new ve("Identified peer does not match the expected peer");if(this.components.peerId.equals(c))throw new ve("Identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("completed for peer %p and protocols %o",c,i),a2(this.components.peerStore,this.components.events,this.log,e,n)}maybeAddObservedAddress(e){let t=dI(e);if(t==null||(this.log.trace("our observed address was %a",t),ut(t)))return;let n=t.getComponents();if((n[0].code===41||n[0].code===42&&n[1].code===41)&&!Zf(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}ea.exactMatch(t)||(this.log.trace("storing the observed address"),this.components.addressManager.addObservedAddr(t))}async handleProtocol(e,t){let n=e.log.newScope("identify");n("responding to identify");let o=AbortSignal.timeout(this.timeout);let i=await this.components.peerStore.get(this.components.peerId,{signal:o}),s=this.components.addressManager.getAddresses().map(u=>u.decapsulateCode(421)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let u=new pr({peerId:this.components.peerId,multiaddrs:s});a=(await Yr.seal(u,this.components.privateKey,{signal:o})).marshal().subarray()}let c=t.remoteAddr.bytes;Zv.matches(t.remoteAddr)||(c=void 0);let l=Qe(e).pb(Yi);n("send response"),await l.write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:_t(this.components.privateKey.publicKey),listenAddrs:s.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),n("close write"),await l.unwrap().unwrap().close({signal:o})}};function fI(r={}){return e=>new l2(e,r)}function hI(r={}){return e=>new c2(e,r)}var ma=1e3,Z5=60*ma,u2=60*Z5,pI="/ipfs/kad/1.0.0",d2=48*u2;var mI=24*u2,gI=10,yI=16384,wI=u2,J5=u2,K8e=10*ma,bI=10*ma;var f2=20,ji=10,xI=5*Z5,EI=ma,vI=5*ma,SI=5*Z5,AI=30*ma,TI=180*ma,ey=`${cs}-kad-dht`;var Gd;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.key!=null&&i.key.byteLength>0&&(s.uint32(10),s.bytes(i.key)),i.value!=null&&i.value.byteLength>0&&(s.uint32(18),s.bytes(i.value)),i.timeReceived!=null&&i.timeReceived!==""&&(s.uint32(42),s.string(i.timeReceived)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={key:de(0),value:de(0),timeReceived:""},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.key=i.bytes();break}case 2:{c.value=i.bytes();break}case 5:{c.timeReceived=i.string();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.key`,value:i.bytes()};break}case 2:{yield{field:`${a}.value`,value:i.bytes()};break}case 5:{yield{field:`${a}.timeReceived`,value:i.string()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Gd||(Gd={}));function _I(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"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${c}Z`}function II(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,i=parseInt(t[3],10),s=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,i,s,a,c,l))}var Wt=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 Gd.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:_I(this.timeReceived)}}static deserialize(e){let t=Gd.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=II(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 Xi=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},h2=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},p2=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var CI;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.key!=null&&(s.uint32(10),s.bytes(i.key)),i.value!=null&&(s.uint32(18),s.bytes(i.value)),i.author!=null&&(s.uint32(26),s.bytes(i.author)),i.signature!=null&&(s.uint32(34),s.bytes(i.signature)),i.timeReceived!=null&&(s.uint32(42),s.string(i.timeReceived)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.key=i.bytes();break}case 2:{c.value=i.bytes();break}case 3:{c.author=i.bytes();break}case 4:{c.signature=i.bytes();break}case 5:{c.timeReceived=i.string();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.key`,value:i.bytes()};break}case 2:{yield{field:`${a}.value`,value:i.bytes()};break}case 3:{yield{field:`${a}.author`,value:i.bytes()};break}case 4:{yield{field:`${a}.signature`,value:i.bytes()};break}case 5:{yield{field:`${a}.timeReceived`,value:i.string()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(CI||(CI={}));var Ue;(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"})(Ue||(Ue={}));var m2;(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"})(m2||(m2={}));(function(r){r.codec=()=>lt(m2)})(Ue||(Ue={}));var ga;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(ga||(ga={}));var ty;(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"})(ty||(ty={}));(function(r){r.codec=()=>lt(ty)})(ga||(ga={}));var Qi;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.id!=null&&i.id.byteLength>0&&(s.uint32(10),s.bytes(i.id)),i.multiaddrs!=null&&i.multiaddrs.length>0)for(let c of i.multiaddrs)s.uint32(18),s.bytes(c);i.connection!=null&&(s.uint32(24),ga.codec().encode(i.connection,s)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={id:de(0),multiaddrs:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.id=i.bytes();break}case 2:{if(a.limits?.multiaddrs!=null&&c.multiaddrs.length===a.limits.multiaddrs)throw new Ee('Decode error - repeated field "multiaddrs" had too many elements');c.multiaddrs.push(i.bytes());break}case 3:{c.connection=ga.codec().decode(i);break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={multiaddrs:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{yield{field:`${a}.id`,value:i.bytes()};break}case 2:{if(c.limits?.multiaddrs!=null&&l.multiaddrs===c.limits.multiaddrs)throw new Ee('Streaming decode error - repeated field "multiaddrs" had too many elements');yield{field:`${a}.multiaddrs[]`,index:l.multiaddrs,value:i.bytes()},l.multiaddrs++;break}case 3:{yield{field:`${a}.connection`,value:ga.codec().decode(i)};break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Qi||(Qi={}));var Zi;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.type!=null&&m2[i.type]!==0&&(s.uint32(8),Ue.codec().encode(i.type,s)),i.clusterLevel!=null&&(s.uint32(80),s.int32(i.clusterLevel)),i.key!=null&&(s.uint32(18),s.bytes(i.key)),i.record!=null&&(s.uint32(26),s.bytes(i.record)),i.closer!=null&&i.closer.length>0)for(let c of i.closer)s.uint32(66),Qi.codec().encode(c,s);if(i.providers!=null&&i.providers.length>0)for(let c of i.providers)s.uint32(74),Qi.codec().encode(c,s);a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={type:Ue.PUT_VALUE,closer:[],providers:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.type=Ue.codec().decode(i);break}case 10:{c.clusterLevel=i.int32();break}case 2:{c.key=i.bytes();break}case 3:{c.record=i.bytes();break}case 8:{if(a.limits?.closer!=null&&c.closer.length===a.limits.closer)throw new Ee('Decode error - repeated field "closer" had too many elements');c.closer.push(Qi.codec().decode(i,i.uint32(),{limits:a.limits?.closer$}));break}case 9:{if(a.limits?.providers!=null&&c.providers.length===a.limits.providers)throw new Ee('Decode error - repeated field "providers" had too many elements');c.providers.push(Qi.codec().decode(i,i.uint32(),{limits:a.limits?.providers$}));break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={closer:0,providers:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{yield{field:`${a}.type`,value:Ue.codec().decode(i)};break}case 10:{yield{field:`${a}.clusterLevel`,value:i.int32()};break}case 2:{yield{field:`${a}.key`,value:i.bytes()};break}case 3:{yield{field:`${a}.record`,value:i.bytes()};break}case 8:{if(c.limits?.closer!=null&&l.closer===c.limits.closer)throw new Ee('Streaming decode error - repeated field "closer" had too many elements');for(let f of Qi.codec().stream(i,i.uint32(),`${a}.closer[]`,{limits:c.limits?.closer$}))yield{...f,index:l.closer};l.closer++;break}case 9:{if(c.limits?.providers!=null&&l.providers===c.limits.providers)throw new Ee('Streaming decode error - repeated field "providers" had too many elements');for(let f of Qi.codec().stream(i,i.uint32(),`${a}.providers[]`,{limits:c.limits?.providers$}))yield{...f,index:l.providers};l.providers++;break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Zi||(Zi={}));function ry(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 Yd(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 g2(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Vn(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function ny(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function jd(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function oy(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function kI(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}function RI(r,e,t){if(t.length===0)throw new _("No records given");let o=N(e).split("/");if(o.length<3)throw new _("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new p2(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function c$(r,e){return 0}var PI={pk:c$};async function el(r,e,t){let n=e.key,i=N(n).split("/");if(i.length<3)return;let s=r[i[1].toString()];if(s==null)throw new _(`No validator available for key type "${i[1]}"`);await s(n,e.value,t)}var l$=async(r,e,t)=>{if(!(r instanceof Uint8Array))throw new _('"key" must be a Uint8Array');if(r.byteLength<5)throw new _("Invalid public key record");if(N(r.subarray(0,4))!=="/pk/")throw new _("key was not prefixed with /pk/");let o=pt(e),i=r.slice(4);if(!se(i,o.toMultihash().bytes))throw new _("public key does not match passed in key")},LI={pk:l$};var u$=R("/pk/");function DI(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>!ut(e))}}async function Ji(r,e){let t=await st.digest(r);return e?.signal?.throwIfAborted(),t.digest}async function Tr(r,e){return Ji(r.toMultihash().bytes,e)}function es(r,e){return new Ze(`${r}/${N(e,"base32")}`,!1)}function NI(r){return je([u$,r.toMultihash().bytes])}function OI(r){return N(r.subarray(0,4))==="/pk/"}function BI(r){let e=He(r.subarray(4));return dt(e)}function iy(r,e){let t=new Date;return new Wt(r,e,t).serialize()}function y2(r){let e=r.toString().split("/"),t=e.pop(),n=e.pop();if(t==null||n==null)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:J.createV1(Eo,He(R(n,"base32"))),peerId:Xe(t)}}function w2(r,e,t){let n=typeof e=="string"?e:N(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new Ze(o.join("/"))}function b2(r){return new Date(Rr(r))}function ya(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),i=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}function x2(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),i=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}var E2=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e,t){this.log("getLocal %b",e);let n=es(this.datastorePrefix,e);this.log("fetching record for key %k",n);let o=await this.components.datastore.get(n,t);this.log("found %k in local datastore",n);let i=Wt.deserialize(o);return await el(this.validators,i,t),i}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let i=iy(e,n);for(let{value:s,from:a}of t){if(se(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=es(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray(),o)}catch(u){this.log.error("failed error correcting self - %e",u)}continue}let c=!1,l={type:Ue.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&se(u.record.value,Wt.deserialize(i).value)&&(c=!0),yield u;if(!c)throw new Xi("Could not send correction");this.log.error("failed error correcting entry")}}async*put(e,t,n){this.log("put key %b value %b",e,t);let o=iy(e,t),i=es(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray(),n),yield*rc(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>ln(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ue.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,{...n,path:a.path}))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&se(u.record.value,Wt.deserialize(o).value)||c.push(Vn({from:a.peer.id,error:new Xi("Value not put correctly"),path:u.path},n)));return c}),s=>jo(s,{ordered:!1,concurrency:ji}),async function*(s){for await(let a of s)yield*a})}async*get(e,t){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t)){if(a.name==="VALUE"){n.push(a);continue}yield a}if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=RI(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new We("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,{...t,path:{index:-1,queued:0,running:0,total:0}}),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e,t);yield jd({value:i.value,from:this.components.peerId,path:{index:-1,running:0,queued:0,total:0}},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s,path:a}){for await(let c of n.peerRouting.getValueOrPeers(i.id,e,{...t,signal:s,path:a}))yield c,c.name==="PEER_RESPONSE"&&c.record!=null&&(yield jd({from:i.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,o,t)}};function MI(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Xd(r){if(r.id==null)throw new Error("Invalid peer in message");let e=He(r.id);return{id:dt(e),multiaddrs:(r.multiaddrs??[]).map(t=>j(t))}}var v2=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(d=>d.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId,n);let i={type:Ue.ADD_PROVIDER,key:o,providers:[MI({id:this.components.peerId,multiaddrs:t})]},s=0,a=this;async function*c(d){try{a.log("sending provider record for %s to %p",e,d.peer.id);for await(let f of a.network.sendMessage(d.peer.id,i,{...n,path:d.path}))f.name==="PEER_RESPONSE"&&(a.log("sent provider record for %s to %p",e,d.peer.id),s++),yield f}catch(f){a.log.error("error sending provide record to peer %p - %e",d.peer.id,f),yield Vn({from:d.peer.id,error:f,path:d.path},n)}}let l=Ft({objectMode:!0}),u=new $t({concurrency:ji});u.addEventListener("idle",()=>{l.end()}),u.addEventListener("failure",d=>{this.log.error("error publishing provider record to peer - %e",d.detail.error)}),u.add(async()=>{let d=[];for await(let f of this.peerRouting.getClosestPeers(o,n))l.push(f),f.name==="FINAL_PEER"&&d.push(f);d.forEach(f=>{u.add(async()=>{for await(let h of c(f))l.push(h)}).catch(h=>{this.log.error("error publishing provider record to peer - %e",h)})})}).catch(d=>{l.end(d)}),yield*l,this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e,t);if(a.length>0){let u=[];for(let d of a.slice(0,n))try{let f=await this.components.peerStore.get(d,t);u.push({id:d,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",d)}if(yield Yd({from:this.components.peerId,messageType:Ue.GET_PROVIDERS,providers:u,path:{index:-1,queued:0,running:0,total:0}},t),yield ny({from:this.components.peerId,providers:u,path:{index:-1,queued:0,running:0,total:0}},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:d,path:f}){let h={type:Ue.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u.id,h,{...t,signal:d,path:f})},l=new Wr(a);for await(let u of this.queryManager.run(i,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let d=[];for(let f of u.providers)l.has(f.id)||(l.add(f.id),d.push(f));if(d.length>0&&(yield ny({from:u.from,providers:d,path:u.path},t),o+=d.length,o>=n))return}}};var S2=class extends ue{log;protocol;running;components;timeout;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=t.protocol,this.timeout=new Sn({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}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 _("Message type was missing");let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield oy({peer:e,path:n.path},n),i=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield ry({to:e,type:o,path:n.path},n);let a=await this._writeReadMessage(i,t,n);i.close(n).catch(c=>{this.log.error("error closing stream to %p - %e",e,c),i?.abort(c)}),yield Yd({from:e,messageType:a.type,closer:a.closer.map(Xd),providers:a.providers.map(Xd),record:a.record==null?void 0:Wt.deserialize(a.record),path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield Vn({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new _("Message type was missing");let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield oy({peer:e,path:n.path},n),i=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield ry({to:e,type:o,path:n.path},n),await this._writeMessage(i,t,n),i.close(n).catch(a=>{this.log.error("error closing stream to %p - %e",e,a),i?.abort(a)}),yield Yd({from:e,messageType:o,path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield Vn({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await Qe(e).write(t,Zi,n)}async _writeReadMessage(e,t,n){let o=Qe(e);await o.write(t,Zi,n);let i=await o.read(Zi,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:Xd(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:Xd(s)})}),i}};function wa(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 ts=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]}async add(e,t={index:-1,queued:0,running:0,total:0},n){let o=await Tr(e.id,n);this.addWithKadId(e,o,t)}addWithKadId(e,t,n={index:-1,queued:0,running:0,total:0}){if(this.peerDistances.find(s=>s.peer.id.equals(e.id))!=null)return;let o={peer:e,distance:Un(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let s=this.peerDistances[this.peerDistances.length-1];if(s!=null&&wa(o.distance,s.distance)!==-1)return}let i=!1;for(let s=0;s<this.peerDistances.length;s++){let a=wa(this.peerDistances[s].distance,o.distance);if(a===0||a===1){i=!0,this.peerDistances.splice(s,0,o);break}}i||this.peerDistances.push(o),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e,t){if(this.length===0)return!0;let n=await Tr(e,t),o=Un(n,this.originDhtKey),i=this.peerDistances[this.peerDistances.length-1].distance;return wa(o,i)===-1}async anyCloser(e,t){return e.length===0?!1:Promise.any(e.map(async n=>this.isCloser(n,t)))}};var A2=class{log;routingTable;network;validators;queryManager;components;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e,t){let n,o=await this.routingTable.find(e,t);if(o!=null){this.log("findPeerLocal found %p in routing table",e);try{n=await this.components.peerStore.get(o,t)}catch(i){if(i.name!=="NotFoundError")throw i}}if(n==null)try{n=await this.components.peerStore.get(e,t)}catch(i){if(i.name!=="NotFoundError")throw i}if(n!=null)return this.log("findPeerLocal found %p in peer store",e),{id:n.id,multiaddrs:n.addresses.map(i=>i.multiaddr)}}async*_getValueSingle(e,t,n){let o={type:Ue.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=NI(e),o={index:-1,queued:0,running:0,total:0};for await(let i of this._getValueSingle(e,n,{...t,path:o}))if(yield i,i.name==="PEER_RESPONSE"&&i.record!=null){let s=pt(i.record.value),a=io(s);if(!a.equals(e))throw new bo("public key does not match id");if(a.publicKey==null)throw new bo("public key missing");yield jd({from:e,value:i.record.value,path:o},t)}throw new Xi(`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,t);if(o!=null){this.log("found local"),yield g2({from:this.components.peerId,peer:o,path:{index:-1,queued:0,running:0,total:0}},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a,path:c}){let l={type:Ue.FIND_NODE,key:e.toMultihash().bytes};for await(let u of o.network.sendRequest(s.id,l,{...t,signal:a,path:c}))if(yield u,u.name==="PEER_RESPONSE"){let d=u.closer.find(f=>f.id.equals(e));d!=null&&(yield g2({from:u.from,peer:d,path:u.path},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}if(!n)throw new We("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Ji(e,t),o=new ts(n,this.routingTable.kBucketSize),i=this,s=async function*({peer:a,path:c,peerKadId:l,signal:u}){i.log("getClosestPeers asking %p",a.id);let d={type:Ue.FIND_NODE,key:e};yield*i.network.sendRequest(a.id,d,{...t,signal:u,path:c}),o.addWithKadId(a,l,c)};yield*this.queryManager.run(e,s,t),this.log("found %d peers close to %b",o.length,e);for(let{peer:a,path:c}of o.peers)try{if(a.multiaddrs.length===0&&(a=await i.components.peerStore.getInfo(a.id,t)),a.multiaddrs.length===0)continue;yield g2({from:this.components.peerId,peer:await i.components.peerStore.getInfo(a.id,t),path:{index:c.index,queued:0,running:0,total:0}},t)}catch{continue}}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,n)}catch{let s="invalid record received, discarded";this.log(s),yield Vn({from:o.from,error:new Xi(s),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e,t){if(e.timeReceived==null)throw new h2("invalid record received");await el(this.validators,new Wt(e.key,e.value,e.timeReceived),t)}async getClosestPeersOffline(e,t){let n=[];try{let s=He(e),a=dt(s),c=await this.components.peerStore.get(a,t);n.push({id:c.id,multiaddrs:c.addresses.map(({multiaddr:l})=>l)})}catch{}let o=await Ji(e,t),i=this.routingTable.closestPeers(o,t);for(let s of i)try{n.push(await this.components.peerStore.getInfo(s,t))}catch(a){if(a.name!=="NotFoundError")throw a}return n.length>0?this.log("getClosestPeersOffline returning the %d closest peer(s) we know to %b",n.length,e):this.log("getClosestPeersOffline could not any peers close to %b with %d peers in the routing table",e,this.routingTable.size),n}};var T2=class{log;datastore;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore}async addProvider(e,t,n){this.log.trace("%p provides %s",t,e),await this.writeProviderEntry(e,t,n)}async removeProvider(e,t,n){let o=w2(this.datastorePrefix,e,t);this.log.trace("%p no longer provides %s",t,e),await this.datastore.delete(o,n)}async getProviders(e,t){this.log.trace("get providers for %c",e);let n=await this.loadProviders(e,t);return this.log.trace("got %d providers for %c",n.size,e),[...n.keys()]}async writeProviderEntry(e,t,n){let o=w2(this.datastorePrefix,e,t),i=Zt(n?.time?.getTime()??Date.now());await this.datastore.put(o,i,n)}async loadProviders(e,t){let n=new er,o=w2(this.datastorePrefix,e);for await(let i of this.datastore.query({prefix:o.toString()},t)){let{peerId:s}=y2(i.key);n.set(s,b2(i.value))}return n}};async function*UI(r){let{key:e,startingPeers:t,ourPeerId:n,query:o,alpha:i,path:s,numPaths:a,log:c,peersSeen:l,connectionManager:u,signal:d}=r,f=Ft({objectMode:!0}),h=new $t({concurrency:i,sort:(y,g)=>wa(y.options.distance,g.options.distance)});h.addEventListener("idle",()=>{f.push(kI({path:{index:s,queued:h.queued,running:h.running,total:h.size}},r)),f.end()}),h.addEventListener("failure",y=>{c.error("error during query - %e",y.detail.error)});let p=()=>{h.abort(),f.end(new sr)};d.addEventListener("abort",p);try{let g=function(m,b){if(m==null)return;l.add(m.id.toMultihash().bytes);let v=Un(b,y);h.add(async()=>{try{for await(let L of o({...r,key:e,peer:m,path:{index:s,queued:h.queued,running:h.running,total:h.size},numPaths:a,peerKadId:b,signal:d})){if(L.name==="PEER_RESPONSE")for(let V of L.closer){if(l.has(V.id.toMultihash().bytes)){c("already seen %p in query",V.id);continue}if(n.equals(V.id)){c("not querying ourselves");continue}if(!await u.isDialable(V.multiaddrs)){c("not querying undialable peer");continue}let $=await Tr(V.id,{signal:d}),Y=Un($,y);if(wa(Y,v)!==-1){c("skipping %p as they are not closer to %b than %p",V.id,e,m.id);continue}c("querying closer peer %p",V.id),g(V,$)}f.push({...L,path:{index:s,queued:h.queued,running:h.running,total:h.size}})}}catch(L){f.push(Vn({from:m.id,error:L,path:{index:s,queued:h.queued,running:h.running-1,total:h.size-1}},r))}},{distance:v}).catch(L=>{c.error("error during query - %e",L)})},y=await Ji(e,{signal:d});await Promise.all(t.map(async m=>{g({id:m,multiaddrs:[]},await Tr(m,{signal:d}))})),yield*f}finally{d.removeEventListener("abort",p)}}var _2=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??f2,this.alpha=t.alpha??ji,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.allowQueryWithZeroPeers=t.allowQueryWithZeroPeers??!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(TI);n={...n,signal:c}}let o=new AbortController,i=we([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+N(e,"base58btc")),a=!1;try{this.routingTable.size===0&&!this.allowQueryWithZeroPeers&&(s("routing table was empty, waiting for some peers before running%s query",n.isSelfQuery===!0?" self":""),await Le(this.routingTable,"peer:add",{signal:i,filter:h=>!this.peerId.equals(h.detail)}),s("routing table has peers, continuing with%s query",n.isSelfQuery===!0?" self":"")),n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial self query before continuing"),await qe(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await Ji(e,{signal:i}),l=this.routingTable.closestPeers(c,{count:this.routingTable.kBucketSize}),u=l.sort(()=>Math.random()>.5?1:-1).reduce((h,p,y)=>(h[y%this.disjointPaths].push(p),h),new Array(this.disjointPaths).fill(0).map(()=>[])).filter(h=>h.length>0);if(l.length===0){s.error("running query with no peers");return}let d=Mt(1024),f=u.map((h,p)=>UI({...n,key:e,startingPeers:h,ourPeerId:this.peerId,signal:i,query:t,path:p,numPaths:u.length,alpha:this.alpha,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of fr(...f)){if(h.name==="QUERY_ERROR"&&s.error("query error - %e",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs,{signal:i})&&await this.routingTable.add(p.id,{signal:i});i.throwIfAborted(),yield h}a=!0}catch(c){if(this.running)throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query finished")}}};function f$(r){return r[Symbol.asyncIterator]!=null}function h$(r){if(f$(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 I2=h$;var C2=class{log;peerId;peerRouting;events;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.events=e.events,this.running=!1,this.peerRouting=t.peerRouting,this.count=t.count??f2,this.interval=t.interval??xI,this.initialInterval=t.initialInterval??EI,this.queryTimeout=t.queryTimeout??vI,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=x2(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){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=Se(),this.running){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);e.push(n)}let t=we(e);this.controller.signal;try{this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await rc(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),s=>Bi(s,this.count),async s=>I2(s));t?.throwIfAborted();let i=Date.now()-n;this.log("self-query found %d peers in %dms",o,i),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:o,duration:i}}))}catch(n){this.log.error("self-query error - %e",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.interval))}};var k2=class extends ue{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new $t({concurrency:t.concurrency??gI,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Sn({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_timeout_milliseconds`}),this.datastore=e.datastore,this.addressManager=e.addressManager,this.datastorePrefix=`${t.datastorePrefix}/provider`,this.reprovideThreshold=t.threshold??mI,this.maxQueueSize=t.maxQueueSize??yI,this.validity=t.validity??d2,this.interval=t.interval??wI,this.contentRouting=t.contentRouting,this.running=!1,this.reprovide=x2(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(J5)}).catch(e=>{this.log.error("error running process to reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async processRecords(e){try{this.safeDispatchEvent("reprovide:start"),this.log("starting reprovide/cleanup");for await(let t of this.datastore.query({prefix:this.datastorePrefix},e))try{let{cid:n,peerId:o}=y2(t.key),s=b2(t.value).getTime()+this.validity,a=Date.now(),c=a>s,l=this.peerId.equals(o);this.log.trace("comparing: %d (now) < %d (expires) = %s %s",a,s,c,c?"(expired)":"(valid)"),c&&!l&&await this.datastore.delete(t.key,e),this.shouldReprovide(l,s)&&(this.log("reproviding %c as it is within the reprovide threshold (%d)",n,this.reprovideThreshold),this.queueReprovide(n).catch(u=>{this.log.error("could not reprovide %c - %e",n,u)}))}catch(n){this.log.error("error processing datastore key %s - %s",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{this.safeDispatchEvent("reprovide:end"),this.running&&(this.log("queuing next re-provide/cleanup run in %d ms",this.interval),this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(J5)}).catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}shouldReprovide(e,t){if(!e)return!1;let n=Date.now();return t<n?!0:t-n<this.reprovideThreshold}async queueReprovide(e,t){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize,t);let n=this.reprovideQueue.queue.find(o=>o.options.cid.equals(e));if(n!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),n.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async o=>{if(o.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let i=this.reprovideTimeout.getTimeoutSignal(o);try{await this.reprovide(o.cid,o)}finally{this.reprovideTimeout.cleanUp(i)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(o=>{this.log.error("could not re-provide key %c - %e",e,o)})}async reprovide(e,t){await yr(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var p$=20,m$=5e3,g$="kad-close",y$=50,R2=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;running;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??m$,this.peerSetSize=t.peerSetSize??p$,this.closeTagName=t.closeTagName??g$,this.closeTagValue=t.closeTagValue??y$,this.closestPeers=new Wr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await Tr(this.components.peerId);this.newPeers=new ts(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.running=!1,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 Wr(this.newPeers?.peers.map(({peer: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},[ey]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[ey]:void 0}})})])}};function Qd(r){return Array.isArray(r?.peers)}var P2=class{peerId;root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e,t){this.peerId=e.peerId,this.prefixLength=t.prefixLength??FI,this.kBucketSize=t.kBucketSize??Zd,this.splitThreshold=t.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=t.numberOfOldContactsToPing??$I,this.lastPingThreshold=t.lastPingThreshold??VI,this.ping=t.ping,this.verify=t.verify,this.onAdd=t.onAdd,this.onRemove=t.onRemove,this.addingPeerMap=Ho({name:`${t.metricsPrefix}_adding_peer_map`,metrics:e.metrics}),this.root={prefix:"",depth:0,peers:[]}}async start(){await this.addSelfPeer(this.peerId)}stop(){this.addingPeerMap.clear(),this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e,t){this.localPeer={peerId:e,kadId:await Tr(e,t),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await Tr(e,t),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}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,t),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!b$(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n,t);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,a)=>s.lastPing<a.lastPing?-1:s.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId,t);i&&await this._add(e,t)}*closest(e,t){let n=new ts(e,t?.count??this.kBucketSize);for(let o of this.toIterable())t?.exclude?.some(i=>i.equals(o.peerId))!==!0&&n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*ln(n.peers,({peer:o})=>o.id)}count(){function e(t){if(Qd(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,t){let n=this._determineBucket(e),o=this._indexOf(n,e);if(o>-1){let i=n.peers.splice(o,1)[0];await this.onRemove?.(i,n,t)}}*toIterable(){function*e(t){if(Qd(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+N(Un(e,t),"base16"))}_determineBucket(e){let t=N(e,"base2");function n(o,i=0){return Qd(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>se(n.kadId,t))}async _split(e,t){let n={prefix:"0",depth:e.depth+1,peers:[]},o={prefix:"1",depth:e.depth+1,peers:[]};for(let i of e.peers)N(i.kadId,"base2")[e.depth]==="0"?(n.peers.push(i),await this.onMove?.(i,e,n,t)):(o.peers.push(i),await this.onMove?.(i,e,o,t));w$(e,n,o)}};function w$(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function b$(r,e){return r.lastPing<Date.now()-e}var Zd=20,FI=6;var x$=20,E$=100,$I=3;var v$=20,S$=100,KI="kad-peer",A$=1,VI=6e5,T$=!0,_$=1e3,L2=class extends ue{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;shutdownController;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??Zd,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??KI,this.peerTagValue=t.peerTagValue??A$,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??T$,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??_$,this.shutdownController=new AbortController,this.shutdownController.signal,this.pingOldContactQueue=new Kt({concurrency:t.pingOldContactConcurrency??v$,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??S$}),this.pingOldContactTimeout=new Sn({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new Kt({concurrency:t.pingNewContactConcurrency??x$,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??E$}),this.pingNewContactTimeout=new Sn({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new P2(e,{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,metricsPrefix:t.metricsPrefix}),this.closestPeerTagger=new R2(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.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,await xt(this.closestPeerTagger,this.kb))}async afterStart(){let e=0;Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let t=we([this.shutdownController.signal,AbortSignal.timeout(2e4)]);try{for(let n of await this.components.peerStore.all({filters:[o=>o.protocols.includes(this.protocol)&&o.tags.has(KI)],limit:this.populateFromDatastoreLimit,signal:t})){if(!this.running)return;try{await this.add(n.id,{signal:t}),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(n.id,{tags:{[this.peerTagName]:void 0}})}}}finally{t.clear()}this.log("added %d peer store peers to the routing table",e)}).catch(t=>{this.log.error("error adding %d, peer store peers to the routing table - %e",e,t)})}async stop(){this.running=!1,await St(this.closestPeerTagger,this.kb),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort(),this.shutdownController.abort()}async peerAdded(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}},n),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 i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=we([c,this.shutdownController.signal,a?.signal]);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 jo(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=we([n,this.shutdownController.signal,t?.signal]);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{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{return this.log("pinging contact %p",e.peerId),await this.components.ping.ping(e.peerId,t),this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0}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,t){let n=await Tr(e,t);return this.kb.get(n)?.peerId}closestPeer(e){let t=this.closestPeers(e,{count:1});if(t.length>0)return t[0]}closestPeers(e,t){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,t){if(this.kb==null)throw new Error("RoutingTable is not started");let n=await Tr(e,t);await this.kb.remove(n,t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(a){if(Qd(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>i&&(i=a.peers.length);return}s(a.left),s(a.right)}s(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(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var HI=[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 D2=15,N2=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??SI,this.refreshQueryTimeout=s??AI,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,t){this.log("refreshing routing table");let n=this._maxCommonPrefix(),o=this._getTrackedCommonPrefixLengthsForRefresh(n);this.log(`max common prefix length ${n}`),this.log(`tracked CPLs [ ${o.map(i=>i.toISOString()).join(", ")} ]`),Promise.all(o.map(async(i,s)=>{try{if(await this._refreshCommonPrefixLength(s,i,e,t),this._numPeersForCpl(n)===0){let a=Math.min(2*(s+1),o.length-1);for(let c=s+1;c<a+1;c++)try{await this._refreshCommonPrefixLength(c,i,e,t)}catch(l){this.log.error("failed to refresh entries with common prefix length %d - %e",c,l)}}}catch(a){this.log.error("failed to refresh entries with common prefix length - %e",a)}})).catch(i=>{this.log.error("failed to refresh table - %e",i)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(i=>{this.log.error("failed to set refresh timeout - %e",i)})}async _refreshCommonPrefixLength(e,t,n,o){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 i=this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,i,this.routingTable.size);let s=we([o?.signal,AbortSignal.timeout(this.refreshQueryTimeout)]);try{let a=await I2(this.peerRouting.getClosestPeers(i.toMultihash().bytes,{signal:s}));this.log(`found ${a} peers that were close to imaginary peer %p`,i),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,i,this.routingTable.size)}finally{s.clear()}}_getTrackedCommonPrefixLengthsForRefresh(e){e>D2&&(e=D2);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}_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=dr(2),n=(t[1]<<8)+t[0],o=this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=He(o);return dt(i)}_makePeerId(e,t,n){if(n>D2)throw new Error(`Cannot generate peer ID for common prefix length greater than ${D2}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=s&a|t&~a,l=HI[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,st.code),d.setUint8(1,32),d.setUint32(2,l,!1),new Uint8Array(d.buffer,d.byteOffset,d.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=Un(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var O2=class{peerId;providers;peerStore;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.peerId=e.peerId,this.providers=t.providers,this.peerStore=e.peerStore}async handle(e,t){if(t.key==null||t.key.length===0)throw new ve("Missing key");let n;try{n=J.decode(t.key)}catch{throw new ve("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=He(o.id),s=dt(i),a=o.multiaddrs.map(c=>j(c));if(!e.equals(s)){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,a),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:a})}))}};var B2=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){this.log("incoming request from %p for peers close to %b",e,t.key);try{if(t.key==null)throw new ve("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getClosestPeersOffline(t.key,{exclude:[e,this.peerId]});se(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(421))});let o={type:Ue.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0?this.log("could not find any peers closer to %b for %p",t.key,e):this.log("found %d peers close to %b for %p",o.closer.length,t.key,e),o}catch(n){throw this.log("error during finding peers closer to %b for %p - %e",t.key,e,n),n}}};var M2=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new ve("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=J.decode(t.key)}catch{throw new ve("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([Wo(ln(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getClosestPeersOffline(t.key)]),s={type:Ue.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var U2=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,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 ve("Invalid key");let o={type:Ue.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(OI(n)){this.log("is public key");let a=BI(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new We("No public key found in key book");c=_t(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new Wt(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getClosestPeersOffline(n)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.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=es(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=Wt.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>d2){await this.datastore.delete(t);return}return o}};var F2=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 $2=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,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)throw this.log.error("empty record from %p",e),new ve(`Empty record from: ${e}`);try{let o=Wt.deserialize(t.record);await el(this.validators,o),o.timeReceived=new Date;let i=es(this.datastorePrefix,o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var V2=class{handlers;log;metrics;incomingMessageTimeout;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`),rpcTime:e.metrics?.registerMetricGroup(`${t.metricsPrefix}_inbound_rpc_time_seconds`,{label:"operation"})},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.incomingMessageTimeout=t.incomingMessageTimeout??1e4,this.handlers={[Ue.GET_VALUE.toString()]:new U2(e,t),[Ue.PUT_VALUE.toString()]:new $2(e,t),[Ue.FIND_NODE.toString()]:new B2(e,t),[Ue.ADD_PROVIDER.toString()]:new O2(e,t),[Ue.GET_PROVIDERS.toString()]:new M2(e,t),[Ue.PING.toString()]:new F2(e,t)}}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})}}async onIncomingStream(e,t){let n=()=>{e.abort(new zn)},o=AbortSignal.timeout(this.incomingMessageTimeout);o.addEventListener("abort",n);let i=Qe(e).pb(Zi);for(;;){if(e.readStatus!=="readable"){await e.close({signal:o});break}let s=await i.read({signal:o}),a=this.metrics?.rpcTime?.timer(s.type.toString()),c=this.metrics?.rpcTime?.timer(s.type.toString()),l=!1;try{this.log("incoming %s from %p",s.type,t.remotePeer);let u=await this.handleMessage(t.remotePeer,s);u!=null&&await i.write(u,{signal:o})}catch(u){throw l=!0,c?.(),u}finally{l||a?.()}o.removeEventListener("abort",n),o=AbortSignal.timeout(this.incomingMessageTimeout),o.addEventListener("abort",n)}}};var K2=class extends ue{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 sy=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await yr(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers.map(o=>({...o,routing:"kad-dht"})))}async put(e,t,n){await yr(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 We("Could not find value for key")}},ay=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 We("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},I$=32,C$=64,H2=class extends ue{k;a;d;protocol;routingTable;providers;network;peerRouting;components;log;running;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;onPeerConnectTimeout;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",i=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${i}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${i}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${i}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${i}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.k=t.kBucketSize??Zd,this.a=t.alpha??ji,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??pI,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??I$,this.maxOutboundStreams=t.maxOutboundStreams??C$,this.peerInfoMapper=t.peerInfoMapper??DI,this.onPeerConnectTimeout=t.onPeerConnectTimeout??bI,this.providers=new T2(e,{...t.providers,logPrefix:n,datastorePrefix:o}),this.validators={...LI,...t.validators},this.selectors={...PI,...t.selectors},this.network=new S2(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new L2(e,{kBucketSize:this.k,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:i,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let a=Se();t.allowQueryWithZeroPeers===!0&&a.resolve(),this.queryManager=new _2(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new A2(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new E2(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new v2(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new N2(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new V2(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new K2(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new C2(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:s}),this.reprovider=new k2(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,operationMetrics:s}),this.network.addEventListener("peer",c=>{let l=c.detail;this.onPeerConnect(l).catch(u=>{this.log.error("could not add %p to routing table - %e",l.id,u)}),this.dispatchEvent(new CustomEvent("peer",{detail:l}))}),this.topologyListener.addEventListener("peer",c=>{let l=c.detail;Promise.resolve().then(async()=>{let u=await this.components.peerStore.get(l),d={id:l,multiaddrs:u.addresses.map(({multiaddr:f})=>f),protocols:u.protocols};await this.onPeerConnect(d)}).catch(u=>{this.log.error("could not add %p to routing table - %e",l,u)})}),this.dhtPeerRouting=new ay(this),this.dhtContentRouting=new sy(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",c=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let l=c.detail.peer.addresses.some(({multiaddr:d})=>!ut(d)&&!Nt.exactMatch(d)),u=this.getMode();l&&u==="client"?await this.setMode("server"):u==="server"&&!l&&await this.setMode("client")}).catch(l=>{this.log.error("error setting dht server mode - %e",l)})}),this.get=ya(this.get.bind(this),s,"GET_VALUE"),this.findProviders=ya(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=ya(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=ya(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=ya(this.provide.bind(this),s,"PROVIDE"),this.put=ya(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Te]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery","@libp2p/kad-dht"];[Ir]=["@libp2p/identify","@libp2p/ping"];get[wo](){return this.dhtContentRouting}get[xo](){return this.dhtPeerRouting}get[as](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id,e.multiaddrs),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(n=>n.toString()));return}let t=AbortSignal.timeout(this.onPeerConnectTimeout);try{await this.routingTable.add(e.id,{signal:t})}catch(n){this.log.error("could not add %p to routing table - %e",e.id,n)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t){if(e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol,t),e===this.getMode()&&t?.force!==!0){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),{signal:t?.signal,maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",{force:!0}),await xt(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await xt(this.querySelf))}async stop(){this.running=!1,await St(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}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 cancelReprovide(e,t){await this.providers.removeProvider(e,this.components.peerId,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(e){this.routingTableRefresh.refreshTable(!0,e)}};var qI;(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",r[r.PATH_ENDED=8]="PATH_ENDED"})(qI||(qI={}));function zI(r={}){return e=>new H2(e,r)}var Fe;(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"})(Fe||(Fe={}));var Jd=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),cy=Object.freeze({NEW_STREAM:Fe.NEW_STREAM,MESSAGE:Fe.MESSAGE_INITIATOR,CLOSE:Fe.CLOSE_INITIATOR,RESET:Fe.RESET_INITIATOR}),WI=Object.freeze({MESSAGE:Fe.MESSAGE_RECEIVER,CLOSE:Fe.CLOSE_RECEIVER,RESET:Fe.RESET_RECEIVER});var ef=1<<20,ly=4<<20,q2=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=ef,t=ly){this._buffer=new ne,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 ve("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:i,offset:s}=this._headerInfo;if(this._buffer.length-s<i)break;let c={id:n,type:o};(o===Fe.NEW_STREAM||o===Fe.MESSAGE_INITIATOR||o===Fe.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(s,s+i)),t.push(c),this._buffer.consume(s+i),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=YI(e),{value:o,offset:i}=YI(e,n),s=t&7;if(Jd[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new ve("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},k$=128,GI=127;function YI(r,e=0){let t=0,n=0,o=e,i,s=r.length;do{if(o>=s||n>49)throw e=0,new RangeError("Could not decode varint");i=r.get(o++),t+=n<28?(i&GI)<<n:(i&GI)*Math.pow(2,n),n+=7}while(i>=k$);return e=o-e,{value:t,offset:e}}var uy=10*1024,dy=class{_pool;_poolOffset;constructor(){this._pool=Re(uy),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Zt(e.id<<3|e.type,n,o),o+=ye(e.id<<3|e.type),(e.type===Fe.NEW_STREAM||e.type===Fe.MESSAGE_INITIATOR||e.type===Fe.MESSAGE_RECEIVER)&&e.data!=null?(Zt(e.data.length,n,o),o+=ye(e.data.length)):(Zt(0,n,o),o+=ye(0));let i=n.subarray(this._poolOffset,o);uy-o<100?(this._pool=Re(uy),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===Fe.NEW_STREAM||e.type===Fe.MESSAGE_INITIATOR||e.type===Fe.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},R$=new dy;function tf(r){let e=new ne;return R$.write(r,e),e}var fy=class extends Ai{streamId;types;maxDataSize;muxer;constructor(e){super(e),this.types=e.direction==="outbound"?cy:WI,this.maxDataSize=e.maxDataSize,this.muxer=e.muxer,this.streamId=parseInt(this.id.substring(1)),e.direction==="outbound"&&queueMicrotask(()=>{this.muxer.send(tf({id:this.streamId,type:cy.NEW_STREAM,data:new ne(R(this.id))}))})}sendData(e){let t=new ne,n=e.byteLength;for(;e.byteLength>0;){let o=Math.min(e.byteLength,this.maxDataSize),i=e.sublist(0,o);e=e.sublist(o),t.append(tf({id:this.streamId,type:this.types.MESSAGE,data:i}))}return{sentBytes:n,canSendMore:this.muxer.send(t)}}sendReset(){return this.muxer.send(tf({id:this.streamId,type:this.types.RESET}))}async sendCloseWrite(e){this.muxer.send(tf({id:this.streamId,type:this.types.CLOSE})),e?.signal?.throwIfAborted()}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}};function jI(r){let{id:e,muxer:t,direction:n,maxMsgSize:o=ef}=r;return new fy({...r,id:n==="outbound"?`i${e}`:`r${e}`,direction:n,maxDataSize:o,muxer:t,log:r.log.newScope(`${n}:${e}`),protocol:""})}var P$=5;function L$(r){let e={...r,type:`${Jd[r.type]} (${r.type})`};return r.type===Fe.NEW_STREAM&&(e.data=N(r.data.subarray())),(r.type===Fe.MESSAGE_INITIATOR||r.type===Fe.MESSAGE_RECEIVER)&&(e.data=N(r.data.subarray(),"base16")),e}var z2=class extends Si{_streamId;rateLimiter;maxMessageSize;maxUnprocessedMessageQueueSize;decoder;constructor(e,t){super(e,{...t,protocol:"/mplex/6.7.0",name:"mplex"}),this._streamId=0,this.maxMessageSize=t.maxMessageSize??ef,this.maxUnprocessedMessageQueueSize=t.maxUnprocessedMessageQueueSize??ly,this.decoder=new q2(this.maxMessageSize,this.maxUnprocessedMessageQueueSize),this.rateLimiter=new dc({points:t.disconnectThreshold??P$,duration:1})}onData(e){for(let t of this.decoder.write(e))this.handleMessage(t)}onCreateStream(e){if(this.status!=="open")throw new hn("Muxer already closed");let t=this._streamId++;return this._newStream(t,"outbound",e)}_newStream(e,t,n){return this.log("new %s stream %s",t,e),jI({...n,id:e,direction:t,maxMsgSize:this.maxMessageSize,log:this.log,muxer:this})}handleMessage(e){if(this.log.enabled&&this.log.trace("incoming message",L$(e)),e.type===Fe.NEW_STREAM){try{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}let o=this._newStream(e.id,"inbound",this.streamOptions);this.onRemoteStream(o);return}let t=`${(e.type&1)===1?"i":"r"}${e.id}`,n=this.streams.find(o=>o.id===t);if(n==null){this.log("missing stream %s for message type %s",t,Jd[e.type]);try{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}try{switch(e.type){case Fe.MESSAGE_INITIATOR:case Fe.MESSAGE_RECEIVER:n.onData(e.data);break;case Fe.CLOSE_INITIATOR:case Fe.CLOSE_RECEIVER:n.onRemoteCloseWrite();break;case Fe.RESET_INITIATOR:case Fe.RESET_RECEIVER:n.onRemoteReset();break;default:this.log("unknown message type")}}catch(o){this.log.error("error while processing message - %e",o),n.abort(o)}}};var hy=class{protocol="/mplex/6.7.0";_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@libp2p/mplex";[Te]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new z2(e,{...this._init})}};function XI(r={}){return()=>new hy(r)}var QI="1.0.0",ZI="ping",JI="ipfs";var W2=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;constructor(e,t={}){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??JI}/${ZI}/${QI}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handlePing=this.handlePing.bind(this)}[Symbol.toStringTag]="@libp2p/ping";[Te]=["@libp2p/ping"];async start(){await this.components.registrar.handle(this.protocol,this.handlePing,{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}async handlePing(e,t){let n=e.log.newScope("ping");n.trace("ping from %p",t.remotePeer);let o=AbortSignal.timeout(this.timeout);o.addEventListener("abort",()=>{e.abort(new zn("Ping timed out"))});let i=Date.now();for await(let s of e){if(e.status!=="open"){n("stream status changed to %s",e.status);break}e.send(s)||(n("waiting for stream to drain"),await Le(e,"drain",{rejectionEvents:["close"],signal:o}),n("stream drained"))}n("ping from %p complete in %dms",t.remotePeer,Date.now()-i),await e.close({signal:o})}async ping(e,t={}){let n=dr(32),o=await this.components.connectionManager.openStream(e,this.protocol,{runOnLimitedConnection:this.runOnLimitedConnection,...t}),i=o.log.newScope("ping");try{let s=Date.now(),a=Promise.withResolvers(),c=new ne,l=u=>{if(c.append(u.data),c.byteLength===32){o.removeEventListener("message",l);let d=Date.now()-s;Promise.all([o.closeRead(t)]).then(()=>{if(se(n,c.subarray()))a.resolve(d);else throw new is(`Received wrong ping ack after ${d}ms`)}).catch(f=>{o.abort(f),a.reject(f)})}};return o.addEventListener("message",l),o.send(n),await o.close(t),await qe(a.promise,t.signal)}catch(s){throw i.error("error while pinging %o - %e",e,s),o?.abort(s),s}finally{o?.close()}}};function tC(r={}){return e=>new W2(e,r)}var ir;(function(r){let e;(function(a){a.FIN="FIN",a.STOP_SENDING="STOP_SENDING",a.RESET="RESET",a.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(a){a[a.FIN=0]="FIN",a[a.STOP_SENDING=1]="STOP_SENDING",a[a.RESET=2]="RESET",a[a.FIN_ACK=3]="FIN_ACK"})(t||(t={})),(function(a){a.codec=()=>lt(t)})(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.flag!=null&&(c.uint32(8),r.Flag.codec().encode(a.flag,c)),a.message!=null&&(c.uint32(18),c.bytes(a.message)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.flag=r.Flag.codec().decode(a);break}case 2:{u.message=a.bytes();break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.flag`,value:r.Flag.codec().decode(a)};break}case 2:{yield{field:`${l}.message`,value:a.bytes()};break}default:{a.skipType(f&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(ir||(ir={}));var rC=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],py=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),nC="libp2p+webrtc+v1/",oC=2*1024*1024,tl=16*1024;function B$(r=tl){let e=ye(r-ye(r)),t=1+ye(Object.keys(ir.Flag).length-1),n=1,o=r-e-t-n,i=ye(o);return e+t+n+i}var iC=B$();var sC=1e4,my="/webrtc",rf="/webrtc-signaling/0.0.1";var aC=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},M$=(function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r})();var U$=(function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r})();var F$=(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 $$=(function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r})();var V$=(function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r})();var K$=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,H$=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,cC=3,q$=[["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",K$]],lC=[["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 dC(r){return r?uC(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new V$:typeof navigator<"u"?uC(navigator.userAgent):G$()}function z$(r){return r!==""&&q$.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var i=o.exec(r);return!!i&&[n,i]},!1)}function uC(r){var e=z$(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new $$;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<cC&&(o=aC(aC([],o,!0),Y$(cC-o.length),!0)):o=[];var i=o.join("."),s=W$(r),a=H$.exec(r);return a&&a[1]?new F$(t,i,s,a[1]):new M$(t,i,s)}function W$(r){for(var e=0,t=lC.length;e<t;e++){var n=lC[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function G$(){var r=typeof process<"u"&&process.version;return r?new U$(process.version.slice(1)):null}function Y$(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var fC=dC(),G2=fC!=null&&fC.name==="firefox";async function gy(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??rC.map(e=>({urls:[e]})),r}var hC=(r=32)=>nC+[...Array(r)].map(()=>py.at(Math.floor(Math.random()*py.length))).join("");var yy=class extends Ai{channel;incomingData;maxBufferedAmount;receivedFinAck;finAckTimeout;constructor(e){super({...e,maxMessageSize:(e.maxMessageSize??tl)-iC}),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=Ft(),this.maxBufferedAmount=e.maxBufferedAmount??oC,this.finAckTimeout=e.finAckTimeout??sC,this.channel.onclose=()=>{this.log.trace("received datachannel close event"),this.onRemoteCloseWrite(),this.onTransportClosed()},this.channel.onerror=n=>{let o=n.error;this.log.trace("received datachannel error event - %e",o),this.abort(o)},this.channel.onmessage=async n=>{this.log("incoming message %d bytes",n.data.byteLength);let{data:o}=n;o===null||o.byteLength===0||this.incomingData.push(new Uint8Array(o,0,o.byteLength))},this.channel.bufferedAmountLowThreshold=0,this.channel.onbufferedamountlow=()=>{this.writableNeedsDrain&&this.safeDispatchEvent("drain")},Promise.resolve().then(async()=>{for await(let n of Fs(this.incomingData))this.processIncomingProtobuf(n)}).catch(n=>{this.log.error("error processing incoming data channel messages - %e",n)});let t=()=>{this.channel.readyState==="open"&&(this.log.trace("stream closed, closing underlying datachannel"),this.channel.close())};this.addEventListener("close",t),this.channel.readyState!=="open"&&(this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),Le(this.channel,"open",{rejectionEvents:["close","error"]}).then(()=>{this.log('channel ready state is now "%s", dispatching drain',this.channel.readyState),this.safeDispatchEvent("drain")}).catch(n=>{this.abort(n.error??n)}))}sendNewStream(){}_sendMessage(e){if(this.channel.readyState!=="open")throw new Hn(`Invalid datachannel state - ${this.channel.readyState}`);if(this.log.trace('sending message, channel state "%s"',this.channel.readyState),G2){this.channel.send(e.subarray());return}for(let t of e)this.channel.send(t)}sendData(e){return this.channel.readyState!=="open"?{sentBytes:0,canSendMore:!1}:(this._sendMessage(Mo.single(ir.encode({message:e.subarray()}))),{sentBytes:e.byteLength,canSendMore:this.channel.bufferedAmount<this.maxBufferedAmount})}sendReset(e){try{this.log.error("sending reset - %e",e),this._sendFlag(ir.Flag.RESET),this.receivedFinAck?.reject(e)}catch(t){this.log.error("failed to send reset - %e",t)}}async sendCloseWrite(e){this._sendFlag(ir.Flag.FIN),e?.signal?.throwIfAborted(),this.receivedFinAck=Promise.withResolvers();let t=e?.signal??AbortSignal.timeout(this.finAckTimeout),n=[Le(this.channel,"close",{signal:t}),Le(this.channel,"error",{signal:t})];await Promise.any([qe(this.receivedFinAck.promise,t),...n]).finally(()=>{n.forEach(o=>o.cancel())})}async sendCloseRead(e){this._sendFlag(ir.Flag.STOP_SENDING),e?.signal?.throwIfAborted()}processIncomingProtobuf(e){let t=ir.decode(e);t.message!=null&&(this.readStatus==="readable"||this.readStatus==="paused")&&this.onData(new ne(t.message)),t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===ir.Flag.FIN&&(this._sendFlag(ir.Flag.FIN_ACK),this.onRemoteCloseWrite()),t.flag===ir.Flag.RESET&&(this.receivedFinAck?.reject(new Ea("The stream was reset")),this.onRemoteReset()),t.flag===ir.Flag.STOP_SENDING&&this.onRemoteCloseRead(),t.flag===ir.Flag.FIN_ACK&&this.receivedFinAck?.resolve())}_sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',e.toString(),this.channel.readyState),!1;this.log.trace("sending flag %s",e.toString());let t=ir.encode({flag:e}),n=Mo.single(t);try{return this._sendMessage(n),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}sendPause(){}sendResume(){}};function nf(r){let{channel:e,direction:t,isHandshake:n}=r;return new yy({...r,id:`${e.id}`,log:r.log.newScope(`${n===!0?"handshake":t}:${e.id}`),protocol:""})}var rs=class{protocol;peerConnection;metrics;dataChannelOptions;earlyDataChannels;constructor(e){this.onEarlyDataChannel=this.onEarlyDataChannel.bind(this),this.peerConnection=e.peerConnection,this.metrics=e.metrics,this.protocol=e.protocol??my,this.dataChannelOptions=e.dataChannelOptions??{},this.peerConnection.addEventListener("datachannel",this.onEarlyDataChannel),this.earlyDataChannels=[]}onEarlyDataChannel(e){this.earlyDataChannels.push(e.channel)}createStreamMuxer(e){return this.peerConnection.removeEventListener("datachannel",this.onEarlyDataChannel),new wy(e,{peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,protocol:this.protocol,earlyDataChannels:this.earlyDataChannels})}},wy=class extends Si{peerConnection;dataChannelOptions;constructor(e,t){super(e,{...t,name:"muxer"}),this.peerConnection=t.peerConnection,this.protocol=t.protocol??my,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{this.onDataChannel(n)},queueMicrotask(()=>{if(this.status!=="open"){t.earlyDataChannels.forEach(n=>{n.close()});return}t.earlyDataChannels.forEach(n=>{this.onDataChannel(n)})})}onDataChannel(e){if(this.log("incoming datachannel with channel id %d, protocol %s and status %s",e.id,e.protocol,e.readyState),e.label==="init"){this.log.trace("closing init channel %d",e.id),e.close();return}let t=nf({...this.streamOptions,...this.dataChannelOptions,channel:e,direction:"inbound",log:this.log});this.onRemoteStream(t)}async onCreateStream(e){let t=this.peerConnection.createDataChannel("",{});return this.log("open channel %d for protocol %s",t.id,e?.protocol),nf({...e,...this.dataChannelOptions,channel:t,direction:"outbound",log:this.log})}onData(){}};var by=class extends vi{peerConnection;constructor(e){super(e),this.peerConnection=e.peerConnection;let t=e.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change %s initial state %s",this.peerConnection.connectionState,t),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.onTransportClosed(),this.peerConnection.close())}}sendData(e){return{sentBytes:e.byteLength,canSendMore:!0}}async sendClose(e){this.peerConnection.close(),e?.signal?.throwIfAborted()}sendReset(){this.peerConnection.close()}sendPause(){}sendResume(){}},of=r=>new by(r);var Y2=globalThis.RTCPeerConnection,j2=globalThis.RTCSessionDescription,pC=globalThis.RTCIceCandidate;var ns=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},fn=class extends ns{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var X2=class extends ns{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var Q2=class extends ns{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},Z2=class extends ns{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 _r;(function(r){let e;(function(a){a.SDP_OFFER="SDP_OFFER",a.SDP_ANSWER="SDP_ANSWER",a.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.SDP_OFFER=0]="SDP_OFFER",a[a.SDP_ANSWER=1]="SDP_ANSWER",a[a.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),(function(a){a.codec=()=>lt(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.data!=null&&(c.uint32(18),c.string(a.data)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{u.data=a.string();break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{yield{field:`${l}.data`,value:a.string()};break}default:{a.skipType(f&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(_r||(_r={}));var J2=async(r,e,t)=>{try{let n=Promise.withResolvers();for(j$(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==_r.Type.ICE_CANDIDATE)throw new ve("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new K("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new pC(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new K("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received %o - %e",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate - %e",t.direction,n),t.signal?.aborted===!0&&r.connectionState!=="connected")throw n}};function j$(r,e){if(r.connectionState==="connected"){e.resolve();return}r.onconnectionstatechange=t=>{switch(r.connectionState){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new xa(`RTCPeerConnection connection state became "${r.connectionState}"`));break;default:break}}}function eg(r){let e;for(let t of r.getComponents())t.name==="p2p"&&(e=Xe(t.value??""));if(e==null)throw new qn("Remote peerId must be present in multiaddr");return e}async function mC({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{circuitAddress:u,targetPeer:d}=gC(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing circuit address: %a",u);let f=i.getConnections(d),h;f.length===0?(l?.(new K("webrtc:dial-relay")),h=await s.dial(u,{signal:t,onProgress:l})):(l?.(new K("webrtc:reuse-relay-connection")),h=f[0]),l?.(new K("webrtc:open-signaling-stream"));let p=await h.newStream(rf,{signal:t,runOnLimitedConnection:!0}),y=Qe(p).pb(_r),g=new Y2(r);g.addEventListener("connectionstatechange",()=>{switch(g.connectionState){case"closed":g.close();break;default:break}});let m=new rs({peerConnection:g,dataChannelOptions:e});try{let b=g.createDataChannel("init");g.onicecandidate=({candidate:$})=>{if(g.connectionState==="connected"){a.trace("ignore new ice candidate as peer connection is already connected");return}if($==null||$?.candidate===""){a.trace("initiator detected end of ICE candidates");return}let Y=JSON.stringify($?.toJSON()??null);a.trace("initiator sending ICE candidate %o",$),y.write({type:_r.Type.ICE_CANDIDATE,data:Y},{signal:t}).catch(T=>{a.error("error sending ICE candidate - %e",T)})},g.onicecandidateerror=$=>{a.error("initiator ICE candidate error",$)};let v=await g.createOffer().catch($=>{throw a.error("could not execute createOffer - %e",$),new fn("Failed to set createOffer")});a.trace("initiator send SDP offer %s",v.sdp),l?.(new K("webrtc:send-sdp-offer")),await y.write({type:_r.Type.SDP_OFFER,data:v.sdp},{signal:t}),await g.setLocalDescription(v).catch($=>{throw a.error("could not execute setLocalDescription - %e",$),new fn("Failed to set localDescription")}),l?.(new K("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let L=await y.read({signal:t});if(L.type!==_r.Type.SDP_ANSWER)throw new fn("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",L.data);let V=new j2({type:"answer",sdp:L.data});return await g.setRemoteDescription(V).catch($=>{throw a.error("could not execute setRemoteDescription - %e",$),new fn("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new K("webrtc:read-ice-candidates")),await J2(g,y,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected"),b.readyState!=="open"&&(a.trace("wait for init channel to open"),await Le(b,"open",{signal:t})),a.trace("closing init channel"),b.close(),a.trace("waiting for init channel to close"),await Le(b,"close",{signal:t}),l?.(new K("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await p.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:g,muxerFactory:m}}catch(b){throw a.error("outgoing signaling error - %e",b),g.close(),p.abort(b),b}finally{g.onicecandidate=null,g.onicecandidateerror=null}}var yC=Ke(Cc.matchers[0],Ve(290)),tg=class r extends ue{transportManager;shutdownController;events;constructor(e,t){super(),this.transportManager=e.transportManager,this.events=e.events,this.shutdownController=t.shutdownController,this.onTransportListening=this.onTransportListening.bind(this)}async listen(){this.events.addEventListener("transport:listening",this.onTransportListening)}onTransportListening(e){e.detail.getAddrs().filter(n=>yC.exactMatch(n)).map(n=>n.encapsulate("/webrtc")).length>0&&this.safeDispatchEvent("listening")}getAddrs(){return this.transportManager.getListeners().filter(e=>!(e instanceof r)).map(e=>e.getAddrs().filter(t=>yC.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}updateAnnounceAddrs(){}async close(){this.events.removeEventListener("transport:listening",this.onTransportListening),this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function wC(r,e,{peerConnection:t,signal:n,log:o}){o.trace("new inbound signaling stream");let i=Qe(r).pb(_r);try{t.onicecandidate=({candidate:d})=>{if(t.connectionState==="connected"){o.trace("ignore new ice candidate as peer connection is already connected");return}if(d==null||d?.candidate===""){o.trace("recipient detected end of ICE candidates");return}let f=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",f),i.write({type:_r.Type.ICE_CANDIDATE,data:f},{signal:n}).catch(h=>{o.error("error sending ICE candidate - %e",h)})},o.trace("recipient read SDP offer");let c=await i.read({signal:n});if(c.type!==_r.Type.SDP_OFFER)throw new fn(`expected message type SDP_OFFER, received: ${c.type??"undefined"} `);o.trace("recipient received SDP offer %s",c.data);let l=new j2({type:"offer",sdp:c.data});await t.setRemoteDescription(l).catch(d=>{throw o.error("could not execute setRemoteDescription - %e",d),new fn("Failed to set remoteDescription")});let u=await t.createAnswer().catch(d=>{throw o.error("could not execute createAnswer - %e",d),new fn("Failed to create answer")});o.trace("recipient send SDP answer %s",u.sdp),await i.write({type:_r.Type.SDP_ANSWER,data:u.sdp},{signal:n}),await t.setLocalDescription(u).catch(d=>{throw o.error("could not execute setLocalDescription - %e",d),new fn("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await J2(t,i,{direction:"recipient",signal:n,log:o})}catch(c){if(t.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a - %e",e.remoteAddr,c),t.close(),c;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",e.remoteAddr,c)}let s=eg(e.remoteAddr),a=j(`/webrtc/p2p/${s}`);return o.trace("recipient connected to remote address %s",a),{remoteAddress:a,remotePeer:s}}var rg=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,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"})})}[li]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Te]=["@libp2p/transport"];[Ir]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(rf,(e,t)=>{let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t,n).catch(o=>{this.log.error("failed to handle incoming connect from %p - %e",t.remotePeer,o)}).finally(()=>{n.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(rf),this._started=!1}createListener(e){return new tg(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Wu.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:i}=await mC({rtcConfiguration:await gy(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}),s=of({peerConnection:o,remoteAddr:n,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,remotePeer:eg(e),muxerFactory:i,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,s),a}async _onProtocol(e,t,n){let o=new Y2(await gy(this.init.rtcConfiguration));o.addEventListener("connectionstatechange",()=>{switch(o.connectionState){case"closed":o.close();break;default:break}});let i=new rs({peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s,remotePeer:a}=await wC(e,t,{peerConnection:o,signal:n,log:this.log});await e.close({signal:n});let c=of({peerConnection:o,remoteAddr:s,metrics:this.metrics?.listenerEvents,direction:"inbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")});await this.components.upgrader.upgradeInbound(c,{skipEncryption:!0,skipProtection:!0,remotePeer:a,muxerFactory:i,signal:n}),this._closeOnShutdown(o,c)}catch(s){throw this.log.error("incoming signaling error - %e",s),o.close(),e.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection - %e",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function gC(r){let e=r.getComponents().filter(({name:n})=>n==="p2p").map(({value:n})=>n).pop();if(e==null)throw new _("Destination peer id was missing");return{circuitAddress:j(r.getComponents().filter(({name:n})=>n!=="webrtc")),targetPeer:Xe(e)}}var xy=Object.values(fs).map(r=>r.decoder).reduce((r,e)=>r.or(e)),X$=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function bC(r){return r?.match(X$)?.groups?.fingerprint}function Ey(r){let t=r.getComponents().find(n=>n.code===466)?.value;if(t===void 0||t==="")throw new _(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function Q$(r){return nt.decode(xy.decode(r))}function Z$(r){let e=Q$(Ey(r)),t=J$(e.code),n=e.digest.reduce((i,s)=>i+s.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new X2(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function xC(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=cr(st.code,t);return j(`/certhash/${dl.encode(n.bytes)}`)}function J$(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new Z2(r)}}function EC(r,e){let{host:t,port:n,type:o}=ce(r);if(o!=="ip4"&&o!=="ip6")throw new _(`Multiaddr ${r} was not an IPv4 or IPv6 address`);let i=Z$(r);return{type:"answer",sdp:`v=0
66
66
  o=- 0 0 IN IP${o==="ip4"?4:6} ${t}
67
67
  s=-
68
68
  t=0 0
@@ -73,13 +73,13 @@ a=mid:0
73
73
  a=ice-options:ice2
74
74
  a=ice-ufrag:${e}
75
75
  a=ice-pwd:${e}
76
- a=fingerprint:${s}
76
+ a=fingerprint:${i}
77
77
  a=setup:passive
78
78
  a=sctp-port:5000
79
- a=max-message-size:${qa}
79
+ a=max-message-size:${tl}
80
80
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
81
81
  a=end-of-candidates
82
- `}}function qv(r,e){let{host:t,port:n,type:o}=oe(r);if(o!=="ip4"&&o!=="ip6")throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`);return{type:"offer",sdp:`v=0
82
+ `}}function vC(r,e){let{host:t,port:n,type:o}=ce(r);if(o!=="ip4"&&o!=="ip6")throw new _(`Multiaddr ${r} was not an IPv4 or IPv6 address`);return{type:"offer",sdp:`v=0
83
83
  o=- 0 0 IN IP${o==="ip4"?4:6} ${t}
84
84
  s=-
85
85
  c=IN IP${o==="ip4"?4:6} ${t}
@@ -92,15 +92,15 @@ a=ice-ufrag:${e}
92
92
  a=ice-pwd:${e}
93
93
  a=fingerprint:sha-256 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
94
94
  a=sctp-port:5000
95
- a=max-message-size:${qa}
95
+ a=max-message-size:${tl}
96
96
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
97
97
  a=end-of-candidates
98
- `}}function m6(r,e){if(r.sdp===void 0)throw new A("Can't munge a missing SDP");let t=r.sdp.includes(`\r
98
+ `}}function vy(r,e){if(r.sdp===void 0)throw new _("Can't munge a missing SDP");let t=r.sdp.includes(`\r
99
99
  `)?`\r
100
100
  `:`
101
101
  `;try{r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
102
102
  a=ice-ufrag:`+e+t).replace(/\na=ice-pwd:[^\n]*\n/,`
103
- a=ice-pwd:`+e+t)}catch{}return r}var g6=C("libp2p-webrtc-noise:");function zv(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=C(n,"hex"),s=Wt(ze.code,o),i=h6.decode(p6(e)),a=g6.byteLength+s.bytes.byteLength+i.byteLength;return t==="server"?Oe([g6,i,s.bytes],a):Oe([g6,s.bytes,i],a)}var sN=L0?"iceconnectionstatechange":"connectionstatechange";function iN(r,e){return r.role==="server"}async function Gv(r,e,t,n){let o=r.createDataChannel("",{negotiated:!0,id:0});try{if(n.role==="client"){n.log.trace("client creating local offer");let u=await r.createOffer();n.log.trace("client created local offer %s",u.sdp);let f=m6(u,t);n.log.trace("client setting local offer %s",f.sdp),await r.setLocalDescription(f);let h=Hv(n.remoteAddr,t);n.log.trace("client setting server description %s",h.sdp),await r.setRemoteDescription(h)}else{let u=qv(n.remoteAddr,t);n.log.trace("server setting client %s %s",u.type,u.sdp),await r.setRemoteDescription(u),n.log.trace("server creating local answer");let f=await r.createAnswer();n.log.trace("server created local answer");let h=m6(f,t);n.log.trace("server setting local description %s",f.sdp),await r.setLocalDescription(h)}if(o.readyState!=="open"&&(n.log.trace("%s wait for handshake channel to open, starting status %s",n.role,o.readyState),await wo(o,"open",n)),n.log.trace("%s handshake channel opened",n.role),iN(n,r)){let u=r.remoteFingerprint()?.value??"";n.remoteAddr=n.remoteAddr.encapsulate(Vv(u))}let s=Kv(r.localDescription?.sdp);if(s==null)throw new ss("Could not get fingerprint from local description sdp");n.log.trace("%s performing noise handshake",n.role);let i=zv(s,n.remoteAddr,n.role),a=sp({prologueBytes:i})(n),c=wu({channel:o,direction:"outbound",isHandshake:!0,log:n.log,...n.dataChannel??{}}),l=bu({peerConnection:r,remoteAddr:n.remoteAddr,metrics:n.events,direction:n.role==="client"?"outbound":"inbound",log:n.logger.forComponent("libp2p:webrtc-direct:connection")});if(r.addEventListener(sN,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(u=>{n.log.error("error closing connection - %e",u),l.abort(u)});break;default:break}}),n.events?.increment({peer_connection:!0}),n.role==="client"){n.log.trace("%s secure inbound",n.role);let u=await a.secureInbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});return n.log.trace("%s upgrade outbound",n.role),await n.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:u.remotePeer,muxerFactory:e,signal:n.signal})}n.log.trace("%s secure outbound",n.role);let d=await a.secureOutbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${d.remotePeer}`),n.log.trace("%s upgrade inbound",n.role),await n.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:d.remotePeer,muxerFactory:e,signal:n.signal})}catch(s){throw o.close(),r.close(),s}}async function Yv(r,e,t={}){let n=t.certificate;n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t.rtcConfiguration=="function"?await t.rtcConfiguration():t.rtcConfiguration,s=new RTCPeerConnection({...o??{},certificates:[n]}),i=new os({peerConnection:s,metrics:t.events,dataChannelOptions:t.dataChannel});return{peerConnection:s,muxerFactory:i}}var V0=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"})})}[vo]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[me]=["@libp2p/transport"];async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getComponents().findLast(c=>c.code===421)?.value;o!=null&&(n=Me(o));let s=Ov(),{peerConnection:i,muxerFactory:a}=await Yv("client",s,{rtcConfiguration:typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{},dataChannel:this.init.dataChannel});try{return await Gv(i,a,s,{role:"client",log:this.log,logger:this.components.logger,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeer:n,privateKey:this.components.privateKey})}catch(c){throw i.close(),c}}createListener(e){throw new M0("WebRTCDirectTransport.createListener")}listenFilter(e){return[]}dialFilter(e){return e.filter(gl.exactMatch)}};function jv(r){return e=>new V0(e,r)}function Xv(r){return e=>new K0(e,r)}var aN=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 cN(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!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}=aN(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function Qv(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=cN(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function Zv(){throw new Error("WebSocket Servers can not be created in the browser!")}var lN=1024*1024*4,uN=10,y6=class extends Oo{websocket;maxBufferedAmount;checkBufferedAmountTask;constructor(e){super(e),this.websocket=e.websocket,this.maxBufferedAmount=e.maxBufferedAmount??lN,this.checkBufferedAmountTask=oa(this.checkBufferedAmount.bind(this),e.bufferedAmountPollInterval??uN),this.websocket.addEventListener("close",t=>{if(this.log('closed - code %d, reason "%s", wasClean %s',t.code,t.reason,t.wasClean),this.checkBufferedAmountTask.stop(),!t.wasClean){this.onRemoteReset();return}this.onTransportClosed()},{once:!0}),this.websocket.addEventListener("message",t=>{try{let n;if(typeof t.data=="string")n=C(t.data);else if(t.data instanceof ArrayBuffer)n=new Uint8Array(t.data,0,t.data.byteLength);else{this.abort(new Error("Incorrect binary type"));return}this.onData(n)}catch(n){this.log.error("error receiving data - %e",n)}})}sendData(e){for(let n of e)this.websocket.send(n);let t=this.websocket.bufferedAmount<this.maxBufferedAmount;return t||this.checkBufferedAmountTask.start(),{sentBytes:e.byteLength,canSendMore:t}}sendReset(){this.websocket.close(1006)}async sendClose(e){this.websocket.close(),e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}checkBufferedAmount(){this.log("buffered amount now %d",this.websocket.bufferedAmount),this.websocket.bufferedAmount===0&&(this.checkBufferedAmountTask.stop(),this.safeDispatchEvent("drain"))}};function Jv(r){return new y6(r)}var w6=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"})})}[vo]=!0;[Symbol.toStringTag]="@libp2p/websockets";[me]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=Jv({websocket:await this._connect(e,t),remoteAddr:e,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:websockets:connection"),maxBufferedAmount:this.init.maxBufferedAmount,bufferedAmountPollInterval:this.init.bufferedAmountPollInterval});this.log("new outbound connection %s",n.remoteAddr);let o=await t.upgrader.upgradeOutbound(n,t);return this.log("outbound connection %s upgraded",n.remoteAddr),o}async _connect(e,t){t?.signal?.throwIfAborted();let n=qo(e);this.log("create websocket connection to %s",n);let o=new WebSocket(n);o.binaryType="arraybuffer";try{t.onProgress?.(new H("websockets:open-connection")),await Qv(o,"open",t)}catch(s){if(t.signal?.aborted)throw this.metrics?.dialerEvents.increment({abort:!0}),new di(`Could not connect to ${n}`);this.metrics?.dialerEvents.increment({error:!0});try{o.close()}catch{}throw s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),o}createListener(e){return Zv({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e.filter(t=>ro.exactMatch(t)||Qs.exactMatch(t))}dialFilter(e){return this.listenFilter(e)}};function eS(r={}){return e=>new w6(e,r)}var b6=Ln(th(),1);function tS(r,e){let t=e.map((n,o)=>({record:vn(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=b6.default.fromString(n.record.validity).toDate(),c=b6.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 rS="6.0.21",nS="helia";var oS={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/dnsaddr/va1.bootstrap.libp2p.io/p2p/12D3KooWKnDdG3iXw9eTFijk3EWSunZcFi54Zka4wmtqtt6rPxc8","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function H0(r={}){let e=`${nS}/${rS} ${o1()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[UE(),Xv(),jv(),eS()],connectionEncrypters:[sp()],streamMuxers:[vE(),yv()],peerDiscovery:[_E(oS)],services:{autoNAT:TE(),dcutr:KE(),delegatedRouting:ew(g3()),dht:fv({clientMode:!0,validators:{ipns:ch},selectors:{ipns:tS}}),identify:Lx(),identifyPush:Dx(),keychain:Z1(r.keychain),ping:Sv(),http:Tx()}}}async function sS(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await n4(r.datastore,r.keychain));let t=H0(e);return t.datastore=t.datastore??r.datastore,await Ww({...t,...e,start:!1})}async function E6(r={}){let e=r.datastore??new Js,t=r.blockstore??new vl,n;return zw(r.libp2p)?n=r.libp2p:n=await sS({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e}),{...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[p3(),n3()],routers:r.routers??[_3(n),I3()],metrics:n.metrics}}async function dN(r={}){let e=await E6(r),t=new Df(e);return e.start!==!1&&await t.start(),t}return dS(fN);})();
103
+ a=ice-pwd:`+e+t)}catch{}return r}var Sy=R("libp2p-webrtc-noise:");function AC(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=R(n,"hex"),i=cr(st.code,o),s=xy.decode(Ey(e)),a=Sy.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?je([Sy,s,i.bytes],a):je([Sy,i.bytes,s],a)}var eV=G2?"iceconnectionstatechange":"connectionstatechange";function tV(r,e){return r.role==="server"}async function TC(r,e,t,n){let o=r.createDataChannel("",{negotiated:!0,id:0});try{if(n.role==="client"){n.log.trace("client creating local offer");let d=await r.createOffer();n.log.trace("client created local offer %s",d.sdp);let f=vy(d,t);n.log.trace("client setting local offer %s",f.sdp),await r.setLocalDescription(f);let h=EC(n.remoteAddr,t);n.log.trace("client setting server description %s",h.sdp),await r.setRemoteDescription(h)}else{let d=vC(n.remoteAddr,t);n.log.trace("server setting client %s %s",d.type,d.sdp),await r.setRemoteDescription(d),n.log.trace("server creating local answer");let f=await r.createAnswer();n.log.trace("server created local answer");let h=vy(f,t);n.log.trace("server setting local description %s",f.sdp),await r.setLocalDescription(h)}if(o.readyState!=="open"&&(n.log.trace("%s wait for handshake channel to open, starting status %s",n.role,o.readyState),await Le(o,"open",n)),n.log.trace("%s handshake channel opened",n.role),tV(n,r)){let d=r.remoteFingerprint()?.value??"";n.remoteAddr=n.remoteAddr.encapsulate(xC(d))}let i=bC(r.localDescription?.sdp);if(i==null)throw new ns("Could not get fingerprint from local description sdp");n.log.trace("%s performing noise handshake",n.role);let s=AC(i,n.remoteAddr,n.role),a=Sm({prologueBytes:s})(n),c=nf({channel:o,direction:"outbound",isHandshake:!0,log:n.log,...n.dataChannel??{}}),l=of({peerConnection:r,remoteAddr:n.remoteAddr,metrics:n.events,direction:n.role==="client"?"outbound":"inbound",log:n.logger.forComponent("libp2p:webrtc-direct:connection")});if(r.addEventListener(eV,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(d=>{n.log.error("error closing connection - %e",d),l.abort(d)});break;default:break}}),n.events?.increment({peer_connection:!0}),n.role==="client"){n.log.trace("%s secure inbound",n.role);let d=await a.secureInbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});return n.log.trace("%s upgrade outbound",n.role),await n.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:d.remotePeer,muxerFactory:e,signal:n.signal})}n.log.trace("%s secure outbound",n.role);let u=await a.secureOutbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${u.remotePeer}`),n.log.trace("%s upgrade inbound",n.role),await n.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:u.remotePeer,muxerFactory:e,signal:n.signal})}catch(i){throw o.close(),r.close(),i}}async function _C(r,e,t={}){let n=t.certificate;n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t.rtcConfiguration=="function"?await t.rtcConfiguration():t.rtcConfiguration,i=new RTCPeerConnection({...o??{},certificates:[n]}),s=new rs({peerConnection:i,metrics:t.events,dataChannelOptions:t.dataChannel});return{peerConnection:i,muxerFactory:s}}var ng=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"})})}[li]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Te]=["@libp2p/transport"];async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getComponents().findLast(c=>c.code===421)?.value;o!=null&&(n=Xe(o));let i=hC(),{peerConnection:s,muxerFactory:a}=await _C("client",i,{rtcConfiguration:typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{},dataChannel:this.init.dataChannel});try{return await TC(s,a,i,{role:"client",log:this.log,logger:this.components.logger,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeer:n,privateKey:this.components.privateKey})}catch(c){throw s.close(),c}}createListener(e){throw new Q2("WebRTCDirectTransport.createListener")}listenFilter(e){return[]}dialFilter(e){return e.filter(zu.exactMatch)}};function IC(r){return e=>new ng(e,r)}function CC(r){return e=>new rg(e,r)}function kC(){throw new Error("WebSocket Servers can not be created in the browser!")}var rV=1024*1024*4,nV=10,Ay=class extends vi{websocket;maxBufferedAmount;checkBufferedAmountTask;constructor(e){super(e),this.websocket=e.websocket,this.maxBufferedAmount=e.maxBufferedAmount??rV,this.checkBufferedAmountTask=fc(this.checkBufferedAmount.bind(this),e.bufferedAmountPollInterval??nV),this.websocket.addEventListener("close",t=>{if(this.log('closed - code %d, reason "%s", wasClean %s',t.code,t.reason,t.wasClean),this.checkBufferedAmountTask.stop(),!t.wasClean){this.onRemoteReset();return}this.onTransportClosed()},{once:!0}),this.websocket.addEventListener("message",t=>{try{let n;if(typeof t.data=="string")n=R(t.data);else if(t.data instanceof ArrayBuffer)n=new Uint8Array(t.data,0,t.data.byteLength);else{this.abort(new Error("Incorrect binary type"));return}this.onData(n)}catch(n){this.log.error("error receiving data - %e",n)}})}sendData(e){for(let n of e)this.websocket.send(n);let t=this.websocket.bufferedAmount<this.maxBufferedAmount;return t||this.checkBufferedAmountTask.start(),{sentBytes:e.byteLength,canSendMore:t}}sendReset(){this.websocket.close(1006)}async sendClose(e){this.websocket.close(),e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}checkBufferedAmount(){this.log("buffered amount now %d",this.websocket.bufferedAmount),this.websocket.bufferedAmount===0&&(this.checkBufferedAmountTask.stop(),this.safeDispatchEvent("drain"))}};function RC(r){return new Ay(r)}var Ty=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"})})}[li]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Te]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=RC({websocket:await this._connect(e,t),remoteAddr:e,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:websockets:connection"),maxBufferedAmount:this.init.maxBufferedAmount,bufferedAmountPollInterval:this.init.bufferedAmountPollInterval});this.log("new outbound connection %s",n.remoteAddr);let o=await t.upgrader.upgradeOutbound(n,t);return this.log("outbound connection %s upgraded",n.remoteAddr),o}async _connect(e,t){t?.signal?.throwIfAborted();let n=Mi(e);this.log("create websocket connection to %s",n);let o=new WebSocket(n);o.binaryType="arraybuffer";try{t.onProgress?.(new K("websockets:open-connection")),await Le(o,"open",t)}catch(i){if(t.signal?.aborted)throw this.metrics?.dialerEvents.increment({abort:!0}),new xa(`Could not connect to ${n}`);this.metrics?.dialerEvents.increment({error:!0});try{o.close()}catch{}throw i}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),o}createListener(e){return kC({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e.filter(t=>zo.exactMatch(t)||ta.exactMatch(t))}dialFilter(e){return this.listenFilter(e)}};function PC(r={}){return e=>new Ty(e,r)}var _y=yo(hp(),1);function LC(r,e){let t=e.map((n,o)=>({record:so(n),index:o}));return t.sort((n,o)=>{let i=n.record.sequence,s=o.record.sequence;if(i>s)return-1;if(i<s)return 1;if(n.record.validityType===Er.ValidityType.EOL&&o.record.validityType===Er.ValidityType.EOL){let a=_y.default.fromString(n.record.validity).toDate(),c=_y.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 DC="6.0.22-11802dd6",NC="helia";var OC={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/dnsaddr/va1.bootstrap.libp2p.io/p2p/12D3KooWKnDdG3iXw9eTFijk3EWSunZcFi54Zka4wmtqtt6rPxc8","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function og(r={}){let e=`${NC}/${DC} ${y0()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[w_(),CC(),IC(),PC()],connectionEncrypters:[Sm()],streamMuxers:[r_(),XI()],peerDiscovery:[a_(OC)],services:{autoNAT:s_(),dcutr:E_(),delegatedRouting:_S(d8()),dht:zI({clientMode:!0,validators:{ipns:Sp},selectors:{ipns:LC}}),identify:fI(),identifyPush:hI(),keychain:dm(r.keychain),ping:tC(),http:sI()}}}async function BC(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await Z8(r.datastore,r.keychain));let t=og(e);return t.datastore=t.datastore??r.datastore,await yA({...t,...e,start:!1})}async function Iy(r={}){let e=r.datastore??new ia,t=r.blockstore??new Ju,n;return wA(r.libp2p)?n=r.libp2p:n=await BC({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e}),{...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Y6(),M6()],routers:r.routers??[v8(n),x8()],metrics:n.metrics}}async function oV(r={}){let e=await Iy(r),t=new W1(e);return e.start!==!1&&await t.start(),t}return KC(iV);})();
104
104
  /*! Bundled license information:
105
105
 
106
106
  pvtsutils/build/index.js: